Back to the catalog

Files

Bundle OKF 0.1 · 3 conceitos · JimmyPaolini/codebase

Open source Repository Open in the app JSON README (API)

About

# Files

- [Codebase Quickstart](quickstart.md) - Quickstart entrypoint for OpenWiki knowledge base covering repository structure, projects, and local development.

# Directories

- [architecture](architecture/)
- [domain](domain/)

Details

Kind
OKF bundles
Topic
AI, RAG & memory
Publisher
jimmypaolini
Origin
okf_github
Category
dados
Version
0.1
Forks
1
Open pull requests
15
Last push
2026-09-09T00:20:17Z
Repository state
ativo
Language
TypeScript
License
MIT
Added
2026-09-08 02:23:09
Updated
2026-09-08 02:23:09
Origin id
JimmyPaolini/codebase:openwiki/index.md

README

# codebase

[![Nx](https://img.shields.io/badge/Nx-Codebase-143055?logo=nx)](https://nx.dev)
[![TypeScript](https://img.shields.io/badge/TypeScript-Strict-3178C6?logo=typescript)](https://www.typescriptlang.org/)
[![pnpm](https://img.shields.io/badge/pnpm-Workspace-F69220?logo=pnpm)](https://pnpm.io/)
[![Node.js](https://img.shields.io/badge/Node.js-24-5FA04E?logo=nodedotjs)](https://nodejs.org/)
[![Python](https://img.shields.io/badge/Python-3.14-3776AB?logo=python)](https://www.python.org/)
[![uv](https://img.shields.io/badge/uv-Python%20Packages-DE5FE9?logo=uv)](https://docs.astral.sh/uv/)
[![Jupyter](https://img.shields.io/badge/Jupyter-1.1-F37626?logo=jupyter&logoColor=white)](https://jupyter.org/)
[![React](https://img.shields.io/badge/React-19-61DAFB?logo=react)](https://react.dev/)
[![TanStack](https://img.shields.io/badge/TanStack-Start-FF4154?logo=tanstack)](https://tanstack.com/start)
[![shadcn/ui](https://img.shields.io/badge/shadcn%2Fui-Components-000000?logo=shadcnui)](https://ui.shadcn.com/)
[![Radix UI](https://img.shields.io/badge/Radix%20UI-Primitives-161618?logo=radixui)](https://radix-ui.com/)
[![Tailwind CSS](https://img.shields.io/badge/Tailwind-CSS-06B6D4?logo=tailwindcss)](https://tailwindcss.com/)
[![Lucide](https://img.shields.io/badge/Lucide-Icons-f67373?logo=lucide)](https://lucide.dev/)
[![Recharts](https://img.shields.io/badge/Recharts-Charts-22b5bf)](https://recharts.org/)
[![Zod](https://img.shields.io/badge/Zod-Validation-3E67B1)](https://zod.dev/)
[![Vite](https://img.shields.io/badge/Vite-Bundler-646CFF?logo=vite)](https://vitejs.dev/)
[![SWC](https://img.shields.io/badge/SWC-Compiler-F9BC00?logo=swc)](https://swc.rs/)
[![Vitest](https://img.shields.io/badge/Vitest-Testing-6E9F18?logo=vitest)](https://vitest.dev/)
[![NestJS](https://img.shields.io/badge/NestJS-Framework-E0234E?logo=nestjs)](https://nestjs.com/)
[![GraphQL](https://img.shields.io/badge/GraphQL-API-E10098?logo=graphql)](https://graphql.org/)
[![TypeORM](https://img.shields.io/badge/TypeORM-ORM-E83524)](https://typeorm.io/)
[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-Database-4169E1?logo=postgresql)](https://www.postgresql.org/)
[![LangChain](https://img.shields.io/badge/LangChain-AI-1C3C3C?logo=langchain)](https://python.langchain.com/)
[![LangGraph](https://img.shields.io/badge/LangGraph-Agents-1C3C3C?logo=langchain)](https://langchain-ai.github.io/langgraph/)
[![Ollama](https://img.shields.io/badge/Ollama-Local%20LLM-000000?logo=ollama)](https://ollama.com/)
[![Pydantic](https://img.shields.io/badge/Pydantic-Validation-E92063?logo=pydantic)](https://docs.pydantic.dev/)
[![ESLint](https://img.shields.io/badge/ESLint-Linting-4B32C3?logo=eslint)](https://eslint.org/)
[![Oxlint](https://img.shields.io/badge/Oxlint-Linting-8A2BE2)](https://oxc.rs/docs/guide/usage/linter)
[![Prettier](https://img.shields.io/badge/Prettier-Formatter-F7B93E?logo=prettier)](https://prettier.io/)
[![Stylelint](https://img.shields.io/badge/Stylelint-CSS-263238?logo=stylelint)](https://stylelint.io/)
[![Ruff](https://img.shields.io/badge/Ruff-Linting-D7FF64?logo=ruff)](https://docs.astral.sh/ruff/)
[![Semantic Release](https://img.shields.io/badge/Semantic%20Release-Versioning-494949?logo=semantic-release)](https://semantic-release.gitbook.io/)
[![Docker](https://img.shields.io/badge/Docker-Container-2496ED?logo=docker)](https://www.docker.com/)
[![Helm](https://img.shields.io/badge/Helm-Charts-0F1689?logo=helm)](https://helm.sh/)
[![Kubernetes](https://img.shields.io/badge/Kubernetes-K8s-326CE5?logo=kubernetes)](https://kubernetes.io/)
[![Terraform](https://img.shields.io/badge/Terraform-IaC-844FBA?logo=terraform)](https://www.terraform.io/)

[![Lint Codebase](https://github.com/JimmyPaolini/codebase/actions/workflows/lint-codebase.yml/badge.svg)](https://github.com/JimmyPaolini/codebase/actions/workflows/lint-codebase.yml)
[![Test Coverage](https://github.com/JimmyPaolini/codebase/actions/workflows/test-coverage.yml/badge.svg)](https://github.com/JimmyPaolini/codebase/actions/workflows/test-coverage.yml)
[![Scan Security](https://github.com/JimmyPaolini/codebase/actions/workflows/scan-security.yml/badge.svg)](https://github.com/JimmyPaolini/codebase/actions/workflows/scan-security.yml)
[![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)
[![Make Projects](https://github.com/JimmyPaolini/codebase/actions/workflows/make-projects.yml/badge.svg)](https://github.com/JimmyPaolini/codebase/actions/workflows/make-projects.yml)
[![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)
[![Make Codebase](https://github.com/JimmyPaolini/codebase/actions/workflows/make-codebase.yml/badge.svg)](https://github.com/JimmyPaolini/codebase/actions/workflows/make-codebase.yml)
[![Push Releases](https://github.com/JimmyPaolini/codebase/actions/workflows/push-releases.yml/badge.svg)](https://github.com/JimmyPaolini/codebase/actions/workflows/push-releases.yml)

A modern TypeScript codebase with Nx, featuring automated releases, comprehensive code quality tools, and strict type safety.

## 💽 Projects

- **🤲 [affirmations](applications/affirmations)** - Python LangChain + Ollama affirmation generator (LangGraph ReAct agent, SearxNG)
- **🛰️ [caelundas](applications/caelundas)** - Swiss Ephemeris calendar generator that turns astronomical events into an `.ics` file
- **🔭 callidescope** - Call stack tracing toolchain that follows control flow through injected dependencies and reports where a stack got too deep
  - **[callidescope-agents](packages/callidescope-agents)** - Agent skills for the callidescope toolchain, published and installed back from the lockfile like any other vendored skill
  - **[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
  - **[callidescope-configuration](packages/callidescope-configuration)** - Reads `callidescope.config.ts` for entry-point rules, depth and cohesion limits, exclusion globs, and output destinations
  - **[callidescope-examples](packages/callidescope-examples)** - A small codebase built to be traced, carrying one worked example per rule, finding, and output the toolchain has
  - **[callidescope-graph](packages/callidescope-graph)** - Builds the call graph from traced TypeScript source and measures its depth, breadth, and cohesion
  - **[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
  - **[callidescope-output](packages/callidescope-output)** - Renders call-graph findings into markdown, mermaid, and JSON output formats
- **🕸️ 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
  - **[codependix-agents](packages/codependix-agents)** - Agent skills for the codependix toolchain, installable by any workspace that uses codependix
  - **[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
  - **[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
  - **[codependix-configuration](packages/codependix-configuration)** - Reads `codependix.config.ts` and resolves per-project export destinations and boundary rules
  - **[codependix-examples](packages/codependix-examples)** - Sixteen subjects built to be graphed, each carrying the guide codependix renders from it
  - **[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
  - **[codependix-nestjs](packages/codependix-nestjs)** - Explores a NestJS project's container and builds its module graph
  - **[codependix-nx](packages/codependix-nx)** - Builds a project's one-hop Nx dependency neighborhood from the Nx project graph
- **⏲️ codometer** - Repository measurement toolchain that counts a codebase and reports what it found
  - **[codometer-agents](packages/codometer-agents)** - Agent skills for the codometer toolchain, published and installed back from the lockfile like any other vendored skill
  - **[codometer-changes](packages/codometer-changes)** - Diffs codometer reports against a baseline snapshot
  - **[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
  - **[codometer-configuration](packages/codometer-configuration)** - Reads `codometer.config.ts` for exclusion globs, output destinations and their render/write callbacks, and the Python interpreter
  - **[codometer-customization](packages/codometer-customization)** - Evaluates codometer's configured custom counters
  - **[codometer-discovery](packages/codometer-discovery)** - Glob matching and gitignore-aware file walking, plus resolving configured measurement targets to file sets
  - **[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
  - **[codometer-languages](packages/codometer-languages)** - Every input language analyzer codometer measures, behind one `analyze()` call
  - **[codometer-output](packages/codometer-output)** - Every codometer output format - JSON reports, README badges, and the pull request change report
  - **[codometer-size](packages/codometer-size)** - Compresses a target's matched files and measures their size
- **👔 conformetry** - Template-driven code generation and conformance validation toolchain
  - **[conformetry-agents](packages/conformetry-agents)** - Agent skills for the conformetry toolchain, published and installed back from the lockfile like any other vendored skill
  - **[conformetry-cli](packages/conformetry-cli)** - Command-line host that expands globs, prompts for inputs, and runs generation and validation
  - **[conformetry-configuration](packages/conformetry-configuration)** - Configuration loading, template discovery, and generator input resolution
  - **[conformetry-core](packages/conformetry-core)** - Shared error types, language validator contracts, and finding reporting
  - **[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
  - **[conformetry-files](packages/conformetry-files)** - Checks that every file a template declares exists, whatever its extension
  - **[conformetry-generation](packages/conformetry-generation)** - Mustache template rendering and scaffold file generation
  - **[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
  - **[conformetry-nx](packages/conformetry-nx)** - Nx plugin host with generators, executors, and the emitted-plugin bootstrap
  - **[conformetry-validation](packages/conformetry-validation)** - Validation orchestration, language routing, and finding deduplication
- **[infrastructure](infrastructure)** - Helm charts, Terraform, Kubernetes infrastructure
- **[JimmyPaolini](applications/JimmyPaolini)** - GitHub profile site
- **🐺 lexico** - Latin-English dictionary suite: the web application, its components, its schema, and the ingestion that fills it
  - **[lexico](applications/lexico)** - TanStack Start SSR dictionary web application
  - **[lexico-components](packages/lexico-components)** - Shared React component library using shadcn/ui and Radix primitives
  - **[lexico-entities](packages/lexico-entities)** - TypeORM entities, migrations, and grammatical enumerations for the dictionary and literature schema
  - **[lexico-ingestion](applications/lexico-ingestion)** - NestJS CLI that scrapes and loads dictionary, literature, and etymology sources
- **🪵 [logger](packages/logger)** - Shared pino-backed NestJS `LoggerService` and `LoggerModule`
- **🌀 [meanderaw](applications/meanderaw)** - CLI that generates Greek meander (key/fret) SVG patterns programmatically from a type, row count, and repeat count
- **↔️ [synchronization](tools/synchronization)** - NestJS CLI that regenerates the workspace's derived configuration and documentation, and fails CI when they drift
- **🧑‍⚖️ [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

## 📖 Documentation

### Getting Started & Workflow

- [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
- [AGENTS.md](AGENTS.md) - Commands, project layout, conventions, code quality gates, and git workflow
- [Release Process](documentation/development/release-process.md) - Automated semantic versioning and changelogs

### Architecture & Systems

- [CI/CD Workflows](.github/workflows) - GitHub Actions workflows and the shared `setup-codebase` composite action
- [Infrastructure](infrastructure/README.md) - Helm charts, Terraform, and the Kubernetes deployment pipeline
- [Dev Container](.devcontainer/README.md) - Containerized development environment
- [Scripts](scripts/README.md) - Local setup and maintenance scripts

### Conventions & Guidelines

Conventions 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.

**🤖 Agent Skills (Domain Knowledge)**
Skills are specialized instruction files used by our automated agents, but they also serve as excellent deep-dive documentation for human developers.

- [View all Skills](.agents/skills) - Complete index of available skills
- **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)
- **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)
- **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)
- **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)
- **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)

Other important files include [CHANGELOG.md](CHANGELOG.md) and [SECURITY.md](SECURITY.md).

## 👔 Conformetry

Template-driven code generation and conformance validation, templates synced from [configuration/conformetry.config.ts](configuration/conformetry.config.ts) by `nx run synchronization:conformetry-generators:write`.

<!-- conformetry-generators-table start -->
| Template | Description |
| -------- | ----------- |
| `jupyter-notebook-application` | A standalone Python application template with a Jupyter notebook entry point, pytest/pyright/ruff tooling, and a shared uv workspace venv |
| `nestjs-command-project` | A standalone NestJS CLI application template built on nest-commander, for a new command-line tool in applications/, packages/, or tools/ |
| `nestjs-graphql-application` | A standalone NestJS GraphQL API application template, for a new backend service exposing a GraphQL schema over HTTP |
| `nestjs-service-project` | A standalone NestJS library package template for internal workspace code shared across projects, with no CLI entry point or HTTP server |
| `nestjs-command-module` | A nest-commander command module template — command, module, constants, types, and unit test — for an existing NestJS command-line project |
| `nestjs-dataloader-module` | A GraphQL dataloader module template — dataloader, module, types, and unit test — for batching lookups inside an existing NestJS project |
| `nestjs-graphql-module` | A GraphQL module template — resolver, entities, args/input types, factories, constants, and unit test — for an existing NestJS project |
| `nestjs-service-file` | A service and unit test file template for an existing NestJS module, without the surrounding module files |
| `nestjs-service-module` | A plain service module template — module, service, constants, types, and unit test — for an existing NestJS project |
| `react-component` | A React component and test file template for an existing React project |
<!-- conformetry-generators-table end -->

## 🕸️ Codependix

The workspace's dependency graph, exported by [codependix](packages/codependix-cli), regenerated by `nx run codebase:codependix:write`.

<!-- codependix:start name="codependix-workspace" -->
```mermaid
graph LR
  affirmations["affirmations"]
  caelundas["caelundas"]
  callidescope_agents["callidescope-agents"]
  callidescope_cli["callidescope-cli"]
  callidescope_configuration["callidescope-configuration"]
  callidescope_examples["callidescope-examples"]
  callidescope_graph["callidescope-graph"]
  callidescope_nx["callidescope-nx"]
  callidescope_output["callidescope-output"]
  codependix_agents["codependix-agents"]
  codependix_boundaries["codependix-boundaries"]
  codependix_cli["codependix-cli"]
  codependix_configuration["codependix-configuration"]
  codependix_examples["codependix-examples"]
  codependix_imports["codependix-imports"]
  codependix_nestjs["codependix-nestjs"]
  codependix_nx["codependix-nx"]
  codometer_agents["codometer-agents"]
  codometer_changes["codometer-changes"]
  codometer_cli["codometer-cli"]
  codometer_configuration["codometer-configuration"]
  codometer_customization["codometer-customization"]
  codometer_discovery["codometer-discovery"]
  codometer_examples["codometer-examples"]
  codometer_languages["codometer-languages"]
  codometer_output["codometer-output"]
  codometer_size["codometer-size"]
  conformetry_agents["conformetry-agents"]
  conformetry_cli["conformetry-cli"]
  conformetry_configuration["conformetry-configuration"]
  conformetry_core["conformetry-core"]
  conformetry_examples["conformetry-examples"]
  conformetry_files["conformetry-files"]
  conformetry_generation["conformetry-generation"]
  conformetry_languages["conformetry-languages"]
  conformetry_nx["conformetry-nx"]
  conformetry_validation["conformetry-validation"]
  lexico["lexico"]
  lexico_components["lexico-components"]
  lexico_entities["lexico-entities"]
  lexico_ingestion["lexico-ingestion"]
  logger["logger"]
  meanderaw["meanderaw"]
  synchronization["synchronization"]
  validation["validation"]
  caelundas --> logger
  callidescope_cli --> callidescope_configuration
  callidescope_cli --> callidescope_graph
  callidescope_cli --> callidescope_output
  callidescope_cli --> logger
  callidescope_examples -.-> callidescope_cli
  callidescope_examples --> callidescope_configuration
  callidescope_graph --> callidescope_configuration
  callidescope_graph --> logger
  callidescope_nx --> callidescope_cli
  callidescope_nx --> callidescope_configuration
  callidescope_nx --> callidescope_graph
  callidescope_nx --> callidescope_output
  callidescope_nx --> logger
  callidescope_output --> callidescope_configuration
  callidescope_output --> callidescope_graph
  callidescope_output --> logger
  codependix_boundaries --> codependix_configuration
  codependix_boundaries --> codependix_imports
  codependix_boundaries --> codependix_nestjs
  codependix_boundaries --> codependix_nx
  codependix_cli --> codependix_boundaries
  codependix_cli --> codependix_configuration
  codependix_cli --> codependix_imports
  codependix_cli --> codependix_nestjs
  codependix_cli --> codependix_nx
  codependix_cli --> logger
  codependix_examples --> codependix_boundaries
  codependix_examples --> codependix_cli
  codependix_examples --> codependix_configuration
  codependix_examples --> codependix_imports
  codependix_examples --> codependix_nestjs
  codependix_examples --> codependix_nx
  codependix_examples --> logger
  codependix_nestjs --> logger
  codometer_changes --> logger
  codometer_cli --> codometer_changes
  codometer_cli --> codometer_configuration
  codometer_cli --> codometer_customization
  codometer_cli --> codometer_discovery
  codometer_cli --> codometer_languages
  codometer_cli --> codometer_output
  codometer_cli --> codometer_size
  codometer_cli --> logger
  codometer_customization --> codometer_configuration
  codometer_customization --> codometer_languages
  codometer_discovery --> codometer_configuration
  codometer_discovery --> logger
  codometer_examples --> codometer_cli
  codometer_examples --> codometer_configuration
  codometer_languages --> codometer_configuration
  codometer_languages --> logger
  codometer_output --> codometer_changes
  codometer_output --> codometer_configuration
  codometer_output --> logger
  codometer_size --> codometer_configuration
  codometer_size --> logger
  conformetry_cli --> conformetry_configuration
  conformetry_cli --> conformetry_core
  conformetry_cli --> conformetry_generation
  conformetry_cli --> conformetry_validation
  conformetry_cli --> logger
  conformetry_configuration --> conformetry_core
  conformetry_configuration --> conformetry_generation
  conformetry_examples -.-> conformetry_cli
  conformetry_examples --> conformetry_configuration
  conformetry_examples --> conformetry_core
  conformetry_examples --> conformetry_generation
  conformetry_examples --> conformetry_nx
  conformetry_examples --> conformetry_validation
  conformetry_files --> conformetry_configuration
  conformetry_files --> conformetry_core
  conformetry_languages --> conformetry_core
  conformetry_nx --> conformetry_configuration
  conformetry_nx --> conformetry_core
  conformetry_nx --> conformetry_generation
  conformetry_nx --> conformetry_validation
  conformetry_nx --> logger
  conformetry_validation --> conformetry_configuration
  conformetry_validation --> conformetry_core
  conformetry_validation --> conformetry_files
  conformetry_validation --> conformetry_languages
  lexico --> lexico_components
  lexico_ingestion --> lexico_entities
  lexico_ingestion --> logger
  meanderaw --> logger
  synchronization --> conformetry_configuration
  synchronization --> logger
  validation --> logger
```

_Dashed edges are dependencies Nx inferred from configuration rather than from code._
<!-- codependix:end name="codependix-workspace" -->

<!-- CODE_STATISTICS_START -->

## ⏲️ Codometer

Repository statistics measured by [codometer](packages/codometer-cli), regenerated by `nx run codebase:codometer`.

### Repository

![Lines of Code](https://img.shields.io/badge/Lines_of_Code-265222-22c55e?style=flat-square)
![Repository Size](https://img.shields.io/badge/Repository_Size-14.59_MB-6b7280?style=flat-square)
![Folders](https://img.shields.io/badge/Folders-612-4a4a4a?style=flat-square)
![Source Files](https://img.shields.io/badge/Source_Files-2093-3178c6?style=flat-square)

### TypeScript

![TypeScript Files](https://img.shields.io/badge/TypeScript_Files-2040-3178c6?style=flat-square)
![Interfaces](https://img.shields.io/badge/Interfaces-806-0ea5e9?style=flat-square)
![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-34-0369a1?style=flat-square)
![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
![Decorators](https://img.shields.io/badge/Decorators-1093-db2777?style=flat-square)
![Doc Comments](https://img.shields.io/badge/Doc_Comments-5800-6366f1?style=flat-square)
![Static Methods](https://img.shields.io/badge/Static_Methods-16-166534?style=flat-square)

### JavaScript

![JavaScript Files](https://img.shields.io/badge/JavaScript_Files-14-f7df1e?style=flat-square)
![Test Files](https://img.shields.io/badge/Test_Files-501-10b981?style=flat-square)
![External Packages](https://img.shields.io/badge/External_Packages-118-8b5cf6?style=flat-square)
![Classes](https://img.shields.io/badge/Classes-707-7c3aed?style=flat-square)
![Functions](https://img.shields.io/badge/Functions-10924-16a34a?style=flat-square)
![Methods](https://img.shields.io/badge/Methods-3987-15803d?style=flat-square)
![Sync Functions](https://img.shields.io/badge/Sync_Functions-12533-4ade80?style=flat-square)
![Async Functions](https://img.shields.io/badge/Async_Functions-2378-059669?style=flat-square)
![Constants](https://img.shields.io/badge/Constants-13847-dc2626?style=flat-square)
![Imports](https://img.shields.io/badge/Imports-8688-0284c7?style=flat-square)
![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-2739-ea580c?style=flat-square)
![Comments](https://img.shields.io/badge/Comments-11897-64748b?style=flat-square)
![Comment Lines](https://img.shields.io/badge/Comment_Lines-28733-475569?style=flat-square)
![TODO Comments](https://img.shields.io/badge/TODO_Comments-29-ca8a04?style=flat-square)

### Python

![Python Files](https://img.shields.io/badge/Python_Files-39-3776ab?style=flat-square)
![Python Lines](https://img.shields.io/badge/Python_Lines-3974-4b8bbe?style=flat-square)
![Python Classes](https://img.shields.io/badge/Python_Classes-22-7c3aed?style=flat-square)
![Python Functions](https://img.shields.io/badge/Python_Functions-101-16a34a?style=flat-square)
![Python Protocols](https://img.shields.io/badge/Python_Protocols-0-0ea5e9?style=flat-square)
![Python Constants](https://img.shields.io/badge/Python_Constants-129-dc2626?style=flat-square)
![Python Imports](https://img.shields.io/badge/Python_Imports-81-0284c7?style=flat-square)
![Python Decorators](https://img.shields.io/badge/Python_Decorators-73-db2777?style=flat-square)
![Docstrings](https://img.shields.io/badge/Docstrings-50-6366f1?style=flat-square)
![Docstring Lines](https://img.shields.io/badge/Docstring_Lines-143-818cf8?style=flat-square)
![Python Comments](https://img.shields.io/badge/Python_Comments-32-64748b?style=flat-square)
![Python Comment Lines](https://img.shields.io/badge/Python_Comment_Lines-32-475569?style=flat-square)

### JSON

![JSON Files](https://img.shields.io/badge/JSON_Files-217-a16207?style=flat-square)
![JSON Lines](https://img.shields.io/badge/JSON_Lines-23031-ca8a04?style=flat-square)
![JSON Objects](https://img.shields.io/badge/JSON_Objects-4149-7c3aed?style=flat-square)
![JSON Arrays](https://img.shields.io/badge/JSON_Arrays-1542-8b5cf6?style=flat-square)
![JSON Properties](https://img.shields.io/badge/JSON_Properties-13441-0284c7?style=flat-square)
![JSON Strings](https://img.shields.io/badge/JSON_Strings-8596-16a34a?style=flat-square)
![JSON Numbers](https://img.shields.io/badge/JSON_Numbers-1269-059669?style=flat-square)
![JSON Booleans](https://img.shields.io/badge/JSON_Booleans-1673-0ea5e9?style=flat-square)
![JSON Nulls](https://img.shields.io/badge/JSON_Nulls-0-64748b?style=flat-square)
![JSON Items](https://img.shields.io/badge/JSON_Items-3578-475569?style=flat-square)
![JSON Nodes](https://img.shields.io/badge/JSON_Nodes-17229-dc2626?style=flat-square)
![JSON Max Depth](https://img.shields.io/badge/JSON_Max_Depth-11-ea580c?style=flat-square)

### YAML

![YAML Files](https://img.shields.io/badge/YAML_Files-25-cb171e?style=flat-square)
![YAML Lines](https://img.shields.io/badge/YAML_Lines-3054-e34c26?style=flat-square)
![YAML Documents](https://img.shields.io/badge/YAML_Documents-25-f97316?style=flat-square)
![YAML Mappings](https://img.shields.io/badge/YAML_Mappings-387-7c3aed?style=flat-square)
![YAML Sequences](https://img.shields.io/badge/YAML_Sequences-75-8b5cf6?style=flat-square)
![YAML Keys](https://img.shields.io/badge/YAML_Keys-1308-0284c7?style=flat-square)
![YAML Scalars](https://img.shields.io/badge/YAML_Scalars-2687-16a34a?style=flat-square)
![YAML Anchors](https://img.shields.io/badge/YAML_Anchors-0-059669?style=flat-square)
![YAML Aliases](https://img.shields.io/badge/YAML_Aliases-0-10b981?style=flat-square)
![YAML Comments](https://img.shields.io/badge/YAML_Comments-832-64748b?style=flat-square)
![YAML Max Depth](https://img.shields.io/badge/YAML_Max_Depth-7-ea580c?style=flat-square)

### TOML

![TOML Files](https://img.shields.io/badge/TOML_Files-5-9c4221?style=flat-square)
![TOML Lines](https://img.shields.io/badge/TOML_Lines-238-b45309?style=flat-square)
![TOML Tables](https://img.shields.io/badge/TOML_Tables-25-7c3aed?style=flat-square)
![TOML Array Tables](https://img.shields.io/badge/TOML_Array_Tables-6-8b5cf6?style=flat-square)
![TOML Keys](https://img.shields.io/badge/TOML_Keys-114-0284c7?style=flat-square)
![TOML Arrays](https://img.shields.io/badge/TOML_Arrays-30-16a34a?style=flat-square)
![TOML Comments](https://img.shields.io/badge/TOML_Comments-42-64748b?style=flat-square)

### Shell

![Shell Files](https://img.shields.io/badge/Shell_Files-34-89e051?style=flat-square)
![Shell Lines](https://img.shields.io/badge/Shell_Lines-2395-4eaa25?style=flat-square)
![Shell Functions](https://img.shields.io/badge/Shell_Functions-23-16a34a?style=flat-square)
![Shell Variables](https://img.shields.io/badge/Shell_Variables-211-0284c7?style=flat-square)
![Shell Exports](https://img.shields.io/badge/Shell_Exports-12-ea580c?style=flat-square)
![Shell Conditionals](https://img.shields.io/badge/Shell_Conditionals-163-7c3aed?style=flat-square)
![Shell Loops](https://img.shields.io/badge/Shell_Loops-17-8b5cf6?style=flat-square)
![Shell Pipelines](https://img.shields.io/badge/Shell_Pipelines-98-059669?style=flat-square)
![Shebangs](https://img.shields.io/badge/Shebangs-34-6b7280?style=flat-square)
![Shell Comments](https://img.shields.io/badge/Shell_Comments-523-64748b?style=flat-square)
![Shell Comment Lines](https://img.shields.io/badge/Shell_Comment_Lines-523-475569?style=flat-square)

### SQL

![SQL Files](https://img.shields.io/badge/SQL_Files-2-e38c00?style=flat-square)
![SQL Lines](https://img.shields.io/badge/SQL_Lines-358-f29111?style=flat-square)
![SQL Statements](https://img.shields.io/badge/SQL_Statements-323-7c3aed?style=flat-square)
![SQL Selects](https://img.shields.io/badge/SQL_Selects-0-16a34a?style=flat-square)
![SQL Inserts](https://img.shields.io/badge/SQL_Inserts-1-22c55e?style=flat-square)
![SQL Updates](https://img.shields.io/badge/SQL_Updates-17-0ea5e9?style=flat-square)
![SQL Deletes](https://img.shields.io/badge/SQL_Deletes-18-dc2626?style=flat-square)
![SQL Creates](https://img.shields.io/badge/SQL_Creates-57-0284c7?style=flat-square)
![SQL Joins](https://img.shields.io/badge/SQL_Joins-0-8b5cf6?style=flat-square)
![SQL CTEs](https://img.shields.io/badge/SQL_CTEs-37-059669?style=flat-square)
![SQL Comments](https://img.shields.io/badge/SQL_Comments-0-64748b?style=flat-square)

### HCL

![HCL Files](https://img.shields.io/badge/HCL_Files-2-844fba?style=flat-square)
![HCL Lines](https://img.shields.io/badge/HCL_Lines-52-a78bfa?style=flat-square)
![HCL Blocks](https://img.shields.io/badge/HCL_Blocks-11-7c3aed?style=flat-square)
![HCL Resources](https://img.shields.io/badge/HCL_Resources-1-0284c7?style=flat-square)
![HCL Variables](https://img.shields.io/badge/HCL_Variables-3-16a34a?style=flat-square)
![HCL Outputs](https://img.shields.io/badge/HCL_Outputs-1-059669?style=flat-square)
![HCL Attributes](https://img.shields.io/badge/HCL_Attributes-20-0ea5e9?style=flat-square)
![HCL Interpolations](https://img.shields.io/badge/HCL_Interpolations-0-db2777?style=flat-square)
![HCL Comments](https://img.shields.io/badge/HCL_Comments-0-64748b?style=flat-square)

### CSS

![CSS Files](https://img.shields.io/badge/CSS_Files-1-264de4?style=flat-square)
![CSS Lines](https://img.shields.io/badge/CSS_Lines-136-2965f1?style=flat-square)
![CSS Rules](https://img.shields.io/badge/CSS_Rules-7-7c3aed?style=flat-square)
![CSS Selectors](https://img.shields.io/badge/CSS_Selectors-8-8b5cf6?style=flat-square)
![CSS Declarations](https://img.shields.io/badge/CSS_Declarations-72-0284c7?style=flat-square)
![CSS At Rules](https://img.shields.io/badge/CSS_At_Rules-10-f97316?style=flat-square)
![CSS Media Queries](https://img.shields.io/badge/CSS_Media_Queries-0-ea580c?style=flat-square)
![CSS Custom Properties](https://img.shields.io/badge/CSS_Custom_Properties-65-16a34a?style=flat-square)
![CSS Comments](https://img.shields.io/badge/CSS_Comments-12-64748b?style=flat-square)

### Conventions

![Module Files](https://img.shields.io/badge/Module_Files-229-7c3aed?style=flat-square)
![Service Files](https://img.shields.io/badge/Service_Files-316-0284c7?style=flat-square)
![Command Files](https://img.shields.io/badge/Command_Files-38-16a34a?style=flat-square)
![Constants Files](https://img.shields.io/badge/Constants_Files-199-ea580c?style=flat-square)
![Types Files](https://img.shields.io/badge/Types_Files-210-db2777?style=flat-square)
![Utilities Files](https://img.shields.io/badge/Utilities_Files-13-0ea5e9?style=flat-square)
![TypeORM Entities](https://img.shields.io/badge/TypeORM_Entities-33-059669?style=flat-square)
![Unit Tests](https://img.shields.io/badge/Unit_Tests-462-ca8a04?style=flat-square)
![Integration Tests](https://img.shields.io/badge/Integration_Tests-29-7c3aed?style=flat-square)
![End To End Tests](https://img.shields.io/badge/End_To_End_Tests-9-0284c7?style=flat-square)

### Jupyter

![Notebooks](https://img.shields.io/badge/Notebooks-4-f37626?style=flat-square)
![Notebook Cells](https://img.shields.io/badge/Notebook_Cells-18-e8a33d?style=flat-square)
![Code Cells](https://img.shields.io/badge/Code_Cells-15-3776ab?style=flat-square)
![Markdown Cells](https://img.shields.io/badge/Markdown_Cells-3-083fa1?style=flat-square)
![Raw Cells](https://img.shields.io/badge/Raw_Cells-0-9ca3af?style=flat-square)
![Executed Cells](https://img.shields.io/badge/Executed_Cells-0-16a34a?style=flat-square)
![Cell Outputs](https://img.shields.io/badge/Cell_Outputs-0-059669?style=flat-square)
![Notebook Code Lines](https://img.shields.io/badge/Notebook_Code_Lines-873-4b8bbe?style=flat-square)
![Notebook Classes](https://img.shields.io/badge/Notebook_Classes-9-7c3aed?style=flat-square)
![Notebook Functions](https://img.shields.io/badge/Notebook_Functions-21-22c55e?style=flat-square)
![Notebook Imports](https://img.shields.io/badge/Notebook_Imports-61-0284c7?style=flat-square)
![Notebook Decorators](https://img.shields.io/badge/Notebook_Decorators-1-db2777?style=flat-square)
![Notebook Prose Lines](https://img.shields.io/badge/Notebook_Prose_Lines-9-1f6feb?style=flat-square)
![Notebook Headings](https://img.shields.io/badge/Notebook_Headings-3-a78bfa?style=flat-square)
![Notebook Links](https://img.shields.io/badge/Notebook_Links-0-10b981?style=flat-square)
![Notebook Images](https://img.shields.io/badge/Notebook_Images-0-34d399?style=flat-square)
![Notebook Code Blocks](https://img.shields.io/badge/Notebook_Code_Blocks-0-dc2626?style=flat-square)
![Notebook Properties](https://img.shields.io/badge/Notebook_Properties-138-ca8a04?style=flat-square)
![Notebook Nodes](https://img.shields.io/badge/Notebook_Nodes-1041-a16207?style=flat-square)
![Notebook Max Depth](https://img.shields.io/badge/Notebook_Max_Depth-5-ea580c?style=flat-square)

### Markdown

![Markdown Files](https://img.shields.io/badge/Markdown_Files-266-083fa1?style=flat-square)
![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-74728-1f6feb?style=flat-square)
![H1](https://img.shields.io/badge/H1-250-7c3aed?style=flat-square)
![H2](https://img.shields.io/badge/H2-1763-8b5cf6?style=flat-square)
![H3](https://img.shields.io/badge/H3-2188-a78bfa?style=flat-square)
![H4](https://img.shields.io/badge/H4-98-c4b5fd?style=flat-square)
![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
![Paragraphs](https://img.shields.io/badge/Paragraphs-11043-64748b?style=flat-square)
![Lists](https://img.shields.io/badge/Lists-1202-16a34a?style=flat-square)
![List Items](https://img.shields.io/badge/List_Items-5521-22c55e?style=flat-square)
![Task List Items](https://img.shields.io/badge/Task_List_Items-57-4ade80?style=flat-square)
![Tables](https://img.shields.io/badge/Tables-693-0284c7?style=flat-square)
![Table Rows](https://img.shields.io/badge/Table_Rows-6969-0ea5e9?style=flat-square)
![Links](https://img.shields.io/badge/Links-1933-059669?style=flat-square)
![Images](https://img.shields.io/badge/Images-7117-10b981?style=flat-square)
![Code Blocks](https://img.shields.io/badge/Code_Blocks-2058-dc2626?style=flat-square)
![Inline Code](https://img.shields.io/badge/Inline_Code-30353-ef4444?style=flat-square)
![Block Quotes](https://img.shields.io/badge/Block_Quotes-34-ca8a04?style=flat-square)
![Thematic Breaks](https://img.shields.io/badge/Thematic_Breaks-33-a16207?style=flat-square)
<!-- CODE_STATISTICS_END -->

<!-- CALL_STACKS_START -->

## 🔭 Callidescope

The 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.

| Measure | Value |
| --- | --- |
| Callables | 5013 |
| Files | 1404 |
| Calls traced | 5689 |
| Call stacks | 1286 |
| Deepest stack | 17 |
| Stacks through recursion | 12 |
| Unfollowable calls | 360 |

### Projects

| Project | Deepest | Limit | Headroom | Widest | Spread | Misplaced |
| --- | --- | --- | --- | --- | --- | --- |
| `packages/conformetry-languages` | 13 | 4 declared | -9 | 11 | 0 | 0 |
| `applications/caelundas` | 16 | 16 declared | 0 | 12 | 5 | 4 |
| `applications/lexico` | 9 | 9 declared | 0 | 9 | 0 | 1 |
| `applications/lexico-ingestion` | 17 | 17 declared | 0 | 8 | 2 | 1 |
| `applications/meanderaw` | 16 | 16 declared | 0 | 14 | 1 | 3 |
| `packages/callidescope-cli` | 15 | 15 declared | 0 | 11 | 2 | 0 |
| `packages/callidescope-nx` | 17 | 17 declared | 0 | 7 | 2 | 3 |
| `packages/codependix-boundaries` | 12 | 12 declared | 0 | 5 | 0 | 1 |
| `packages/codependix-cli` | 15 | 15 declared | 0 | 7 | 2 | 2 |
| `packages/codometer-cli` | 16 | 16 declared | 0 | 11 | 2 | 0 |
| `packages/conformetry-cli` | 14 | 14 declared | 0 | 9 | 0 | 0 |
| `packages/conformetry-examples` | 13 | 13 declared | 0 | 6 | 1 | 0 |
| `packages/conformetry-nx` | 14 | 14 declared | 0 | 9 | 4 | 0 |
| `packages/lexico-components` | 3 | 3 declared | 0 | 7 | 0 | 1 |
| `packages/lexico-entities` | 3 | 3 declared | 0 | 3 | 0 | 0 |
| `packages/logger` | 4 | 4 declared | 0 | 2 | 0 | 0 |
| `tools/synchronization` | 10 | 10 declared | 0 | 9 | 0 | 0 |
| `tools/validation` | 8 | 8 declared | 0 | 9 | 0 | 0 |
| `packages/callidescope-configuration` | 5 | 6 declared | 1 | 8 | 0 | 0 |
| `packages/codometer-size` | 0 | 3 declared | 3 | 2 | 0 | 0 |
| `packages/conformetry-configuration` | 10 | 13 declared | 3 | 5 | 0 | 0 |
| `packages/codependix-configuration` | 2 | 6 declared | 4 | 5 | 0 | 0 |
| `packages/codependix-nx` | 0 | 4 declared | 4 | 8 | 0 | 0 |
| `packages/codependix-nestjs` | 0 | 5 declared | 5 | 5 | 0 | 0 |
| `packages/codometer-customization` | 0 | 5 declared | 5 | 1 | 0 | 0 |
| `packages/conformetry-generation` | 2 | 7 declared | 5 | 4 | 0 | 0 |
| `packages/callidescope-graph` | 5 | 11 declared | 6 | 9 | 0 | 0 |
| `packages/callidescope-output` | 4 | 10 declared | 6 | 9 | 0 | 0 |
| `packages/codometer-configuration` | 2 | 8 declared | 6 | 7 | 0 | 0 |
| `packages/codometer-languages` | 5 | 11 declared | 6 | 12 | 1 | 0 |
| `packages/conformetry-core` | 0 | 6 declared | 6 | 4 | 0 | 0 |
| `packages/codometer-discovery` | 0 | 7 declared | 7 | 7 | 0 | 0 |
| `packages/codometer-output` | 4 | 11 declared | 7 | 16 | 0 | 0 |
| `packages/codependix-imports` | 0 | 8 declared | 8 | 8 | 0 | 0 |
| `packages/conformetry-files` | 0 | 9 declared | 9 | 3 | 0 | 0 |
| `packages/codometer-changes` | 0 | 10 declared | 10 | 7 | 0 | 0 |
| `packages/conformetry-validation` | 0 | 12 declared | 12 | 10 | 0 | 0 |
| `configuration` | 3 | 17 inherited | 14 | 2 | 0 | 0 |
| `packages/codometer-examples` | 2 | 17 inherited | 15 | 1 | 0 | 0 |
| `packages/callidescope-agents` | 0 | 17 inherited | 17 | 0 | 0 | 0 |
| `packages/codependix-agents` | 0 | 17 inherited | 17 | 0 | 0 | 0 |
| `packages/codependix-examples` | 0 | 17 inherited | 17 | 0 | 0 | 0 |
| `packages/codependix-examples/examples` | 0 | 17 inherited | 17 | 0 | 0 | 0 |
| `packages/codependix-examples/examples/graph-levels/atlas/packages/atlas-service` | 0 | 17 inherited | 17 | 0 | 0 | 0 |
| `packages/codependix-examples/examples/typescript-resolution/resolution` | 0 | 17 inherited | 17 | 0 | 0 | 0 |
| `packages/codometer-agents` | 0 | 17 inherited | 17 | 0 | 0 | 0 |
| `packages/conformetry-agents` | 0 | 17 inherited | 17 | 0 | 0 | 0 |

### Depth headroom

| Headroom | Projects |
| --- | --- |
| over limit | 1 |
| 0 — at limit | 17 |
| 1 | 1 |
| 2–3 | 1 |
| 4+ | 9 |
| no stacks | 18 |

### Call stacks over the depth limit (4)

**1. `JupyterService.validateDocument`** — depth 13 · orphan-root

```text
🚀 JupyterService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/conformetry-languages/src/modules/jupyter/jupyter.service.ts:153]
   ↳ Reports every notebook difference: envelope, missing cells, cell contents.
  └─> 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]
    └─> JupyterService.weighMissingCell(args: { cell: PairedCells; document: PreparedValidationDocument; }): number [packages/conformetry-languages/src/modules/jupyter/jupyter.service.ts:140]
       ↳ Weighs a cell the notebook does not have.
      └─> JupyterService.validateCell(…): DocumentValidationResult [packages/conformetry-languages/src/modules/jupyter/jupyter.service.ts:90]
         ↳ Validates one paired cell with the validator matching its kind.
        └─> MarkdownService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/conformetry-languages/src/modules/markdown/markdown.service.ts:48]
           ↳ Reports every markdown structure the template requires and the file lacks.
          └─> MarkdownTreeService.compareContainer(args: CompareNodeArguments): CompareNodeResult (cycle) [packages/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:64]
             ↳ Matches a container node, then descends into it.
            └─> MarkdownTreeService.map(…)(…): { differences: MarkdownComparisonError[]; lastMatchedNode: MarkdownNode; totalWeight: number; } (cycle) [packages/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:90]
              └─> MarkdownTreeService.compareChildren(args: CompareChildrenArguments): CompareChildrenResult (cycle) [packages/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:146]
                 ↳ Compares one level of two trees, descending into containers.
                └─> MarkdownTreeService.compareLeaf(args: CompareNodeArguments): CompareNodeResult [packages/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:114]
                   ↳ Matches a leaf node on its own identity, without descending.
                  └─> MarkdownTreeService.findCandidates(args: CompareNodeArguments): MarkdownNode[] [packages/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:134]
                     ↳ Finds every instance sibling satisfying the template node.
                    └─> MarkdownTreeService.filter(…)(instanceNode: MarkdownNode): boolean [packages/conformetry-languages/src/modules/markdown/markdown-tree.service.ts:135]
                      └─> MarkdownNodesService.matches(args: { instanceNode: MarkdownNode; templateNode: MarkdownNode; }): boolean [packages/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:140]
                         ↳ Returns whether an instance node satisfies a template node.
                        └─> MarkdownNodesService.readText(node: MarkdownNode): string [packages/conformetry-languages/src/modules/markdown/markdown-nodes.service.ts:163]
                           ↳ Reads a node's rendered plain text.
```

**2. `JsonService.validateDocument`** — depth 12 · orphan-root

```text
🚀 JsonService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/conformetry-languages/src/modules/json/json.service.ts:39]
   ↳ Reports every key or value the template requires and the instance lacks.
  └─> JsonComparisonService.compareArrayItem(…): JsonComparison (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:79]
     ↳ Matches one required array entry against the instance array.
    └─> JsonComparisonService.map(…)(instanceItem: JsonValue, index: number): JsonComparison (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:122]
      └─> JsonComparisonService.compare(args: CompareJsonArguments): JsonComparison (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:268]
         ↳ Compares a template value against an instance value, returning every way the instance fails to contain what the…
        └─> JsonComparisonService.compareArrays(…): JsonComparison (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:141]
           ↳ Compares two arrays.
          └─> JsonComparisonService.map(…)(templateItem: JsonValue): JsonComparison (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:148]
            └─> JsonComparisonService.compareObjects(…): JsonComparison (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:155]
               ↳ Compares two objects, requiring every template key to be present.
              └─> JsonComparisonService.map(…)([key, templateValue]: [string, JsonValue]): JsonComparison (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:164]
                └─> JsonComparisonService.countNodes(value: JsonValue): number (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:207]
                   ↳ Counts a JSON value and every value nested inside it.
                  └─> JsonComparisonService.reduce(…)(total: number, item: JsonValue): number (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:209]
                    └─> JsonComparisonService.reduce(…)(total: number, nested: JsonValue): number (cycle) [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:215]
                      └─> JsonComparisonService.isJsonObject(value: JsonValue): value is Record<string, JsonValue> [packages/conformetry-languages/src/modules/json/json-comparison.service.ts:235]
                         ↳ Returns whether a value is a plain JSON object.
```

**3. `TypescriptService.validateDocument`** — depth 12 · orphan-root

```text
🚀 TypescriptService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/conformetry-languages/src/modules/typescript/typescript.service.ts:164]
   ↳ Reports every declaration and comment the template requires.
  └─> TypescriptService.validateStructure(…): DocumentValidationResult [packages/conformetry-languages/src/modules/typescript/typescript.service.ts:107]
     ↳ Compares the syntax trees and describes each missing declaration.
    └─> TypescriptTreeService.compareBestCandidate(args: { candidates: Node[]; templateChild: Node; }): TreeComparison (cycle) [packages/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:67]
       ↳ Descends into whichever candidate explains the template best.
      └─> TypescriptTreeService.map(…)(candidate: Node): TreeComparison (cycle) [packages/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:72]
        └─> TypescriptTreeService.compareTree(args: CompareTreeArguments): TreeComparison (cycle) [packages/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:126]
           ↳ Compares one level of two trees, descending into every match.
          └─> TypescriptTreeService.map(…)(templateChild: Node): TreeComparison (cycle) [packages/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:133]
            └─> TypescriptTreeService.compareChild(…): TreeComparison (cycle) [packages/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:87]
               ↳ Matches one template child against the instance's children.
              └─> TypescriptTreeService.buildError(…): TypescriptComparisonError [packages/conformetry-languages/src/modules/typescript/typescript-tree.service.ts:42]
                 ↳ Describes a template node with no instance counterpart.
                └─> TypescriptNodesService.countSubtree(node: Node): number (cycle) [packages/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:176]
                   ↳ Counts a node and everything beneath it.
                  └─> TypescriptNodesService.reduce(…)(total: number, child: Node): number (cycle) [packages/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:177]
                    └─> TypescriptNodesService.readChildren(node: Node): Node[] [packages/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:183]
                       ↳ Reads a node's direct children, skipping the end-of-file token.
                      └─> TypescriptNodesService.forEachChild(…)(childNode: Node): undefined [packages/conformetry-languages/src/modules/typescript/typescript-nodes.service.ts:186]
```

<details>
<summary>1 more call stacks</summary>

**4. `PythonService.validateDocument`** — depth 6 · orphan-root

```text
🚀 PythonService.validateDocument(document: PreparedValidationDocument): DocumentValidationResult [packages/conformetry-languages/src/modules/python/python.service.ts:38]
   ↳ Reports every declaration and comment the template requires.
  └─> PythonBridgeService.validatePythonSource(args: RunPythonBridgeArguments): DocumentValidationResult [packages/conformetry-languages/src/modules/python/python-bridge.service.ts:160]
     ↳ Compares one Python source against its rendered template.
    └─> PythonBridgeService.map(…)(error: Readonly<Record<string, unknown>>): ConformetryDifference [packages/conformetry-languages/src/modules/python/python-bridge.service.ts:185]
      └─> PythonBridgeService.toConformetryDifference(error: PythonBridgeError): ConformetryDifference [packages/conformetry-languages/src/modules/python/python-bridge.service.ts:132]
         ↳ Maps one snake_case bridge error onto the shared error shape.
        └─> PythonBridgeService.readValues(error: PythonBridgeError): Partial<ConformetryDifference> [packages/conformetry-languages/src/modules/python/python-bridge.service.ts:121]
           ↳ Reads the optional expected and actual values.
          └─> PythonBridgeService.readString(error: PythonBridgeError, key: string): string | undefined [packages/conformetry-languages/src/modules/python/python-bridge.service.ts:111]
             ↳ Narrows an untrusted string field from the bridge payload.
```

</details>

### Module spread

| Callable | Spread | Calls directly | Location |
| --- | --- | --- | --- |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |
| `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` |

### Callables over the breadth limit (0)

None.

### Possibly misplaced

| Callable | Declared in | Called from | Callers |
| --- | --- | --- | --- |
| `cn` | `packages/lexico-components:lib` | `packages/lexico-components:components` | 219/219 |
| `CalendarService.buildInstantEvent` | `applications/caelundas:modules/calendar` | `applications/caelundas:modules/daily-cycles` | 8/9 |
| `typedFromEntries` | `applications/caelundas:modules/caelundas` | `applic

More