{
  "markdown": "# codebase\n\n[![Nx](https://img.shields.io/badge/Nx-Codebase-143055?logo=nx)](https://nx.dev)\n[![TypeScript](https://img.shields.io/badge/TypeScript-Strict-3178C6?logo=typescript)](https://www.typescriptlang.org/)\n[![pnpm](https://img.shields.io/badge/pnpm-Workspace-F69220?logo=pnpm)](https://pnpm.io/)\n[![Node.js](https://img.shields.io/badge/Node.js-24-5FA04E?logo=nodedotjs)](https://nodejs.org/)\n[![Python](https://img.shields.io/badge/Python-3.14-3776AB?logo=python)](https://www.python.org/)\n[![uv](https://img.shields.io/badge/uv-Python%20Packages-DE5FE9?logo=uv)](https://docs.astral.sh/uv/)\n[![Jupyter](https://img.shields.io/badge/Jupyter-1.1-F37626?logo=jupyter&logoColor=white)](https://jupyter.org/)\n[![React](https://img.shields.io/badge/React-19-61DAFB?logo=react)](https://react.dev/)\n[![TanStack](https://img.shields.io/badge/TanStack-Start-FF4154?logo=tanstack)](https://tanstack.com/start)\n[![shadcn/ui](https://img.shields.io/badge/shadcn%2Fui-Components-000000?logo=shadcnui)](https://ui.shadcn.com/)\n[![Radix UI](https://img.shields.io/badge/Radix%20UI-Primitives-161618?logo=radixui)](https://radix-ui.com/)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind-CSS-06B6D4?logo=tailwindcss)](https://tailwindcss.com/)\n[![Lucide](https://img.shields.io/badge/Lucide-Icons-f67373?logo=lucide)](https://lucide.dev/)\n[![Recharts](https://img.shields.io/badge/Recharts-Charts-22b5bf)](https://recharts.org/)\n[![Zod](https://img.shields.io/badge/Zod-Validation-3E67B1)](https://zod.dev/)\n[![Vite](https://img.shields.io/badge/Vite-Bundler-646CFF?logo=vite)](https://vitejs.dev/)\n[![SWC](https://img.shields.io/badge/SWC-Compiler-F9BC00?logo=swc)](https://swc.rs/)\n[![Vitest](https://img.shields.io/badge/Vitest-Testing-6E9F18?logo=vitest)](https://vitest.dev/)\n[![NestJS](https://img.shields.io/badge/NestJS-Framework-E0234E?logo=nestjs)](https://nestjs.com/)\n[![GraphQL](https://img.shields.io/badge/GraphQL-API-E10098?logo=graphql)](https://graphql.org/)\n[![TypeORM](https://img.shields.io/badge/TypeORM-ORM-E83524)](https://typeorm.io/)\n[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-Database-4169E1?logo=postgresql)](https://www.postgresql.org/)\n[![LangChain](https://img.shields.io/badge/LangChain-AI-1C3C3C?logo=langchain)](https://python.langchain.com/)\n[![LangGraph](https://img.shields.io/badge/LangGraph-Agents-1C3C3C?logo=langchain)](https://langchain-ai.github.io/langgraph/)\n[![Ollama](https://img.shields.io/badge/Ollama-Local%20LLM-000000?logo=ollama)](https://ollama.com/)\n[![Pydantic](https://img.shields.io/badge/Pydantic-Validation-E92063?logo=pydantic)](https://docs.pydantic.dev/)\n[![ESLint](https://img.shields.io/badge/ESLint-Linting-4B32C3?logo=eslint)](https://eslint.org/)\n[![Oxlint](https://img.shields.io/badge/Oxlint-Linting-8A2BE2)](https://oxc.rs/docs/guide/usage/linter)\n[![Prettier](https://img.shields.io/badge/Prettier-Formatter-F7B93E?logo=prettier)](https://prettier.io/)\n[![Stylelint](https://img.shields.io/badge/Stylelint-CSS-263238?logo=stylelint)](https://stylelint.io/)\n[![Ruff](https://img.shields.io/badge/Ruff-Linting-D7FF64?logo=ruff)](https://docs.astral.sh/ruff/)\n[![Semantic Release](https://img.shields.io/badge/Semantic%20Release-Versioning-494949?logo=semantic-release)](https://semantic-release.gitbook.io/)\n[![Docker](https://img.shields.io/badge/Docker-Container-2496ED?logo=docker)](https://www.docker.com/)\n[![Helm](https://img.shields.io/badge/Helm-Charts-0F1689?logo=helm)](https://helm.sh/)\n[![Kubernetes](https://img.shields.io/badge/Kubernetes-K8s-326CE5?logo=kubernetes)](https://kubernetes.io/)\n[![Terraform](https://img.shields.io/badge/Terraform-IaC-844FBA?logo=terraform)](https://www.terraform.io/)\n\n[![Lint Codebase](https://github.com/JimmyPaolini/codebase/actions/workflows/lint-codebase.yml/badge.svg)](https://github.com/JimmyPaolini/codebase/actions/workflows/lint-codebase.yml)\n[![Test Coverage](https://github.com/JimmyPaolini/codebase/actions/workflows/test-coverage.yml/badge.svg)](https://github.com/JimmyPaolini/codebase/actions/workflows/test-coverage.yml)\n[![Scan Security](https://github.com/JimmyPaolini/codebase/actions/workflows/scan-security.yml/badge.svg)](https://github.com/JimmyPaolini/codebase/actions/workflows/scan-security.yml)\n[![Validate Conventions](https://github.com/JimmyPaolini/codebase/actions/workflows/validate-conventions.yml/badge.svg?event=pull_request)](https://github.com/JimmyPaolini/codebase/actions/workflows/validate-conventions.yml)\n[![Make Projects](https://github.com/JimmyPaolini/codebase/actions/workflows/make-projects.yml/badge.svg)](https://github.com/JimmyPaolini/codebase/actions/workflows/make-projects.yml)\n[![Audit Issues](https://github.com/JimmyPaolini/codebase/actions/workflows/audit-issues.yml/badge.svg?branch=main)](https://github.com/JimmyPaolini/codebase/actions/workflows/audit-issues.yml)\n[![Make Codebase](https://github.com/JimmyPaolini/codebase/actions/workflows/make-codebase.yml/badge.svg)](https://github.com/JimmyPaolini/codebase/actions/workflows/make-codebase.yml)\n[![Push Releases](https://github.com/JimmyPaolini/codebase/actions/workflows/push-releases.yml/badge.svg)](https://github.com/JimmyPaolini/codebase/actions/workflows/push-releases.yml)\n\nA modern TypeScript codebase with Nx, featuring automated releases, comprehensive code quality tools, and strict type safety.\n\n## 💽 Projects\n\n- **🤲 [affirmations](applications/affirmations)** - Python LangChain + Ollama affirmation generator (LangGraph ReAct agent, SearxNG)\n- **🛰️ [caelundas](applications/caelundas)** - Swiss Ephemeris calendar generator that turns astronomical events into an `.ics` file\n- **🔭 callidescope** - Call stack tracing toolchain that follows control flow through injected dependencies and reports where a stack got too deep\n  - **[callidescope-agents](packages/callidescope-agents)** - Agent skills for the callidescope toolchain, published and installed back from the lockfile like any other vendored skill\n  - **[callidescope-cli](packages/callidescope-cli)** - Command-line host that builds the call graph with the TypeScript compiler API, resolves NestJS injected dependencies, and reports the deepest stack below every entry point\n  - **[callidescope-configuration](packages/callidescope-configuration)** - Reads `callidescope.config.ts` for entry-point rules, depth and cohesion limits, exclusion globs, and output destinations\n  - **[callidescope-examples](packages/callidescope-examples)** - A small codebase built to be traced, carrying one worked example per rule, finding, and output the toolchain has\n  - **[callidescope-graph](packages/callidescope-graph)** - Builds the call graph from traced TypeScript source and measures its depth, breadth, and cohesion\n  - **[callidescope-nx](packages/callidescope-nx)** - Nx plugin inferring per-project `trace`, `depth`, and `breadth` targets that follow the Nx dependency graph, keeping every Nx dependency out of the packages that trace\n  - **[callidescope-output](packages/callidescope-output)** - Renders call-graph findings into markdown, mermaid, and JSON output formats\n- **🕸️ codependix** - Dependency graph export toolchain that reads what each project depends on, renders it as JSON and Markdown diagrams, and gates the rules those graphs are judged against\n  - **[codependix-agents](packages/codependix-agents)** - Agent skills for the codependix toolchain, installable by any workspace that uses codependix\n  - **[codependix-boundaries](packages/codependix-boundaries)** - Builds each level's graph for a workspace, judges it against the declared rules, and reports the edges and cycles that break them\n  - **[codependix-cli](packages/codependix-cli)** - Command-line host that exports a project's Nx, NestJS, and file-level dependency graphs as JSON and Markdown anchor blocks, and gates the rules over them\n  - **[codependix-configuration](packages/codependix-configuration)** - Reads `codependix.config.ts` and resolves per-project export destinations and boundary rules\n  - **[codependix-examples](packages/codependix-examples)** - Sixteen subjects built to be graphed, each carrying the guide codependix renders from it\n  - **[codependix-imports](packages/codependix-imports)** - Builds a project's file-level import graph — a `typescript` module walking its own `ts.Program`, and a `python` module parsing `import`/`from ... import` statements\n  - **[codependix-nestjs](packages/codependix-nestjs)** - Explores a NestJS project's container and builds its module graph\n  - **[codependix-nx](packages/codependix-nx)** - Builds a project's one-hop Nx dependency neighborhood from the Nx project graph\n- **⏲️ codometer** - Repository measurement toolchain that counts a codebase and reports what it found\n  - **[codometer-agents](packages/codometer-agents)** - Agent skills for the codometer toolchain, published and installed back from the lockfile like any other vendored skill\n  - **[codometer-changes](packages/codometer-changes)** - Diffs codometer reports against a baseline snapshot\n  - **[codometer-cli](packages/codometer-cli)** - Command-line host that measures TypeScript, JavaScript, Python, JSON, markdown, and Jupyter notebooks, then writes the badge block in this README, a JSON report, or both\n  - **[codometer-configuration](packages/codometer-configuration)** - Reads `codometer.config.ts` for exclusion globs, output destinations and their render/write callbacks, and the Python interpreter\n  - **[codometer-customization](packages/codometer-customization)** - Evaluates codometer's configured custom counters\n  - **[codometer-discovery](packages/codometer-discovery)** - Glob matching and gitignore-aware file walking, plus resolving configured measurement targets to file sets\n  - **[codometer-examples](packages/codometer-examples)** - A sample corpus with known contents and one runnable example per thing codometer does, with tests that assert every number the guides quote\n  - **[codometer-languages](packages/codometer-languages)** - Every input language analyzer codometer measures, behind one `analyze()` call\n  - **[codometer-output](packages/codometer-output)** - Every codometer output format - JSON reports, README badges, and the pull request change report\n  - **[codometer-size](packages/codometer-size)** - Compresses a target's matched files and measures their size\n- **👔 conformetry** - Template-driven code generation and conformance validation toolchain\n  - **[conformetry-agents](packages/conformetry-agents)** - Agent skills for the conformetry toolchain, published and installed back from the lockfile like any other vendored skill\n  - **[conformetry-cli](packages/conformetry-cli)** - Command-line host that expands globs, prompts for inputs, and runs generation and validation\n  - **[conformetry-configuration](packages/conformetry-configuration)** - Configuration loading, template discovery, and generator input resolution\n  - **[conformetry-core](packages/conformetry-core)** - Shared error types, language validator contracts, and finding reporting\n  - **[conformetry-examples](packages/conformetry-examples)** - Eleven runnable examples of the toolchain, each with its own configuration, template, instances, and guide, executed by CI so the guides cannot rot\n  - **[conformetry-files](packages/conformetry-files)** - Checks that every file a template declares exists, whatever its extension\n  - **[conformetry-generation](packages/conformetry-generation)** - Mustache template rendering and scaffold file generation\n  - **[conformetry-languages](packages/conformetry-languages)** - Every language conformetry compares files with, as modules of one package, plus the resolution that picks them and the text fallback\n  - **[conformetry-nx](packages/conformetry-nx)** - Nx plugin host with generators, executors, and the emitted-plugin bootstrap\n  - **[conformetry-validation](packages/conformetry-validation)** - Validation orchestration, language routing, and finding deduplication\n- **[infrastructure](infrastructure)** - Helm charts, Terraform, Kubernetes infrastructure\n- **[JimmyPaolini](applications/JimmyPaolini)** - GitHub profile site\n- **🐺 lexico** - Latin-English dictionary suite: the web application, its components, its schema, and the ingestion that fills it\n  - **[lexico](applications/lexico)** - TanStack Start SSR dictionary web application\n  - **[lexico-components](packages/lexico-components)** - Shared React component library using shadcn/ui and Radix primitives\n  - **[lexico-entities](packages/lexico-entities)** - TypeORM entities, migrations, and grammatical enumerations for the dictionary and literature schema\n  - **[lexico-ingestion](applications/lexico-ingestion)** - NestJS CLI that scrapes and loads dictionary, literature, and etymology sources\n- **🪵 [logger](packages/logger)** - Shared pino-backed NestJS `LoggerService` and `LoggerModule`\n- **🌀 [meanderaw](applications/meanderaw)** - CLI that generates Greek meander (key/fret) SVG patterns programmatically from a type, row count, and repeat count\n- **↔️ [synchronization](tools/synchronization)** - NestJS CLI that regenerates the workspace's derived configuration and documentation, and fails CI when they drift\n- **🧑‍⚖️ [validation](tools/validation)** - NestJS CLI for the repository's one-sided checks, the ones with a check and no write, such as the pull request metadata gate\n\n## 📖 Documentation\n\n### Getting Started & Workflow\n\n- [Contributing Guide](CONTRIBUTING.md) - **Start here.** Local and dev container setup, the commands to run, code standards, branch and commit conventions, pull requests, and releases\n- [AGENTS.md](AGENTS.md) - Commands, project layout, conventions, code quality gates, and git workflow\n- [Release Process](documentation/development/release-process.md) - Automated semantic versioning and changelogs\n\n### Architecture & Systems\n\n- [CI/CD Workflows](.github/workflows) - GitHub Actions workflows and the shared `setup-codebase` composite action\n- [Infrastructure](infrastructure/README.md) - Helm charts, Terraform, and the Kubernetes deployment pipeline\n- [Dev Container](.devcontainer/README.md) - Containerized development environment\n- [Scripts](scripts/README.md) - Local setup and maintenance scripts\n\n### Conventions & Guidelines\n\nConventions live in [AGENTS.md](AGENTS.md) and the agent skills below, which are the single sources of truth. Every project also has its own `AGENTS.md` with project-specific patterns.\n\n**🤖 Agent Skills (Domain Knowledge)**\nSkills are specialized instruction files used by our automated agents, but they also serve as excellent deep-dive documentation for human developers.\n\n- [View all Skills](.agents/skills) - Complete index of available skills\n- **Languages:** [TypeScript](.agents/skills/write-typescript/SKILL.md) / [React](.agents/skills/write-react/SKILL.md) / [Python](.agents/skills/write-python/SKILL.md) / [Comments](.agents/skills/write-comments/SKILL.md)\n- **Quality:** [Validate Code](.agents/skills/validate-code/SKILL.md) / [Testing Strategy](.agents/skills/testing-strategy/SKILL.md) / [Testing Mocks](.agents/skills/testing-mocks/SKILL.md) / [Error Handling](.agents/skills/handle-errors/SKILL.md)\n- **Workflows:** [Git Commits](.agents/skills/commit-code/SKILL.md) / [PR Management](.agents/skills/create-pull-request/SKILL.md) / [Branch Naming](.agents/skills/checkout-branch/SKILL.md)\n- **Tooling:** [Nx Workspaces](.agents/skills/nx-workspace/SKILL.md) / [Generators](.agents/skills/nx-generate/SKILL.md) / [Task Running](.agents/skills/nx-run-tasks/SKILL.md)\n- **Triage:** [Failing CI](.agents/skills/triage-deployment/SKILL.md) / [Rejected Commits](.agents/skills/triage-submission/SKILL.md) / [Spell Check](.agents/skills/spell-check/SKILL.md)\n\nOther important files include [CHANGELOG.md](CHANGELOG.md) and [SECURITY.md](SECURITY.md).\n\n## 👔 Conformetry\n\nTemplate-driven code generation and conformance validation, templates synced from [configuration/conformetry.config.ts](configuration/conformetry.config.ts) by `nx run synchronization:conformetry-generators:write`.\n\n<!-- conformetry-generators-table start -->\n| Template | Description |\n| -------- | ----------- |\n| `jupyter-notebook-application` | A standalone Python application template with a Jupyter notebook entry point, pytest/pyright/ruff tooling, and a shared uv workspace venv |\n| `nestjs-command-project` | A standalone NestJS CLI application template built on nest-commander, for a new command-line tool in applications/, packages/, or tools/ |\n| `nestjs-graphql-application` | A standalone NestJS GraphQL API application template, for a new backend service exposing a GraphQL schema over HTTP |\n| `nestjs-service-project` | A standalone NestJS library package template for internal workspace code shared across projects, with no CLI entry point or HTTP server |\n| `nestjs-command-module` | A nest-commander command module template — command, module, constants, types, and unit test — for an existing NestJS command-line project |\n| `nestjs-dataloader-module` | A GraphQL dataloader module template — dataloader, module, types, and unit test — for batching lookups inside an existing NestJS project |\n| `nestjs-graphql-module` | A GraphQL module template — resolver, entities, args/input types, factories, constants, and unit test — for an existing NestJS project |\n| `nestjs-service-file` | A service and unit test file template for an existing NestJS module, without the surrounding module files |\n| `nestjs-service-module` | A plain service module template — module, service, constants, types, and unit test — for an existing NestJS project |\n| `react-component` | A React component and test file template for an existing React project |\n<!-- conformetry-generators-table end -->\n\n## 🕸️ Codependix\n\nThe workspace's dependency graph, exported by [codependix](packages/codependix-cli), regenerated by `nx run codebase:codependix:write`.\n\n<!-- codependix:start name=\"codependix-workspace\" -->\n```mermaid\ngraph LR\n  affirmations[\"affirmations\"]\n  caelundas[\"caelundas\"]\n  callidescope_agents[\"callidescope-agents\"]\n  callidescope_cli[\"callidescope-cli\"]\n  callidescope_configuration[\"callidescope-configuration\"]\n  callidescope_examples[\"callidescope-examples\"]\n  callidescope_graph[\"callidescope-graph\"]\n  callidescope_nx[\"callidescope-nx\"]\n  callidescope_output[\"callidescope-output\"]\n  codependix_agents[\"codependix-agents\"]\n  codependix_boundaries[\"codependix-boundaries\"]\n  codependix_cli[\"codependix-cli\"]\n  codependix_configuration[\"codependix-configuration\"]\n  codependix_examples[\"codependix-examples\"]\n  codependix_imports[\"codependix-imports\"]\n  codependix_nestjs[\"codependix-nestjs\"]\n  codependix_nx[\"codependix-nx\"]\n  codometer_agents[\"codometer-agents\"]\n  codometer_changes[\"codometer-changes\"]\n  codometer_cli[\"codometer-cli\"]\n  codometer_configuration[\"codometer-configuration\"]\n  codometer_customization[\"codometer-customization\"]\n  codometer_discovery[\"codometer-discovery\"]\n  codometer_examples[\"codometer-examples\"]\n  codometer_languages[\"codometer-languages\"]\n  codometer_output[\"codometer-output\"]\n  codometer_size[\"codometer-size\"]\n  conformetry_agents[\"conformetry-agents\"]\n  conformetry_cli[\"conformetry-cli\"]\n  conformetry_configuration[\"conformetry-configuration\"]\n  conformetry_core[\"conformetry-core\"]\n  conformetry_examples[\"conformetry-examples\"]\n  conformetry_files[\"conformetry-files\"]\n  conformetry_generation[\"conformetry-generation\"]\n  conformetry_languages[\"conformetry-languages\"]\n  conformetry_nx[\"conformetry-nx\"]\n  conformetry_validation[\"conformetry-validation\"]\n  lexico[\"lexico\"]\n  lexico_components[\"lexico-components\"]\n  lexico_entities[\"lexico-entities\"]\n  lexico_ingestion[\"lexico-ingestion\"]\n  logger[\"logger\"]\n  meanderaw[\"meanderaw\"]\n  synchronization[\"synchronization\"]\n  validation[\"validation\"]\n  caelundas --> logger\n  callidescope_cli --> callidescope_configuration\n  callidescope_cli --> callidescope_graph\n  callidescope_cli --> callidescope_output\n  callidescope_cli --> logger\n  callidescope_examples -.-> callidescope_cli\n  callidescope_examples --> callidescope_configuration\n  callidescope_graph --> callidescope_configuration\n  callidescope_graph --> logger\n  callidescope_nx --> callidescope_cli\n  callidescope_nx --> callidescope_configuration\n  callidescope_nx --> callidescope_graph\n  callidescope_nx --> callidescope_output\n  callidescope_nx --> logger\n  callidescope_output --> callidescope_configuration\n  callidescope_output --> callidescope_graph\n  callidescope_output --> logger\n  codependix_boundaries --> codependix_configuration\n  codependix_boundaries --> codependix_imports\n  codependix_boundaries --> codependix_nestjs\n  codependix_boundaries --> codependix_nx\n  codependix_cli --> codependix_boundaries\n  codependix_cli --> codependix_configuration\n  codependix_cli --> codependix_imports\n  codependix_cli --> codependix_nestjs\n  codependix_cli --> codependix_nx\n  codependix_cli --> logger\n  codependix_examples --> codependix_boundaries\n  codependix_examples --> codependix_cli\n  codependix_examples --> codependix_configuration\n  codependix_examples --> codependix_imports\n  codependix_examples --> codependix_nestjs\n  codependix_examples --> codependix_nx\n  codependix_examples --> logger\n  codependix_nestjs --> logger\n  codometer_changes --> logger\n  codometer_cli --> codometer_changes\n  codometer_cli --> codometer_configuration\n  codometer_cli --> codometer_customization\n  codometer_cli --> codometer_discovery\n  codometer_cli --> codometer_languages\n  codometer_cli --> codometer_output\n  codometer_cli --> codometer_size\n  codometer_cli --> logger\n  codometer_customization --> codometer_configuration\n  codometer_customization --> codometer_languages\n  codometer_discovery --> codometer_configuration\n  codometer_discovery --> logger\n  codometer_examples --> codometer_cli\n  codometer_examples --> codometer_configuration\n  codometer_languages --> codometer_configuration\n  codometer_languages --> logger\n  codometer_output --> codometer_changes\n  codometer_output --> codometer_configuration\n  codometer_output --> logger\n  codometer_size --> codometer_configuration\n  codometer_size --> logger\n  conformetry_cli --> conformetry_configuration\n  conformetry_cli --> conformetry_core\n  conformetry_cli --> conformetry_generation\n  conformetry_cli --> conformetry_validation\n  conformetry_cli --> logger\n  conformetry_configuration --> conformetry_core\n  conformetry_configuration --> conformetry_generation\n  conformetry_examples -.-> conformetry_cli\n  conformetry_examples --> conformetry_configuration\n  conformetry_examples --> conformetry_core\n  conformetry_examples --> conformetry_generation\n  conformetry_examples --> conformetry_nx\n  conformetry_examples --> conformetry_validation\n  conformetry_files --> conformetry_configuration\n  conformetry_files --> conformetry_core\n  conformetry_languages --> conformetry_core\n  conformetry_nx --> conformetry_configuration\n  conformetry_nx --> conformetry_core\n  conformetry_nx --> conformetry_generation\n  conformetry_nx --> conformetry_validation\n  conformetry_nx --> logger\n  conformetry_validation --> conformetry_configuration\n  conformetry_validation --> conformetry_core\n  conformetry_validation --> conformetry_files\n  conformetry_validation --> conformetry_languages\n  lexico --> lexico_components\n  lexico_ingestion --> lexico_entities\n  lexico_ingestion --> logger\n  meanderaw --> logger\n  synchronization --> conformetry_configuration\n  synchronization --> logger\n  validation --> logger\n```\n\n_Dashed edges are dependencies Nx inferred from configuration rather than from code._\n<!-- codependix:end name=\"codependix-workspace\" -->\n\n<!-- CODE_STATISTICS_START -->\n\n## ⏲️ Codometer\n\nRepository statistics measured by [codometer](packages/codometer-cli), regenerated by `nx run codebase:codometer`.\n\n### Repository\n\n![Lines of Code](https://img.shields.io/badge/Lines_of_Code-265222-22c55e?style=flat-square)\n![Repository Size](https://img.shields.io/badge/Repository_Size-14.59_MB-6b7280?style=flat-square)\n![Folders](https://img.shields.io/badge/Folders-612-4a4a4a?style=flat-square)\n![Source Files](https://img.shields.io/badge/Source_Files-2093-3178c6?style=flat-square)\n\n### TypeScript\n\n![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-2040-3178c6?style=flat-square)\n![Interfaces](https://img.shields.io/badge/Interfaces-806-0ea5e9?style=flat-square)\n![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-34-0369a1?style=flat-square)\n![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)\n![Decorators](https://img.shields.io/badge/Decorators-1093-db2777?style=flat-square)\n![Doc Comments](https://img.shields.io/badge/Doc_Comments-5800-6366f1?style=flat-square)\n![Static Methods](https://img.shields.io/badge/Static_Methods-16-166534?style=flat-square)\n\n### JavaScript\n\n![JavaScript Files](https://img.shields.io/badge/JavaScript_Files-14-f7df1e?style=flat-square)\n![Test Files](https://img.shields.io/badge/Test_Files-501-10b981?style=flat-square)\n![External Packages](https://img.shields.io/badge/External_Packages-118-8b5cf6?style=flat-square)\n![Classes](https://img.shields.io/badge/Classes-707-7c3aed?style=flat-square)\n![Functions](https://img.shields.io/badge/Functions-10924-16a34a?style=flat-square)\n![Methods](https://img.shields.io/badge/Methods-3987-15803d?style=flat-square)\n![Sync Functions](https://img.shields.io/badge/Sync_Functions-12533-4ade80?style=flat-square)\n![Async Functions](https://img.shields.io/badge/Async_Functions-2378-059669?style=flat-square)\n![Constants](https://img.shields.io/badge/Constants-13847-dc2626?style=flat-square)\n![Imports](https://img.shields.io/badge/Imports-8688-0284c7?style=flat-square)\n![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-2739-ea580c?style=flat-square)\n![Comments](https://img.shields.io/badge/Comments-11897-64748b?style=flat-square)\n![Comment Lines](https://img.shields.io/badge/Comment_Lines-28733-475569?style=flat-square)\n![TODO Comments](https://img.shields.io/badge/TODO_Comments-29-ca8a04?style=flat-square)\n\n### Python\n\n![Python Files](https://img.shields.io/badge/Python_Files-39-3776ab?style=flat-square)\n![Python Lines](https://img.shields.io/badge/Python_Lines-3974-4b8bbe?style=flat-square)\n![Python Classes](https://img.shields.io/badge/Python_Classes-22-7c3aed?style=flat-square)\n![Python Functions](https://img.shields.io/badge/Python_Functions-101-16a34a?style=flat-square)\n![Python Protocols](https://img.shields.io/badge/Python_Protocols-0-0ea5e9?style=flat-square)\n![Python Constants](https://img.shields.io/badge/Python_Constants-129-dc2626?style=flat-square)\n![Python Imports](https://img.shields.io/badge/Python_Imports-81-0284c7?style=flat-square)\n![Python Decorators](https://img.shields.io/badge/Python_Decorators-73-db2777?style=flat-square)\n![Docstrings](https://img.shields.io/badge/Docstrings-50-6366f1?style=flat-square)\n![Docstring Lines](https://img.shields.io/badge/Docstring_Lines-143-818cf8?style=flat-square)\n![Python Comments](https://img.shields.io/badge/Python_Comments-32-64748b?style=flat-square)\n![Python Comment Lines](https://img.shields.io/badge/Python_Comment_Lines-32-475569?style=flat-square)\n\n### JSON\n\n![JSON Files](https://img.shields.io/badge/JSON_Files-217-a16207?style=flat-square)\n![JSON Lines](https://img.shields.io/badge/JSON_Lines-23031-ca8a04?style=flat-square)\n![JSON Objects](https://img.shields.io/badge/JSON_Objects-4149-7c3aed?style=flat-square)\n![JSON Arrays](https://img.shields.io/badge/JSON_Arrays-1542-8b5cf6?style=flat-square)\n![JSON Properties](https://img.shields.io/badge/JSON_Properties-13441-0284c7?style=flat-square)\n![JSON Strings](https://img.shields.io/badge/JSON_Strings-8596-16a34a?style=flat-square)\n![JSON Numbers](https://img.shields.io/badge/JSON_Numbers-1269-059669?style=flat-square)\n![JSON Booleans](https://img.shields.io/badge/JSON_Booleans-1673-0ea5e9?style=flat-square)\n![JSON Nulls](https://img.shields.io/badge/JSON_Nulls-0-64748b?style=flat-square)\n![JSON Items](https://img.shields.io/badge/JSON_Items-3578-475569?style=flat-square)\n![JSON Nodes](https://img.shields.io/badge/JSON_Nodes-17229-dc2626?style=flat-square)\n![JSON Max Depth](https://img.shields.io/badge/JSON_Max_Depth-11-ea580c?style=flat-square)\n\n### YAML\n\n![YAML Files](https://img.shields.io/badge/YAML_Files-25-cb171e?style=flat-square)\n![YAML Lines](https://img.shields.io/badge/YAML_Lines-3054-e34c26?style=flat-square)\n![YAML Documents](https://img.shields.io/badge/YAML_Documents-25-f97316?style=flat-square)\n![YAML Mappings](https://img.shields.io/badge/YAML_Mappings-387-7c3aed?style=flat-square)\n![YAML Sequences](https://img.shields.io/badge/YAML_Sequences-75-8b5cf6?style=flat-square)\n![YAML Keys](https://img.shields.io/badge/YAML_Keys-1308-0284c7?style=flat-square)\n![YAML Scalars](https://img.shields.io/badge/YAML_Scalars-2687-16a34a?style=flat-square)\n![YAML Anchors](https://img.shields.io/badge/YAML_Anchors-0-059669?style=flat-square)\n![YAML Aliases](https://img.shields.io/badge/YAML_Aliases-0-10b981?style=flat-square)\n![YAML Comments](https://img.shields.io/badge/YAML_Comments-832-64748b?style=flat-square)\n![YAML Max Depth](https://img.shields.io/badge/YAML_Max_Depth-7-ea580c?style=flat-square)\n\n### TOML\n\n![TOML Files](https://img.shields.io/badge/TOML_Files-5-9c4221?style=flat-square)\n![TOML Lines](https://img.shields.io/badge/TOML_Lines-238-b45309?style=flat-square)\n![TOML Tables](https://img.shields.io/badge/TOML_Tables-25-7c3aed?style=flat-square)\n![TOML Array Tables](https://img.shields.io/badge/TOML_Array_Tables-6-8b5cf6?style=flat-square)\n![TOML Keys](https://img.shields.io/badge/TOML_Keys-114-0284c7?style=flat-square)\n![TOML Arrays](https://img.shields.io/badge/TOML_Arrays-30-16a34a?style=flat-square)\n![TOML Comments](https://img.shields.io/badge/TOML_Comments-42-64748b?style=flat-square)\n\n### Shell\n\n![Shell Files](https://img.shields.io/badge/Shell_Files-34-89e051?style=flat-square)\n![Shell Lines](https://img.shields.io/badge/Shell_Lines-2395-4eaa25?style=flat-square)\n![Shell Functions](https://img.shields.io/badge/Shell_Functions-23-16a34a?style=flat-square)\n![Shell Variables](https://img.shields.io/badge/Shell_Variables-211-0284c7?style=flat-square)\n![Shell Exports](https://img.shields.io/badge/Shell_Exports-12-ea580c?style=flat-square)\n![Shell Conditionals](https://img.shields.io/badge/Shell_Conditionals-163-7c3aed?style=flat-square)\n![Shell Loops](https://img.shields.io/badge/Shell_Loops-17-8b5cf6?style=flat-square)\n![Shell Pipelines](https://img.shields.io/badge/Shell_Pipelines-98-059669?style=flat-square)\n![Shebangs](https://img.shields.io/badge/Shebangs-34-6b7280?style=flat-square)\n![Shell Comments](https://img.shields.io/badge/Shell_Comments-523-64748b?style=flat-square)\n![Shell Comment Lines](https://img.shields.io/badge/Shell_Comment_Lines-523-475569?style=flat-square)\n\n### SQL\n\n![SQL Files](https://img.shields.io/badge/SQL_Files-2-e38c00?style=flat-square)\n![SQL Lines](https://img.shields.io/badge/SQL_Lines-358-f29111?style=flat-square)\n![SQL Statements](https://img.shields.io/badge/SQL_Statements-323-7c3aed?style=flat-square)\n![SQL Selects](https://img.shields.io/badge/SQL_Selects-0-16a34a?style=flat-square)\n![SQL Inserts](https://img.shields.io/badge/SQL_Inserts-1-22c55e?style=flat-square)\n![SQL Updates](https://img.shields.io/badge/SQL_Updates-17-0ea5e9?style=flat-square)\n![SQL Deletes](https://img.shields.io/badge/SQL_Deletes-18-dc2626?style=flat-square)\n![SQL Creates](https://img.shields.io/badge/SQL_Creates-57-0284c7?style=flat-square)\n![SQL Joins](https://img.shields.io/badge/SQL_Joins-0-8b5cf6?style=flat-square)\n![SQL CTEs](https://img.shields.io/badge/SQL_CTEs-37-059669?style=flat-square)\n![SQL Comments](https://img.shields.io/badge/SQL_Comments-0-64748b?style=flat-square)\n\n### HCL\n\n![HCL Files](https://img.shields.io/badge/HCL_Files-2-844fba?style=flat-square)\n![HCL Lines](https://img.shields.io/badge/HCL_Lines-52-a78bfa?style=flat-square)\n![HCL Blocks](https://img.shields.io/badge/HCL_Blocks-11-7c3aed?style=flat-square)\n![HCL Resources](https://img.shields.io/badge/HCL_Resources-1-0284c7?style=flat-square)\n![HCL Variables](https://img.shields.io/badge/HCL_Variables-3-16a34a?style=flat-square)\n![HCL Outputs](https://img.shields.io/badge/HCL_Outputs-1-059669?style=flat-square)\n![HCL Attributes](https://img.shields.io/badge/HCL_Attributes-20-0ea5e9?style=flat-square)\n![HCL Interpolations](https://img.shields.io/badge/HCL_Interpolations-0-db2777?style=flat-square)\n![HCL Comments](https://img.shields.io/badge/HCL_Comments-0-64748b?style=flat-square)\n\n### CSS\n\n![CSS Files](https://img.shields.io/badge/CSS_Files-1-264de4?style=flat-square)\n![CSS Lines](https://img.shields.io/badge/CSS_Lines-136-2965f1?style=flat-square)\n![CSS Rules](https://img.shields.io/badge/CSS_Rules-7-7c3aed?style=flat-square)\n![CSS Selectors](https://img.shields.io/badge/CSS_Selectors-8-8b5cf6?style=flat-square)\n![CSS Declarations](https://img.shields.io/badge/CSS_Declarations-72-0284c7?style=flat-square)\n![CSS At Rules](https://img.shields.io/badge/CSS_At_Rules-10-f97316?style=flat-square)\n![CSS Media Queries](https://img.shields.io/badge/CSS_Media_Queries-0-ea580c?style=flat-square)\n![CSS Custom Properties](https://img.shields.io/badge/CSS_Custom_Properties-65-16a34a?style=flat-square)\n![CSS Comments](https://img.shields.io/badge/CSS_Comments-12-64748b?style=flat-square)\n\n### Conventions\n\n![Module Files](https://img.shields.io/badge/Module_Files-229-7c3aed?style=flat-square)\n![Service Files](https://img.shields.io/badge/Service_Files-316-0284c7?style=flat-square)\n![Command Files](https://img.shields.io/badge/Command_Files-38-16a34a?style=flat-square)\n![Constants Files](https://img.shields.io/badge/Constants_Files-199-ea580c?style=flat-square)\n![Types Files](https://img.shields.io/badge/Types_Files-210-db2777?style=flat-square)\n![Utilities Files](https://img.shields.io/badge/Utilities_Files-13-0ea5e9?style=flat-square)\n![TypeORM Entities](https://img.shields.io/badge/TypeORM_Entities-33-059669?style=flat-square)\n![Unit Tests](https://img.shields.io/badge/Unit_Tests-462-ca8a04?style=flat-square)\n![Integration Tests](https://img.shields.io/badge/Integration_Tests-29-7c3aed?style=flat-square)\n![End To End Tests](https://img.shields.io/badge/End_To_End_Tests-9-0284c7?style=flat-square)\n\n### Jupyter\n\n![Notebooks](https://img.shields.io/badge/Notebooks-4-f37626?style=flat-square)\n![Notebook Cells](https://img.shields.io/badge/Notebook_Cells-18-e8a33d?style=flat-square)\n![Code Cells](https://img.shields.io/badge/Code_Cells-15-3776ab?style=flat-square)\n![Markdown Cells](https://img.shields.io/badge/Markdown_Cells-3-083fa1?style=flat-square)\n![Raw Cells](https://img.shields.io/badge/Raw_Cells-0-9ca3af?style=flat-square)\n![Executed Cells](https://img.shields.io/badge/Executed_Cells-0-16a34a?style=flat-square)\n![Cell Outputs](https://img.shields.io/badge/Cell_Outputs-0-059669?style=flat-square)\n![Notebook Code Lines](https://img.shields.io/badge/Notebook_Code_Lines-873-4b8bbe?style=flat-square)\n![Notebook Classes](https://img.shields.io/badge/Notebook_Classes-9-7c3aed?style=flat-square)\n![Notebook Functions](https://img.shields.io/badge/Notebook_Functions-21-22c55e?style=flat-square)\n![Notebook Imports](https://img.shields.io/badge/Notebook_Imports-61-0284c7?style=flat-square)\n![Notebook Decorators](https://img.shields.io/badge/Notebook_Decorators-1-db2777?style=flat-square)\n![Notebook Prose Lines](https://img.shields.io/badge/Notebook_Prose_Lines-9-1f6feb?style=flat-square)\n![Notebook Headings](https://img.shields.io/badge/Notebook_Headings-3-a78bfa?style=flat-square)\n![Notebook Links](https://img.shields.io/badge/Notebook_Links-0-10b981?style=flat-square)\n![Notebook Images](https://img.shields.io/badge/Notebook_Images-0-34d399?style=flat-square)\n![Notebook Code Blocks](https://img.shields.io/badge/Notebook_Code_Blocks-0-dc2626?style=flat-square)\n![Notebook Properties](https://img.shields.io/badge/Notebook_Properties-138-ca8a04?style=flat-square)\n![Notebook Nodes](https://img.shields.io/badge/Notebook_Nodes-1041-a16207?style=flat-square)\n![Notebook Max Depth](https://img.shields.io/badge/Notebook_Max_Depth-5-ea580c?style=flat-square)\n\n### Markdown\n\n![Markdown Files](https://img.shields.io/badge/Markdown_Files-266-083fa1?style=flat-square)\n![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-74728-1f6feb?style=flat-square)\n![H1](https://img.shields.io/badge/H1-250-7c3aed?style=flat-square)\n![H2](https://img.shields.io/badge/H2-1763-8b5cf6?style=flat-square)\n![H3](https://img.shields.io/badge/H3-2188-a78bfa?style=flat-square)\n![H4](https://img.shields.io/badge/H4-98-c4b5fd?style=flat-square)\n![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)\n![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)\n![Paragraphs](https://img.shields.io/badge/Paragraphs-11043-64748b?style=flat-square)\n![Lists](https://img.shields.io/badge/Lists-1202-16a34a?style=flat-square)\n![List Items](https://img.shields.io/badge/List_Items-5521-22c55e?style=flat-square)\n![Task List Items](https://img.shields.io/badge/Task_List_Items-57-4ade80?style=flat-square)\n![Tables](https://img.shields.io/badge/Tables-693-0284c7?style=flat-square)\n![Table Rows](https://img.shields.io/badge/Table_Rows-6969-0ea5e9?style=flat-square)\n![Links](https://img.shields.io/badge/Links-1933-059669?style=flat-square)\n![Images](https://img.shields.io/badge/Images-7117-10b981?style=flat-square)\n![Code Blocks](https://img.shields.io/badge/Code_Blocks-2058-dc2626?style=flat-square)\n![Inline Code](https://img.shields.io/badge/Inline_Code-30353-ef4444?style=flat-square)\n![Block Quotes](https://img.shields.io/badge/Block_Quotes-34-ca8a04?style=flat-square)\n![Thematic Breaks](https://img.shields.io/badge/Thematic_Breaks-33-a16207?style=flat-square)\n<!-- CODE_STATISTICS_END -->\n\n<!-- CALL_STACKS_START -->\n\n## 🔭 Callidescope\n\nThe workspace's call graph, traced by [callidescope](packages/callidescope-cli), regenerated by `nx run codebase:callidescope:write`. Projects are listed tightest-first: the rows at the top are the ones a ratchet cannot descend past.\n\n| Measure | Value |\n| --- | --- |\n| Callables | 5013 |\n| Files | 1404 |\n| Calls traced | 5689 |\n| Call stacks | 1286 |\n| Deepest stack | 17 |\n| Stacks through recursion | 12 |\n| Unfollowable calls | 360 |\n\n### Projects\n\n| Project | Deepest | Limit | Headroom | Widest | Spread | Misplaced |\n| --- | --- | --- | --- | --- | --- | --- |\n| `packages/conformetry-languages` | 13 | 4 declared | -9 | 11 | 0 | 0 |\n| `applications/caelundas` | 16 | 16 declared | 0 | 12 | 5 | 4 |\n| `applications/lexico` | 9 | 9 declared | 0 | 9 | 0 | 1 |\n| `applications/lexico-ingestion` | 17 | 17 declared | 0 | 8 | 2 | 1 |\n| `applications/meanderaw` | 16 | 16 declared | 0 | 14 | 1 | 3 |\n| `packages/callidescope-cli` | 15 | 15 declared | 0 | 11 | 2 | 0 |\n| `packages/callidescope-nx` | 17 | 17 declared | 0 | 7 | 2 | 3 |\n| `packages/codependix-boundaries` | 12 | 12 declared | 0 | 5 | 0 | 1 |\n| `packages/codependix-cli` | 15 | 15 declared | 0 | 7 | 2 | 2 |\n| `packages/codometer-cli` | 16 | 16 declared | 0 | 11 | 2 | 0 |\n| `packages/conformetry-cli` | 14 | 14 declared | 0 | 9 | 0 | 0 |\n| `packages/conformetry-examples` | 13 | 13 declared | 0 | 6 | 1 | 0 |\n| `packages/conformetry-nx` | 14 | 14 declared | 0 | 9 | 4 | 0 |\n| `packages/lexico-components` | 3 | 3 declared | 0 | 7 | 0 | 1 |\n| `packages/lexico-entities` | 3 | 3 declared | 0 | 3 | 0 | 0 |\n| `packages/logger` | 4 | 4 declared | 0 | 2 | 0 | 0 |\n| `tools/synchronization` | 10 | 10 declared | 0 | 9 | 0 | 0 |\n| `tools/validation` | 8 | 8 declared | 0 | 9 | 0 | 0 |\n| `packages/callidescope-configuration` | 5 | 6 declared | 1 | 8 | 0 | 0 |\n| `packages/codometer-size` | 0 | 3 declared | 3 | 2 | 0 | 0 |\n| `packages/conformetry-configuration` | 10 | 13 declared | 3 | 5 | 0 | 0 |\n| `packages/codependix-configuration` | 2 | 6 declared | 4 | 5 | 0 | 0 |\n| `packages/codependix-nx` | 0 | 4 declared | 4 | 8 | 0 | 0 |\n| `packages/codependix-nestjs` | 0 | 5 declared | 5 | 5 | 0 | 0 |\n| `packages/codometer-customization` | 0 | 5 declared | 5 | 1 | 0 | 0 |\n| `packages/conformetry-generation` | 2 | 7 declared | 5 | 4 | 0 | 0 |\n| `packages/callidescope-graph` | 5 | 11 declared | 6 | 9 | 0 | 0 |\n| `packages/callidescope-output` | 4 | 10 declared | 6 | 9 | 0 | 0 |\n| `packages/codometer-configuration` | 2 | 8 declared | 6 | 7 | 0 | 0 |\n| `packages/codometer-languages` | 5 | 11 declared | 6 | 12 | 1 | 0 |\n| `packages/conformetry-core` | 0 | 6 declared | 6 | 4 | 0 | 0 |\n| `packages/codometer-discovery` | 0 | 7 declared | 7 | 7 | 0 | 0 |\n| `packages/codometer-output` | 4 | 11 declared | 7 | 16 | 0 | 0 |\n| `packages/codependix-imports` | 0 | 8 declared | 8 | 8 | 0 | 0 |\n| `packages/conformetry-files` | 0 | 9 declared | 9 | 3 | 0 | 0 |\n| `packages/codometer-changes` | 0 | 10 declared | 10 | 7 | 0 | 0 |\n| `packages/conformetry-validation` | 0 | 12 declared | 12 | 10 | 0 | 0 |\n| `configuration` | 3 | 17 inherited | 14 | 2 | 0 | 0 |\n| `packages/codometer-examples` | 2 | 17 inherited | 15 | 1 | 0 | 0 |\n| `packages/callidescope-agents` | 0 | 17 inherited | 17 | 0 | 0 | 0 |\n| `packages/codependix-agents` | 0 | 17 inherited | 17 | 0 | 0 | 0 |\n| `packages/codependix-examples` | 0 | 17 inherited | 17 | 0 | 0 | 0 |\n| `packages/codependix-examples/examples` | 0 | 17 inherited | 17 | 0 | 0 | 0 |\n| `packages/codependix-examples/examples/graph-levels/atlas/packages/atlas-service` | 0 | 17 inherited | 17 | 0 | 0 | 0 |\n| `packages/codependix-examples/examples/typescript-resolution/resolution` | 0 | 17 inherited | 17 | 0 | 0 | 0 |\n| `packages/codometer-agents` | 0 | 17 inherited | 17 | 0 | 0 | 0 |\n| `packages/conformetry-agents` | 0 | 17 inherited | 17 | 0 | 0 | 0 |\n\n### Depth headroom\n\n| Headroom | Projects |\n| --- | --- |\n| over limit | 1 |\n| 0 — at limit | 17 |\n| 1 | 1 |\n| 2–3 | 1 |\n| 4+ | 9 |\n| no stacks | 18 |\n\n### Call stacks over the depth limit (4)\n\n**1. `JupyterService.validateDocument`** — depth 13 · orphan-root\n\n```text\n🚀 JupyterService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/conformetry-languages/src/modules/jupyter/jupyter.service.ts:153]\n   ↳ Reports every notebook difference: envelope, missing cells, cell contents.\n  └─> JupyterService.map(…)(…): { error: { differenceType: \"code\"; expected: string; fix: string; language: \"python\"; message: string; weight: number; }; weight: number; } [packages/conformetry-languages/src/modules/jupyter/jupyter.service.ts:173]\n    └─> JupyterService.weighMissingCell(args: { cell: PairedCells; document: PreparedValidationDocument; }): number [packages/conformetry-languages/src/modules/jupyter/jupyter.service.ts:140]\n       ↳ Weighs a cell the notebook does not have.\n      └─> JupyterService.validateCell(…): DocumentValidationResult [packages/conformetry-languages/src/modules/jupyter/jupyter.service.ts:90]\n         ↳ Validates one paired cell with the validator matching its kind.\n        └─> MarkdownService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/conformetry-languages/src/modules/markdown/markdown.service.ts:48]\n           ↳ Reports every markdown structure the template requires and the file lacks.\n          └─> MarkdownTreeService.compareContainer(args: CompareNodeArguments): CompareNodeResult (cycle) [packages/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:64]\n             ↳ Matches a container node, then descends into it.\n            └─> MarkdownTreeService.map(…)(…): { differences: MarkdownComparisonError[]; lastMatchedNode: MarkdownNode; totalWeight: number; } (cycle) [packages/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:90]\n              └─> MarkdownTreeService.compareChildren(args: CompareChildrenArguments): CompareChildrenResult (cycle) [packages/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:146]\n                 ↳ Compares one level of two trees, descending into containers.\n                └─> MarkdownTreeService.compareLeaf(args: CompareNodeArguments): CompareNodeResult [packages/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:114]\n                   ↳ Matches a leaf node on its own identity, without descending.\n                  └─> MarkdownTreeService.findCandidates(args: CompareNodeArguments): MarkdownNode[] [packages/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:134]\n                     ↳ Finds every instance sibling satisfying the template node.\n                    └─> MarkdownTreeService.filter(…)(instanceNode: MarkdownNode): boolean [packages/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:135]\n                      └─> MarkdownNodesService.matches(args: { instanceNode: MarkdownNode; templateNode: MarkdownNode; }): boolean [packages/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:140]\n                         ↳ Returns whether an instance node satisfies a template node.\n                        └─> MarkdownNodesService.readText(node: MarkdownNode): string [packages/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:163]\n                           ↳ Reads a node's rendered plain text.\n```\n\n**2. `JsonService.validateDocument`** — depth 12 · orphan-root\n\n```text\n🚀 JsonService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/conformetry-languages/src/modules/json/json.service.ts:39]\n   ↳ Reports every key or value the template requires and the instance lacks.\n  └─> JsonComparisonService.compareArrayItem(…): JsonComparison (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:79]\n     ↳ Matches one required array entry against the instance array.\n    └─> JsonComparisonService.map(…)(instanceItem: JsonValue, index: number): JsonComparison (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:122]\n      └─> JsonComparisonService.compare(args: CompareJsonArguments): JsonComparison (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:268]\n         ↳ Compares a template value against an instance value, returning every way the instance fails to contain what the…\n        └─> JsonComparisonService.compareArrays(…): JsonComparison (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:141]\n           ↳ Compares two arrays.\n          └─> JsonComparisonService.map(…)(templateItem: JsonValue): JsonComparison (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:148]\n            └─> JsonComparisonService.compareObjects(…): JsonComparison (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:155]\n               ↳ Compares two objects, requiring every template key to be present.\n              └─> JsonComparisonService.map(…)([key, templateValue]: [string, JsonValue]): JsonComparison (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:164]\n                └─> JsonComparisonService.countNodes(value: JsonValue): number (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:207]\n                   ↳ Counts a JSON value and every value nested inside it.\n                  └─> JsonComparisonService.reduce(…)(total: number, item: JsonValue): number (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:209]\n                    └─> JsonComparisonService.reduce(…)(total: number, nested: JsonValue): number (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:215]\n                      └─> JsonComparisonService.isJsonObject(value: JsonValue): value is Record<string, JsonValue> [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:235]\n                         ↳ Returns whether a value is a plain JSON object.\n```\n\n**3. `TypescriptService.validateDocument`** — depth 12 · orphan-root\n\n```text\n🚀 TypescriptService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/conformetry-languages/src/modules/typescript/typescript.service.ts:164]\n   ↳ Reports every declaration and comment the template requires.\n  └─> TypescriptService.validateStructure(…): DocumentValidationResult [packages/conformetry-languages/src/modules/typescript/typescript.service.ts:107]\n     ↳ Compares the syntax trees and describes each missing declaration.\n    └─> TypescriptTreeService.compareBestCandidate(args: { candidates: Node[]; templateChild: Node; }): TreeComparison (cycle) [packages/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:67]\n       ↳ Descends into whichever candidate explains the template best.\n      └─> TypescriptTreeService.map(…)(candidate: Node): TreeComparison (cycle) [packages/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:72]\n        └─> TypescriptTreeService.compareTree(args: CompareTreeArguments): TreeComparison (cycle) [packages/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:126]\n           ↳ Compares one level of two trees, descending into every match.\n          └─> TypescriptTreeService.map(…)(templateChild: Node): TreeComparison (cycle) [packages/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:133]\n            └─> TypescriptTreeService.compareChild(…): TreeComparison (cycle) [packages/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:87]\n               ↳ Matches one template child against the instance's children.\n              └─> TypescriptTreeService.buildError(…): TypescriptComparisonError [packages/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:42]\n                 ↳ Describes a template node with no instance counterpart.\n                └─> TypescriptNodesService.countSubtree(node: Node): number (cycle) [packages/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:176]\n                   ↳ Counts a node and everything beneath it.\n                  └─> TypescriptNodesService.reduce(…)(total: number, child: Node): number (cycle) [packages/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:177]\n                    └─> TypescriptNodesService.readChildren(node: Node): Node[] [packages/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:183]\n                       ↳ Reads a node's direct children, skipping the end-of-file token.\n                      └─> TypescriptNodesService.forEachChild(…)(childNode: Node): undefined [packages/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:186]\n```\n\n<details>\n<summary>1 more call stacks</summary>\n\n**4. `PythonService.validateDocument`** — depth 6 · orphan-root\n\n```text\n🚀 PythonService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/conformetry-languages/src/modules/python/python.service.ts:38]\n   ↳ Reports every declaration and comment the template requires.\n  └─> PythonBridgeService.validatePythonSource(args: RunPythonBridgeArguments): DocumentValidationResult [packages/conformetry-languages/src/modules/python/python-bridge.service.ts:160]\n     ↳ Compares one Python source against its rendered template.\n    └─> PythonBridgeService.map(…)(error: Readonly<Record<string, unknown>>): ConformetryDifference [packages/conformetry-languages/src/modules/python/python-bridge.service.ts:185]\n      └─> PythonBridgeService.toConformetryDifference(error: PythonBridgeError): ConformetryDifference [packages/conformetry-languages/src/modules/python/python-bridge.service.ts:132]\n         ↳ Maps one snake_case bridge error onto the shared error shape.\n        └─> PythonBridgeService.readValues(error: PythonBridgeError): Partial<ConformetryDifference> [packages/conformetry-languages/src/modules/python/python-bridge.service.ts:121]\n           ↳ Reads the optional expected and actual values.\n          └─> PythonBridgeService.readString(error: PythonBridgeError, key: string): string | undefined [packages/conformetry-languages/src/modules/python/python-bridge.service.ts:111]\n             ↳ Narrows an untrusted string field from the bridge payload.\n```\n\n</details>\n\n### Module spread\n\n| Callable | Spread | Calls directly | Location |\n| --- | --- | --- | --- |\n| `MeasureService.measureTarget` | 18 | `packages/codometer-discovery:modules/discovery`, `packages/codometer-discovery:modules/targets`, `packages/codometer-size:modules/size` | `packages/codometer-cli/src/modules/measure/measure.service.ts:302` |\n| `PluginService.runGate` | 17 | `packages/callidescope-cli:modules/callidescope`, `packages/callidescope-nx:modules/run-configuration`, `packages/callidescope-output:modules/report` | `packages/callidescope-nx/src/modules/plugin/plugin.service.ts:427` |\n| `PluginService.runTrace` | 17 | `packages/callidescope-cli:modules/callidescope`, `packages/callidescope-nx:modules/run-configuration`, `packages/callidescope-output:modules/report` | `packages/callidescope-nx/src/modules/plugin/plugin.service.ts:471` |\n| `PluginService.runValidation` | 17 | `packages/conformetry-core:modules/reporting`, `packages/conformetry-nx:modules/instances`, `packages/conformetry-validation:modules/validation` | `packages/conformetry-nx/src/modules/plugin/plugin.service.ts:395` |\n| `MeasureService.analyzeFiles` | 16 | `packages/codometer-customization:modules/customization`, `packages/codometer-languages:modules/languages`, `packages/codometer-size:modules/size` | `packages/codometer-cli/src/modules/measure/measure.service.ts:75` |\n| `LanguagesService.analyze` | 13 | `packages/codometer-languages:modules/comments`, `packages/codometer-languages:modules/css`, `packages/codometer-languages:modules/hcl`, `packages/codometer-languages:modules/json`, `packages/codometer-languages:modules/jupyter`, `packages/codometer-languages:modules/markdown`, `packages/codometer-languages:modules/python`, `packages/codometer-languages:modules/shell`, `packages/codometer-languages:modules/sql`, `packages/codometer-languages:modules/toml`, `packages/codometer-languages:modules/typescript`, `packages/codometer-languages:modules/yaml` | `packages/codometer-languages/src/modules/languages/languages.service.ts:56` |\n| `main` | 13 | `packages/conformetry-configuration:modules/configuration`, `packages/conformetry-configuration:modules/template-discovery`, `packages/conformetry-core:modules/reporting`, `packages/conformetry-generation:modules/generation`, `packages/conformetry-validation:modules/validation` | `packages/conformetry-examples/examples/embedding/embed.ts:44` |\n| `CallidescopeService.analyze` | 12 | `packages/callidescope-graph:modules/cohesion`, `packages/callidescope-graph:modules/entries`, `packages/callidescope-graph:modules/graph`, `packages/callidescope-output:modules/project-reports` | `packages/callidescope-cli/src/modules/callidescope/callidescope.service.ts:291` |\n| `PluginService.runGenerator` | 12 | `packages/conformetry-configuration:modules/configuration`, `packages/conformetry-generation:modules/generation`, `packages/conformetry-nx:modules/adapter`, `packages/conformetry-nx:modules/options`, `packages/conformetry-nx:modules/paths` | `packages/conformetry-nx/src/modules/plugin/plugin.service.ts:334` |\n| `AspectsService.detectSimpleAspects` | 10 | `applications/caelundas:modules/ingresses`, `applications/caelundas:modules/major-aspects`, `applications/caelundas:modules/minor-aspects`, `applications/caelundas:modules/phases`, `applications/caelundas:modules/retrogrades`, `applications/caelundas:modules/specialty-aspects` | `applications/caelundas/src/modules/aspects/aspects.service.ts:90` |\n| `PerfectiveService.detectOrbitalEvents` | 10 | `applications/caelundas:modules/annual-solar-cycle`, `applications/caelundas:modules/ingresses`, `applications/caelundas:modules/monthly-lunar-cycle`, `applications/caelundas:modules/phases`, `applications/caelundas:modules/retrogrades` | `applications/caelundas/src/modules/perfective/perfective.service.ts:149` |\n| `ProgressiveService.detect` | 10 | `applications/caelundas:modules/annual-solar-cycle`, `applications/caelundas:modules/aspects`, `applications/caelundas:modules/eclipses`, `applications/caelundas:modules/ingresses`, `applications/caelundas:modules/monthly-lunar-cycle`, `applications/caelundas:modules/phases`, `applications/caelundas:modules/retrogrades`, `applications/caelundas:modules/twilights` | `applications/caelundas/src/modules/progressive/progressive.service.ts:47` |\n| `AspectsService.detectCompositeAspects` | 8 | `applications/caelundas:modules/quadruple-aspects`, `applications/caelundas:modules/quintuple-aspects`, `applications/caelundas:modules/sextuple-aspects`, `applications/caelundas:modules/stellium`, `applications/caelundas:modules/triple-aspects` | `applications/caelundas/src/modules/aspects/aspects.service.ts:72` |\n| `LexemesService.enrichLexeme` | 8 | `applications/lexico-ingestion:modules/etymology`, `applications/lexico-ingestion:modules/forms`, `applications/lexico-ingestion:modules/part-of-speech`, `applications/lexico-ingestion:modules/principal-parts`, `applications/lexico-ingestion:modules/pronunciation`, `applications/lexico-ingestion:modules/translations` | `applications/lexico-ingestion/src/modules/lexemes/lexemes.service.ts:73` |\n| `PerfectiveService.detectObservationalEvents` | 7 | `applications/caelundas:modules/daily-cycles`, `applications/caelundas:modules/eclipses`, `applications/caelundas:modules/twilights` | `applications/caelundas/src/modules/perfective/perfective.service.ts:117` |\n| `syncGenerator` | 7 | `packages/conformetry-nx:modules/generator`, `packages/conformetry-nx:modules/options`, `packages/conformetry-nx:modules/plugin`, `packages/conformetry-nx:modules/projects` | `packages/conformetry-nx/src/generators/sync/generator.ts:26` |\n| `LexemesService.saveLexemeRelations` | 6 | `applications/lexico-ingestion:modules/forms`, `applications/lexico-ingestion:modules/principal-parts`, `applications/lexico-ingestion:modules/pronunciation`, `applications/lexico-ingestion:modules/words` | `applications/lexico-ingestion/src/modules/lexemes/lexemes.service.ts:218` |\n| `DrawPermutationsService.render` | 6 | `applications/meanderaw:modules/mosaic-naming`, `applications/meanderaw:modules/mosaic-tile`, `applications/meanderaw:modules/svg-rendering` | `applications/meanderaw/src/modules/draw/draw-permutations.service.ts:80` |\n| `CallidescopeService.discoverCallables` | 6 | `packages/callidescope-graph:modules/callables`, `packages/callidescope-graph:modules/classes`, `packages/callidescope-graph:modules/workspace` | `packages/callidescope-cli/src/modules/callidescope/callidescope.service.ts:85` |\n| `MapService.runWorkspaceGraph` | 6 | `packages/codependix-cli:modules/delivery`, `packages/codependix-configuration:modules/configuration`, `packages/codependix-nx:modules/workspace-graph` | `packages/codependix-cli/src/modules/map/map.service.ts:281` |\n| `bootstrapPlugin` | 6 | `packages/conformetry-nx:modules/options`, `packages/conformetry-nx:modules/plugin`, `packages/conformetry-nx:modules/projects` | `packages/conformetry-nx/src/modules/generator/bootstrap.utilities.ts:39` |\n| `MapService.runNestjsProject` | 5 | `packages/codependix-cli:modules/delivery`, `packages/codependix-nestjs:modules/module-graph`, `packages/codependix-nestjs:modules/nestjs-project` | `packages/codependix-cli/src/modules/map/map.service.ts:186` |\n\n### Callables over the breadth limit (0)\n\nNone.\n\n### Possibly misplaced\n\n| Callable | Declared in | Called from | Callers |\n| --- | --- | --- | --- |\n| `cn` | `packages/lexico-components:lib` | `packages/lexico-components:components` | 219/219 |\n| `CalendarService.buildInstantEvent` | `applications/caelundas:modules/calendar` | `applications/caelundas:modules/daily-cycles` | 8/9 |\n| `typedFromEntries` | `applications/caelundas:modules/caelundas` | `applic",
  "bytes": 60000,
  "sha": "db2382515f3ea73b5d74dff721847db9ca204fa7067db0bf5e946b32a0b7d8d1",
  "repo_slug": "jimmypaolini/codebase",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/okf_jimmypaolini_codebase_openwiki_index_md_21230400/readme"
}