@codependix/cli 0.0.11 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,29 @@
1
+ ## 0.0.13 (2026-10-09)
2
+
3
+ ### 🧱 Updated Dependencies
4
+
5
+ - Updated codependix-configuration to 0.0.13
6
+ - Updated codependix-boundaries to 0.0.12
7
+ - Updated codependix-output to 0.0.12
8
+ - Updated codependix-core to 0.0.11
9
+
10
+ ## 0.0.12 (2026-10-08)
11
+
12
+ ### 🚀 Features
13
+
14
+ - **codependix:** ✨ print boundary findings in the markdown and json output ([#1415](https://github.com/organizzolini/codebase/pull/1415), [#1401](https://github.com/organizzolini/codebase/issues/1401))
15
+ - ⚠️ **codependix:** 💥 charge boundary findings to the projects they belong to ([#1409](https://github.com/organizzolini/codebase/pull/1409), [#1400](https://github.com/organizzolini/codebase/issues/1400))
16
+
17
+ ### ⚠️ Breaking Changes
18
+
19
+ - **codependix:** 💥 charge boundary findings to the projects they belong to ([#1409](https://github.com/organizzolini/codebase/pull/1409), [#1400](https://github.com/organizzolini/codebase/issues/1400))
20
+
21
+ ### 🧱 Updated Dependencies
22
+
23
+ - Updated codependix-configuration to 0.0.12
24
+ - Updated codependix-boundaries to 0.0.11
25
+ - Updated codependix-output to 0.0.11
26
+
1
27
  ## 0.0.11 (2026-10-08)
2
28
 
3
29
  ### 🩹 Fixes
package/README.md CHANGED
@@ -33,20 +33,22 @@ for this repository's own.
33
33
  | ---- | ------- |
34
34
  | `--check [check]` | Fail on a comma-separated set drawn from `boundaries` and `reports` |
35
35
  | `--config [config]` | Path to a `codependix.config.ts`. Searched for upward from `--directory` when omitted |
36
+ | `--dependencies` | Build `--check boundaries` over the dependencies of the projects `--projects` or `--tags` named, reporting their findings as notes (default). No effect without `--projects` or `--tags` |
37
+ | `--no-dependencies` | Build `--check boundaries` over only the projects `--projects` or `--tags` named, not their dependencies. No effect without `--projects` or `--tags` |
36
38
  | `-d, --directory [directory]` | Workspace root whose Nx project graph this run reads. Defaults to the working directory |
37
39
  | `--exclude [exclude]` | Comma-separated globs overriding the configured `exclude`. Refused when `exclude` was never configured |
38
40
  | `--file-imports` | Build, check, and write the `fileImports` graph type for this run |
39
41
  | `--no-file-imports` | Skip the `fileImports` graph type for this run |
40
- | `-f, --format [format]` | What to print to standard output, one of `json` and `markdown` (default: `markdown`). A graph type prints only when the run also configured a workspace destination for it, even if its own toggle flag enabled it |
42
+ | `-f, --format [format]` | What to print to standard output, one of `json` and `markdown` (default: `markdown`). A graph type prints only when the run also configured a workspace destination for it, even if its own toggle flag enabled it. A `--check boundaries` run adds its findings, under a `boundaries` key in `json` and a `Boundaries` section in `markdown` |
41
43
  | `--include [include]` | Comma-separated globs overriding the configured `include`. Refused when `include` was never configured |
42
- | `--json-output [jsonOutput]` | Write every active graph type's data, combined into one JSON file at this path, keyed by graph type name. A type appears only when the run also configured a workspace destination for it |
43
- | `--markdown-output [markdownOutput]` | Write every active graph type's rendered diagram, combined into one Markdown file at this path. A type appears only when the run also configured a workspace destination for it |
44
+ | `--json-output [jsonOutput]` | Write every active graph type's data, combined into one JSON file at this path, keyed by graph type name. A type appears only when the run also configured a workspace destination for it. A `--check boundaries` run adds its findings under a `boundaries` key |
45
+ | `--markdown-output [markdownOutput]` | Write every active graph type's rendered diagram, combined into one Markdown file at this path. A type appears only when the run also configured a workspace destination for it. A `--check boundaries` run adds its findings as a `Boundaries` section |
44
46
  | `--nestjs-modules` | Build, check, and write the `nestjsModules` graph type for this run |
45
47
  | `--no-nestjs-modules` | Skip the `nestjsModules` graph type for this run |
46
48
  | `--nx-projects` | Build, check, and write the `nxProjects` graph type for this run |
47
49
  | `--no-nx-projects` | Skip the `nxProjects` graph type for this run |
48
- | `--projects [projects]` | Comma-separated project names or roots to export for, as globs, beyond those `include` already selects. Also narrows the Workspace Graph and `--check boundaries` to the named set |
49
- | `--tags [tags]` | Comma-separated Nx tags to export for, beyond what `include` already selects. Also narrows the Workspace Graph and `--check boundaries` to the tagged projects |
50
+ | `--projects [projects]` | Comma-separated project names or roots to export for, as globs, beyond those `include` already selects. Also narrows the Workspace Graph to the named set, and `--check boundaries` to failing only on findings charged to it |
51
+ | `--tags [tags]` | Comma-separated Nx tags to export for, beyond what `include` already selects. Narrows the Workspace Graph and `--check boundaries` to the tagged projects, as `--projects` does |
50
52
  | `--write` | Writes every configured export |
51
53
 
52
54
  ### The two `--check` names
@@ -79,6 +81,26 @@ unreadable together.
79
81
  "gate nothing" it would be a gate that cannot fail, which is worse than no
80
82
  gate at all because it looks like protection.
81
83
 
84
+ ### Which project a boundary finding fails
85
+
86
+ Every finding is charged to the project or projects it belongs to: a cycle to
87
+ every project owning a node on it, a forbidden edge to the project owning its
88
+ source, a file- or NestJS-level finding to the project whose graph it was
89
+ found in, and a container that cannot boot to that container's project — its
90
+ message naming the project that owns the class it failed on, when the stack
91
+ shows another one.
92
+
93
+ `--projects` and `--tags` name the projects a run judges. Graphs are built
94
+ over those projects and everything they transitively depend on, and a finding
95
+ fails the run only when it is charged to a named project. One charged only to
96
+ a dependency is logged as a note, "in dependency", without failing:
97
+ the named project is built on it, but it is not that project's to fix.
98
+ `--no-dependencies` builds over the named projects alone. With neither flag
99
+ every project is judged. A `--projects`/`--tags` selection that matches no
100
+ project at all — a misspelled name, a tag nobody carries, or the workspace
101
+ root — is refused as a rejected command line rather than run as a gate that
102
+ judges nothing.
103
+
82
104
  ### When no mode is named
83
105
 
84
106
  Naming neither `--check` nor `--write` is asked about, as a three-item menu —
@@ -117,6 +139,32 @@ terminal and pastes into an issue. `--format json` is for a machine reading
117
139
  standard output, so every diagnostic goes to standard error — keeping standard
118
140
  output clean and parseable as data.
119
141
 
142
+ ### The boundary report
143
+
144
+ `--check boundaries` logs its findings to standard error and, given
145
+ `--format`, `--json-output`, or `--markdown-output`, also prints them as a
146
+ report: under a `boundaries` key in JSON, and as a `### Boundaries` section in
147
+ Markdown. A `--check boundaries`-only run, which exports nothing, prints just
148
+ that report; a run that also exports carries both in one document. Without one
149
+ of those flags a boundaries-only run prints nothing, and a run that also
150
+ exports prints its graphs exactly as it did before.
151
+
152
+ The JSON holds `judgedProjects` (the projects whose findings fail the run),
153
+ `violations` (`level`, `rule`, `message`, `source`, `target`, `cycle`, the
154
+ charged `projects`, and a `verdict` of `fail` or `note`) and `failures`
155
+ (`level`, `error`, the charged `projects`, an `ownerProject` when the failing
156
+ code belongs to another project, and a `verdict`). A `note` is a finding that
157
+ lives in a dependency of a judged project and does not fail the run. The
158
+ Markdown lists the same findings under each project they are charged to, a
159
+ note marked as not failing.
160
+
161
+ Who a finding is charged to is worked through, with the report each case
162
+ prints, in four examples:
163
+ [a cycle](../codependix-examples/examples/boundary-cycles/README.md),
164
+ [a forbidden edge](../codependix-examples/examples/boundary-forbidden-edges/README.md),
165
+ [a dependent of either](../codependix-examples/examples/boundary-dependency-notes/README.md),
166
+ and [a container that cannot boot](../codependix-examples/examples/boundary-boot-failures/README.md).
167
+
120
168
  ## Packages
121
169
 
122
170
  | Package | Role |
@@ -124,7 +172,7 @@ output clean and parseable as data.
124
172
  | [`@codependix/cli`](.) | Orchestrates the four graph builders and delivers their exports |
125
173
  | [`@codependix/boundaries`](../codependix-boundaries/README.md) | Builds each level's graph for a workspace, judges it against the declared rules, and reports what breaks them. `--check boundaries` delegates to it wholesale |
126
174
  | [`@codependix/configuration`](../codependix-configuration/README.md) | Reads `codependix.config.ts` and resolves per-project export destinations and boundary rules |
127
- | [`@codependix/examples`](../codependix-examples/README.md) | Sixteen subjects built to be graphed, each with the guide codependix renders from it |
175
+ | [`@codependix/examples`](../codependix-examples/README.md) | Twenty-one subjects built to be graphed, each with the guide codependix renders from it |
128
176
  | [`@codependix/nx-projects`](../codependix-nx-projects/README.md) | Builds a project's Nx Neighborhood and the whole-workspace Workspace Graph |
129
177
  | [`@codependix/nestjs-modules`](../codependix-nestjs-modules/README.md) | Explores a NestJS project's container and builds its module graph |
130
178
  | [`@codependix/file-imports`](../codependix-file-imports/README.md) | 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 |
@@ -236,11 +284,13 @@ flowchart LR
236
284
  WorkspaceGraphsModule
237
285
  BoundaryCheckModule --> BoundariesModule
238
286
  BoundaryCheckModule --> ModuleGraphModule
287
+ BoundaryCheckModule --> NeighborhoodModule
239
288
  BoundaryCheckModule --> NestjsProjectModule
240
289
  BoundaryCheckModule --> PythonModule
241
290
  BoundaryCheckModule --> TypescriptModule
242
291
  BoundaryCheckModule --> WorkspaceGraphModule
243
292
  CombinedOutputModule --> AnchorsModule
293
+ CombinedOutputModule --> BoundaryCheckModule
244
294
  ConfigurationModule --> InputModule
245
295
  ConfigurationModule --> OverrideResolutionModule
246
296
  DeliveryModule --> AnchorsModule
@@ -365,9 +415,9 @@ Call stacks traced through `packages/ic-suite/codependix/codependix-cli`, deepes
365
415
 
366
416
  | Measure | Value |
367
417
  | --- | --- |
368
- | Callables | 43 |
418
+ | Callables | 47 |
369
419
  | Files | 19 |
370
- | Calls traced | 37 |
420
+ | Calls traced | 39 |
371
421
  | Call stacks | 19 |
372
422
  | Deepest stack | 15 |
373
423
  | Stacks through recursion | 0 |
@@ -387,11 +437,11 @@ What this project is judged against, as declared in its own `callidescope.config
387
437
  **1. `MapCommand.run`** — depth ≥ 15 · decorated-method
388
438
 
389
439
  ```text
390
- 🚀 MapCommand.run(_passedParameters: string[], options?: MapCommandOptions): Promise<void> [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:377]
440
+ 🚀 MapCommand.run(_passedParameters: string[], options?: MapCommandOptions): Promise<void> [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:445]
391
441
  ↳ Runs whatever the command line asked for: exports, boundaries, or both.
392
- └─> MapCommand.runMode(…): Promise<void> [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:125]
442
+ └─> MapCommand.runMode(…): Promise<void> [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:163]
393
443
  ↳ Runs the passes a resolved mode selected, and reports what they found.
394
- └─> MapCommand.runExports(context: GraphRunContext): Promise<MapRunResult> [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:106]
444
+ └─> MapCommand.runExports(context: GraphRunContext): Promise<MapRunResult> [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:144]
395
445
  ↳ Runs the export pass, warning when nothing was selected.
396
446
  └─> GraphRunService.run(context: GraphRunContext): Promise<MapRunResult> [packages/ic-suite/codependix/codependix-output/src/modules/graph-run/graph-run.service.ts:144]
397
447
  ↳ Runs every configured graph export against an already-resolved context.
@@ -446,9 +496,9 @@ What this project is judged against, as declared in its own `callidescope.config
446
496
  **3. `MapCommand.parseDirectory`** — depth 4 · decorated-method
447
497
 
448
498
  ```text
449
- 🚀 MapCommand.parseDirectory(value: string | undefined): string [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:191]
499
+ 🚀 MapCommand.parseDirectory(value: string | undefined): string [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:244]
450
500
  ↳ Parses the directory whose Nx workspace this run reads.
451
- └─> ConfigurationService.parsePathOption(value: string | undefined): string [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:294]
501
+ └─> ConfigurationService.parsePathOption(value: string | undefined): string [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:296]
452
502
  ↳ Parses a path option that falls back to the working directory.
453
503
  └─> InputService.parsePathOption(value: string | undefined): string [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:87]
454
504
  ↳ Parses a path option that falls back to the working directory.
@@ -462,9 +512,9 @@ What this project is judged against, as declared in its own `callidescope.config
462
512
  **4. `MapCommand.parseExclude`** — depth 4 · decorated-method
463
513
 
464
514
  ```text
465
- 🚀 MapCommand.parseExclude(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:207]
515
+ 🚀 MapCommand.parseExclude(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:260]
466
516
  ↳ Parses `--exclude`, a comma-separated list of globs overriding the configured `exclude`.
467
- └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:279]
517
+ └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:281]
468
518
  ↳ Parses a comma-separated list option, dropping blank entries.
469
519
  └─> InputService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:54]
470
520
  ↳ Parses a comma-separated list option, dropping blank entries.
@@ -474,9 +524,9 @@ What this project is judged against, as declared in its own `callidescope.config
474
524
  **5. `MapCommand.parseInclude`** — depth 4 · decorated-method
475
525
 
476
526
  ```text
477
- 🚀 MapCommand.parseInclude(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:246]
527
+ 🚀 MapCommand.parseInclude(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:299]
478
528
  ↳ Parses `--include`, a comma-separated list of globs overriding the configured `include`.
479
- └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:279]
529
+ └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:281]
480
530
  ↳ Parses a comma-separated list option, dropping blank entries.
481
531
  └─> InputService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:54]
482
532
  ↳ Parses a comma-separated list option, dropping blank entries.
@@ -488,7 +538,7 @@ What this project is judged against, as declared in its own `callidescope.config
488
538
  ```text
489
539
  🚀 PathCommand.parseDirectory(value: string | undefined): string [packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:98]
490
540
  ↳ Parses the directory whose Nx workspace this run reads.
491
- └─> ConfigurationService.parsePathOption(value: string | undefined): string [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:294]
541
+ └─> ConfigurationService.parsePathOption(value: string | undefined): string [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:296]
492
542
  ↳ Parses a path option that falls back to the working directory.
493
543
  └─> InputService.parsePathOption(value: string | undefined): string [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:87]
494
544
  ↳ Parses a path option that falls back to the working directory.
@@ -501,7 +551,7 @@ What this project is judged against, as declared in its own `callidescope.config
501
551
  ```text
502
552
  🚀 PathCommand.parseExclude(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:107]
503
553
  ↳ Parses `--exclude`, a comma-separated list of globs overriding the configured `exclude`.
504
- └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:279]
554
+ └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:281]
505
555
  ↳ Parses a comma-separated list option, dropping blank entries.
506
556
  └─> InputService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:54]
507
557
  ↳ Parses a comma-separated list option, dropping blank entries.
@@ -513,7 +563,7 @@ What this project is judged against, as declared in its own `callidescope.config
513
563
  ```text
514
564
  🚀 PathCommand.parseInclude(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:139]
515
565
  ↳ Parses `--include`, a comma-separated list of globs overriding the configured `include`.
516
- └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:279]
566
+ └─> ConfigurationService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:281]
517
567
  ↳ Parses a comma-separated list option, dropping blank entries.
518
568
  └─> InputService.parseCommaDelimitedOption(value: string | undefined): string[] [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:54]
519
569
  ↳ Parses a comma-separated list option, dropping blank entries.
@@ -523,9 +573,9 @@ What this project is judged against, as declared in its own `callidescope.config
523
573
  **9. `MapCommand.parseConfig`** — depth 3 · decorated-method
524
574
 
525
575
  ```text
526
- 🚀 MapCommand.parseConfig(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:182]
576
+ 🚀 MapCommand.parseConfig(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:221]
527
577
  ↳ Parses the optional configuration path from command-line input.
528
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
578
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
529
579
  ↳ Trims an optional string option, treating blank as absent.
530
580
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
531
581
  ↳ Trims an optional string option, treating blank as absent.
@@ -534,9 +584,9 @@ What this project is judged against, as declared in its own `callidescope.config
534
584
  **10. `MapCommand.parseFormat`** — depth 3 · decorated-method
535
585
 
536
586
  ```text
537
- 🚀 MapCommand.parseFormat(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:231]
587
+ 🚀 MapCommand.parseFormat(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:284]
538
588
  ↳ Parses what `--format` prints to standard output.
539
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
589
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
540
590
  ↳ Trims an optional string option, treating blank as absent.
541
591
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
542
592
  ↳ Trims an optional string option, treating blank as absent.
@@ -545,9 +595,9 @@ What this project is judged against, as declared in its own `callidescope.config
545
595
  **11. `MapCommand.parseJsonOutput`** — depth 3 · decorated-method
546
596
 
547
597
  ```text
548
- 🚀 MapCommand.parseJsonOutput(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:259]
598
+ 🚀 MapCommand.parseJsonOutput(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:312]
549
599
  ↳ Parses `--json-output`, the path to write every active graph type's combined JSON data to, keyed by graph type name.
550
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
600
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
551
601
  ↳ Trims an optional string option, treating blank as absent.
552
602
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
553
603
  ↳ Trims an optional string option, treating blank as absent.
@@ -556,9 +606,9 @@ What this project is judged against, as declared in its own `callidescope.config
556
606
  **12. `MapCommand.parseMarkdownOutput`** — depth 3 · decorated-method
557
607
 
558
608
  ```text
559
- 🚀 MapCommand.parseMarkdownOutput(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:272]
609
+ 🚀 MapCommand.parseMarkdownOutput(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:325]
560
610
  ↳ Parses `--markdown-output`, the path to write every active graph type's combined, anchor-spliced Markdown diagram to.
561
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
611
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
562
612
  ↳ Trims an optional string option, treating blank as absent.
563
613
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
564
614
  ↳ Trims an optional string option, treating blank as absent.
@@ -567,9 +617,9 @@ What this project is judged against, as declared in its own `callidescope.config
567
617
  **13. `MapCommand.parseProjects`** — depth 3 · decorated-method
568
618
 
569
619
  ```text
570
- 🚀 MapCommand.parseProjects(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:336]
620
+ 🚀 MapCommand.parseProjects(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:404]
571
621
  ↳ Parses the projects a run exports for beyond `include`. **Widening, and narrowing.** A named project is added to…
572
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
622
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
573
623
  ↳ Trims an optional string option, treating blank as absent.
574
624
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
575
625
  ↳ Trims an optional string option, treating blank as absent.
@@ -578,9 +628,9 @@ What this project is judged against, as declared in its own `callidescope.config
578
628
  **14. `MapCommand.parseTags`** — depth 3 · decorated-method
579
629
 
580
630
  ```text
581
- 🚀 MapCommand.parseTags(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:349]
631
+ 🚀 MapCommand.parseTags(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:417]
582
632
  ↳ Parses the Nx tags a run exports for, matched exactly against a project's own tags.
583
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
633
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
584
634
  ↳ Trims an optional string option, treating blank as absent.
585
635
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
586
636
  ↳ Trims an optional string option, treating blank as absent.
@@ -589,9 +639,9 @@ What this project is judged against, as declared in its own `callidescope.config
589
639
  **15. `MapCommand.parseWrite`** — depth 3 · decorated-method
590
640
 
591
641
  ```text
592
- 🚀 MapCommand.parseWrite(value: boolean | undefined): boolean [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:359]
642
+ 🚀 MapCommand.parseWrite(value: boolean | undefined): boolean [packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:427]
593
643
  ↳ Parses the `--write` flag from command-line input.
594
- └─> ConfigurationService.parseFlagOption(value: boolean | undefined): boolean [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:284]
644
+ └─> ConfigurationService.parseFlagOption(value: boolean | undefined): boolean [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:286]
595
645
  ↳ Parses a valueless boolean flag, which is present or it is not.
596
646
  └─> InputService.parseFlagOption(value: boolean | undefined): boolean [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:70]
597
647
  ↳ Parses a valueless boolean flag, which is present or it is not.
@@ -602,7 +652,7 @@ What this project is judged against, as declared in its own `callidescope.config
602
652
  ```text
603
653
  🚀 PathCommand.parseConfig(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:89]
604
654
  ↳ Parses the optional configuration path from command-line input.
605
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
655
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
606
656
  ↳ Trims an optional string option, treating blank as absent.
607
657
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
608
658
  ↳ Trims an optional string option, treating blank as absent.
@@ -613,7 +663,7 @@ What this project is judged against, as declared in its own `callidescope.config
613
663
  ```text
614
664
  🚀 PathCommand.parseFormat(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:130]
615
665
  ↳ Parses what `--format` prints to standard output. Defaults to Markdown when the flag was left off entirely.
616
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
666
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
617
667
  ↳ Trims an optional string option, treating blank as absent.
618
668
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
619
669
  ↳ Trims an optional string option, treating blank as absent.
@@ -624,7 +674,7 @@ What this project is judged against, as declared in its own `callidescope.config
624
674
  ```text
625
675
  🚀 PathCommand.parseProjects(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:194]
626
676
  ↳ Parses the projects a query searches across beyond `include`.
627
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
677
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
628
678
  ↳ Trims an optional string option, treating blank as absent.
629
679
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
630
680
  ↳ Trims an optional string option, treating blank as absent.
@@ -635,7 +685,7 @@ What this project is judged against, as declared in its own `callidescope.config
635
685
  ```text
636
686
  🚀 PathCommand.parseTags(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:204]
637
687
  ↳ Parses the Nx tags a query searches across, matched exactly against project tags.
638
- └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:289]
688
+ └─> ConfigurationService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/configuration/configuration.service.ts:291]
639
689
  ↳ Trims an optional string option, treating blank as absent.
640
690
  └─> InputService.parseOptionalOption(value: string | undefined): string | undefined [packages/ic-suite/codependix/codependix-configuration/src/modules/input/input.service.ts:75]
641
691
  ↳ Trims an optional string option, treating blank as absent.
@@ -647,27 +697,28 @@ What this project is judged against, as declared in its own `callidescope.config
647
697
 
648
698
  | Callable | Breadth | Calls directly | Location |
649
699
  | --- | --- | --- | --- |
650
- | `MapCommand.runMode` | 7 | `RunContextService.build`, `ConfigurationService.touchesFiles`, `MapCommand.runExports`, `BoundaryCheckService.run`, `MapCommand.runCombinedOutput`, `ReportingService.reportPassOutcomes`, `ReportingService.reportSuccess` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:125` |
700
+ | `MapCommand.runMode` | 7 | `RunContextService.build`, `ConfigurationService.touchesFiles`, `MapCommand.runExports`, `BoundaryCheckService.run`, `MapCommand.runCombinedOutput`, `ReportingService.reportPassOutcomes`, `ReportingService.reportSuccess` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:163` |
651
701
  | `PathCommand.run` | 5 | `PathCommand.validateInputs`, `RunContextService.build`, `PathQueryService.query`, `PathQueryService.render`, `ReportingService.reportFailure` | `packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:214` |
652
- | `MapCommand.run` | 4 | `ConfigurationService.selectMode`, `CombinedOutputService.resolveFormat`, `MapCommand.runMode`, `ReportingService.reportFailure` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:377` |
702
+ | `MapCommand.run` | 4 | `ConfigurationService.selectMode`, `CombinedOutputService.resolveFormat`, `MapCommand.runMode`, `ReportingService.reportFailure` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:445` |
653
703
 
654
704
  <details>
655
- <summary>20 more callables</summary>
705
+ <summary>21 more callables</summary>
656
706
 
657
707
  | Callable | Breadth | Calls directly | Location |
658
708
  | --- | --- | --- | --- |
659
- | `MapCommand.runExports` | 2 | `GraphRunService.run`, `ReportingService.reportEmptySelection` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:106` |
660
- | `MapCommand.runCombinedOutput` | 1 | `CombinedOutputService.run` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:82` |
661
- | `MapCommand.parseConfig` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:182` |
662
- | `MapCommand.parseDirectory` | 1 | `ConfigurationService.parsePathOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:191` |
663
- | `MapCommand.parseExclude` | 1 | `ConfigurationService.parseCommaDelimitedOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:207` |
664
- | `MapCommand.parseFormat` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:231` |
665
- | `MapCommand.parseInclude` | 1 | `ConfigurationService.parseCommaDelimitedOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:246` |
666
- | `MapCommand.parseJsonOutput` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:259` |
667
- | `MapCommand.parseMarkdownOutput` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:272` |
668
- | `MapCommand.parseProjects` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:336` |
669
- | `MapCommand.parseTags` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:349` |
670
- | `MapCommand.parseWrite` | 1 | `ConfigurationService.parseFlagOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:359` |
709
+ | `MapCommand.runCombinedOutput` | 2 | `MapCommand.buildBoundaryReport`, `CombinedOutputService.run` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:111` |
710
+ | `MapCommand.runExports` | 2 | `GraphRunService.run`, `ReportingService.reportEmptySelection` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:144` |
711
+ | `MapCommand.buildBoundaryReport` | 1 | `MapCommand.map(…)` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:87` |
712
+ | `MapCommand.parseConfig` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:221` |
713
+ | `MapCommand.parseDirectory` | 1 | `ConfigurationService.parsePathOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:244` |
714
+ | `MapCommand.parseExclude` | 1 | `ConfigurationService.parseCommaDelimitedOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:260` |
715
+ | `MapCommand.parseFormat` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:284` |
716
+ | `MapCommand.parseInclude` | 1 | `ConfigurationService.parseCommaDelimitedOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:299` |
717
+ | `MapCommand.parseJsonOutput` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:312` |
718
+ | `MapCommand.parseMarkdownOutput` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:325` |
719
+ | `MapCommand.parseProjects` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:404` |
720
+ | `MapCommand.parseTags` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:417` |
721
+ | `MapCommand.parseWrite` | 1 | `ConfigurationService.parseFlagOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/map/map.command.ts:427` |
671
722
  | `PathCommand.validateInputs` | 1 | `PathQueryService.resolveFormat` | `packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:53` |
672
723
  | `PathCommand.parseConfig` | 1 | `ConfigurationService.parseOptionalOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:89` |
673
724
  | `PathCommand.parseDirectory` | 1 | `ConfigurationService.parsePathOption` | `packages/ic-suite/codependix/codependix-cli/src/modules/path/path.command.ts:98` |
@@ -686,14 +737,14 @@ What this project is judged against, as declared in its own `callidescope.config
686
737
 
687
738
  ### Project
688
739
 
689
- ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-3368-22c55e?style=flat-square)
690
- ![Repository Size](https://img.shields.io/badge/Repository_Size-117.56_kB-6b7280?style=flat-square)
740
+ ![Lines of Code](https://img.shields.io/badge/Lines_of_Code-4058-22c55e?style=flat-square)
741
+ ![Repository Size](https://img.shields.io/badge/Repository_Size-140.67_kB-6b7280?style=flat-square)
691
742
  ![Folders](https://img.shields.io/badge/Folders-5-4a4a4a?style=flat-square)
692
743
  ![Source Files](https://img.shields.io/badge/Source_Files-31-3178c6?style=flat-square)
693
744
 
694
745
  ### Measured Targets
695
746
 
696
- ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-5.50_kB_gzip-6b7280?style=flat-square)
747
+ ![Compiled JavaScript Size](https://img.shields.io/badge/Compiled_JavaScript_Size-5.82_kB_gzip-6b7280?style=flat-square)
697
748
 
698
749
  ### TypeScript
699
750
 
@@ -701,8 +752,8 @@ What this project is judged against, as declared in its own `callidescope.config
701
752
  ![Interfaces](https://img.shields.io/badge/Interfaces-2-0ea5e9?style=flat-square)
702
753
  ![Generic Declarations](https://img.shields.io/badge/Generic_Declarations-0-0369a1?style=flat-square)
703
754
  ![Enums](https://img.shields.io/badge/Enums-0-f97316?style=flat-square)
704
- ![Decorators](https://img.shields.io/badge/Decorators-37-db2777?style=flat-square)
705
- ![Doc Comments](https://img.shields.io/badge/Doc_Comments-37-6366f1?style=flat-square)
755
+ ![Decorators](https://img.shields.io/badge/Decorators-39-db2777?style=flat-square)
756
+ ![Doc Comments](https://img.shields.io/badge/Doc_Comments-42-6366f1?style=flat-square)
706
757
  ![Static Methods](https://img.shields.io/badge/Static_Methods-1-166534?style=flat-square)
707
758
 
708
759
  ### JavaScript
@@ -711,15 +762,15 @@ What this project is judged against, as declared in its own `callidescope.config
711
762
  ![Test Files](https://img.shields.io/badge/Test_Files-10-10b981?style=flat-square)
712
763
  ![External Packages](https://img.shields.io/badge/External_Packages-19-8b5cf6?style=flat-square)
713
764
  ![Classes](https://img.shields.io/badge/Classes-6-7c3aed?style=flat-square)
714
- ![Functions](https://img.shields.io/badge/Functions-173-16a34a?style=flat-square)
715
- ![Methods](https://img.shields.io/badge/Methods-41-15803d?style=flat-square)
716
- ![Sync Functions](https://img.shields.io/badge/Sync_Functions-144-4ade80?style=flat-square)
717
- ![Async Functions](https://img.shields.io/badge/Async_Functions-70-059669?style=flat-square)
718
- ![Constants](https://img.shields.io/badge/Constants-108-dc2626?style=flat-square)
765
+ ![Functions](https://img.shields.io/badge/Functions-218-16a34a?style=flat-square)
766
+ ![Methods](https://img.shields.io/badge/Methods-45-15803d?style=flat-square)
767
+ ![Sync Functions](https://img.shields.io/badge/Sync_Functions-171-4ade80?style=flat-square)
768
+ ![Async Functions](https://img.shields.io/badge/Async_Functions-92-059669?style=flat-square)
769
+ ![Constants](https://img.shields.io/badge/Constants-148-dc2626?style=flat-square)
719
770
  ![Imports](https://img.shields.io/badge/Imports-114-0284c7?style=flat-square)
720
771
  ![Exported Symbols](https://img.shields.io/badge/Exported_Symbols-10-ea580c?style=flat-square)
721
- ![Comments](https://img.shields.io/badge/Comments-130-64748b?style=flat-square)
722
- ![Comment Lines](https://img.shields.io/badge/Comment_Lines-232-475569?style=flat-square)
772
+ ![Comments](https://img.shields.io/badge/Comments-137-64748b?style=flat-square)
773
+ ![Comment Lines](https://img.shields.io/badge/Comment_Lines-248-475569?style=flat-square)
723
774
  ![TODO Comments](https://img.shields.io/badge/TODO_Comments-0-ca8a04?style=flat-square)
724
775
 
725
776
  ### Python
@@ -875,20 +926,20 @@ What this project is judged against, as declared in its own `callidescope.config
875
926
  ### Markdown
876
927
 
877
928
  ![Markdown Files](https://img.shields.io/badge/Markdown_Files-2-083fa1?style=flat-square)
878
- ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-319-1f6feb?style=flat-square)
929
+ ![Markdown Lines](https://img.shields.io/badge/Markdown_Lines-345-1f6feb?style=flat-square)
879
930
  ![H1](https://img.shields.io/badge/H1-1-7c3aed?style=flat-square)
880
- ![H2](https://img.shields.io/badge/H2-15-8b5cf6?style=flat-square)
881
- ![H3](https://img.shields.io/badge/H3-23-a78bfa?style=flat-square)
931
+ ![H2](https://img.shields.io/badge/H2-17-8b5cf6?style=flat-square)
932
+ ![H3](https://img.shields.io/badge/H3-27-a78bfa?style=flat-square)
882
933
  ![H4](https://img.shields.io/badge/H4-0-c4b5fd?style=flat-square)
883
934
  ![H5](https://img.shields.io/badge/H5-0-ddd6fe?style=flat-square)
884
935
  ![H6](https://img.shields.io/badge/H6-0-ede9fe?style=flat-square)
885
- ![Paragraphs](https://img.shields.io/badge/Paragraphs-79-64748b?style=flat-square)
886
- ![Lists](https://img.shields.io/badge/Lists-15-16a34a?style=flat-square)
887
- ![List Items](https://img.shields.io/badge/List_Items-58-22c55e?style=flat-square)
936
+ ![Paragraphs](https://img.shields.io/badge/Paragraphs-89-64748b?style=flat-square)
937
+ ![Lists](https://img.shields.io/badge/Lists-19-16a34a?style=flat-square)
938
+ ![List Items](https://img.shields.io/badge/List_Items-68-22c55e?style=flat-square)
888
939
  ![Task List Items](https://img.shields.io/badge/Task_List_Items-0-4ade80?style=flat-square)
889
940
  ![Tables](https://img.shields.io/badge/Tables-2-0284c7?style=flat-square)
890
941
  ![Table Rows](https://img.shields.io/badge/Table_Rows-10-0ea5e9?style=flat-square)
891
- ![Links](https://img.shields.io/badge/Links-12-059669?style=flat-square)
942
+ ![Links](https://img.shields.io/badge/Links-18-059669?style=flat-square)
892
943
  ![Images](https://img.shields.io/badge/Images-0-10b981?style=flat-square)
893
944
  ![Code Blocks](https://img.shields.io/badge/Code_Blocks-13-dc2626?style=flat-square)
894
945
  ![Inline Code](https://img.shields.io/badge/Inline_Code-78-ef4444?style=flat-square)
@@ -216,13 +216,26 @@ var V = d.object({}), H, U = H = class MapCommand extends j {
216
216
  constructor(e, t, n, r, i, a, o) {
217
217
  super(), this.graphRunService = e, this.boundaryCheckService = t, this.combinedOutputService = n, this.configurationService = r, this.logger = i, this.reportingService = a, this.runContextService = o, this.logger.setContext(H.name);
218
218
  }
219
+ buildBoundaryReport(e) {
220
+ let { boundaryOutcome: t, context: n, options: r } = e, i = r.format !== void 0 || r.jsonOutput !== void 0 || r.markdownOutput !== void 0;
221
+ if (t !== void 0 && i) return {
222
+ judgedProjects: n.selectedProjects.map((e) => e.name),
223
+ outcome: t
224
+ };
225
+ }
219
226
  runCombinedOutput(e) {
220
- e.combinedGraphs !== void 0 && this.combinedOutputService.run({
227
+ let { combinedGraphs: t, context: n, options: r } = e, i = this.buildBoundaryReport({
228
+ boundaryOutcome: e.boundaryOutcome,
229
+ context: n,
230
+ options: r
231
+ });
232
+ (t !== void 0 || i !== void 0) && this.combinedOutputService.run({
233
+ boundaries: i,
221
234
  format: e.format,
222
- graphs: e.combinedGraphs,
223
- jsonOutputPath: e.options.jsonOutput,
224
- markdownOutputPath: e.options.markdownOutput,
225
- workingDirectory: e.workingDirectory
235
+ graphs: t ?? {},
236
+ jsonOutputPath: r.jsonOutput,
237
+ markdownOutputPath: r.markdownOutput,
238
+ workingDirectory: n.workingDirectory
226
239
  });
227
240
  }
228
241
  async runExports(e) {
@@ -236,10 +249,11 @@ var V = d.object({}), H, U = H = class MapCommand extends j {
236
249
  workingDirectory: l.resolve(r.directory ?? process.cwd())
237
250
  }), a = this.configurationService.touchesFiles(n) ? await this.runExports(i) : void 0, o = n.checksBoundaries ? await this.boundaryCheckService.run(i) : void 0;
238
251
  if (this.runCombinedOutput({
252
+ boundaryOutcome: o,
239
253
  combinedGraphs: a?.combinedGraphs,
254
+ context: i,
240
255
  format: t,
241
- options: r,
242
- workingDirectory: i.workingDirectory
256
+ options: r
243
257
  }), !this.reportingService.reportPassOutcomes({
244
258
  boundaryOutcome: o,
245
259
  exportRun: a
@@ -258,6 +272,9 @@ var V = d.object({}), H, U = H = class MapCommand extends j {
258
272
  parseConfig(e) {
259
273
  return this.configurationService.parseOptionalOption(e);
260
274
  }
275
+ parseDependencies() {
276
+ return !0;
277
+ }
261
278
  parseDirectory(e) {
262
279
  return this.configurationService.parsePathOption(e);
263
280
  }
@@ -282,6 +299,9 @@ var V = d.object({}), H, U = H = class MapCommand extends j {
282
299
  parseNestjsModules() {
283
300
  return !0;
284
301
  }
302
+ parseNoDependencies() {
303
+ return !1;
304
+ }
285
305
  parseNoFileImports() {
286
306
  return !1;
287
307
  }
@@ -337,6 +357,14 @@ __decorate([
337
357
  __decorateMetadata("design:paramtypes", [Object]),
338
358
  __decorateMetadata("design:returntype", Object)
339
359
  ], U.prototype, "parseConfig", null), __decorate([
360
+ M({
361
+ description: "Build --check boundaries over the dependencies of the projects --projects or --tags named, reporting their findings as notes (default). No effect without --projects or --tags",
362
+ flags: "--dependencies"
363
+ }),
364
+ __decorateMetadata("design:type", Function),
365
+ __decorateMetadata("design:paramtypes", []),
366
+ __decorateMetadata("design:returntype", Boolean)
367
+ ], U.prototype, "parseDependencies", null), __decorate([
340
368
  M({
341
369
  description: "Directory whose Nx workspace this run reads",
342
370
  flags: "-d, --directory [directory]"
@@ -362,7 +390,7 @@ __decorate([
362
390
  __decorateMetadata("design:returntype", Boolean)
363
391
  ], U.prototype, "parseFileImports", null), __decorate([
364
392
  M({
365
- description: `What to print to standard output, one of ${S.join(" and ")} (default: ${x}). A graph type prints only when this run also configured a workspace destination for it, even if its own toggle flag enabled it`,
393
+ description: `What to print to standard output, one of ${S.join(" and ")} (default: ${x}). A graph type prints only when this run also configured a workspace destination for it, even if its own toggle flag enabled it. A --check boundaries run adds its findings, under a boundaries key in json and a Boundaries section in markdown`,
366
394
  flags: "-f, --format [format]"
367
395
  }),
368
396
  __decorateMetadata("design:type", Function),
@@ -378,7 +406,7 @@ __decorate([
378
406
  __decorateMetadata("design:returntype", Array)
379
407
  ], U.prototype, "parseInclude", null), __decorate([
380
408
  M({
381
- description: "Write every active graph type's data, combined into one JSON file at this path, keyed by graph type name. A type appears only when this run also configured a workspace destination for it",
409
+ description: "Write every active graph type's data, combined into one JSON file at this path, keyed by graph type name. A type appears only when this run also configured a workspace destination for it. A --check boundaries run adds its findings under a boundaries key",
382
410
  flags: "--json-output [jsonOutput]"
383
411
  }),
384
412
  __decorateMetadata("design:type", Function),
@@ -386,7 +414,7 @@ __decorate([
386
414
  __decorateMetadata("design:returntype", Object)
387
415
  ], U.prototype, "parseJsonOutput", null), __decorate([
388
416
  M({
389
- description: "Write every active graph type's rendered diagram, combined into one Markdown file at this path. A type appears only when this run also configured a workspace destination for it",
417
+ description: "Write every active graph type's rendered diagram, combined into one Markdown file at this path. A type appears only when this run also configured a workspace destination for it. A --check boundaries run adds its findings as a Boundaries section",
390
418
  flags: "--markdown-output [markdownOutput]"
391
419
  }),
392
420
  __decorateMetadata("design:type", Function),
@@ -401,6 +429,14 @@ __decorate([
401
429
  __decorateMetadata("design:paramtypes", []),
402
430
  __decorateMetadata("design:returntype", Boolean)
403
431
  ], U.prototype, "parseNestjsModules", null), __decorate([
432
+ M({
433
+ description: "Build --check boundaries over only the projects --projects or --tags named, not their dependencies. No effect without --projects or --tags",
434
+ flags: "--no-dependencies"
435
+ }),
436
+ __decorateMetadata("design:type", Function),
437
+ __decorateMetadata("design:paramtypes", []),
438
+ __decorateMetadata("design:returntype", Boolean)
439
+ ], U.prototype, "parseNoDependencies", null), __decorate([
404
440
  M({
405
441
  description: "Skip the fileImports graph type for this run",
406
442
  flags: "--no-file-imports"
@@ -434,7 +470,7 @@ __decorate([
434
470
  __decorateMetadata("design:returntype", Boolean)
435
471
  ], U.prototype, "parseNxProjects", null), __decorate([
436
472
  M({
437
- description: "Comma-separated project names or roots to export for, as globs, beyond those include already selects. Also narrows the Workspace Graph and --check boundaries to the named set",
473
+ description: "Comma-separated project names or roots to export for, as globs, beyond those include already selects. Also narrows the Workspace Graph to the named set, and --check boundaries to failing only on findings charged to it",
438
474
  flags: "--projects [projects]"
439
475
  }),
440
476
  __decorateMetadata("design:type", Function),
@@ -442,7 +478,7 @@ __decorate([
442
478
  __decorateMetadata("design:returntype", Object)
443
479
  ], U.prototype, "parseProjects", null), __decorate([
444
480
  M({
445
- description: "Comma-separated Nx tags to export for, beyond what include already selects. Also narrows the Workspace Graph and --check boundaries to the tagged projects",
481
+ description: "Comma-separated Nx tags to export for, beyond what include already selects. Narrows the Workspace Graph and --check boundaries to the tagged projects, as --projects does",
446
482
  flags: "--tags [tags]"
447
483
  }),
448
484
  __decorateMetadata("design:type", Function),
@@ -381,13 +381,20 @@ export declare class MapCommand extends CommandRunner {
381
381
  private readonly runContextService;
382
382
  constructor(graphRunService: GraphRunService, boundaryCheckService: BoundaryCheckService, combinedOutputService: CombinedOutputService, configurationService: ConfigurationService, logger: LoggerService, reportingService: ReportingService, runContextService: RunContextService);
383
383
  /**
384
- * Prints and writes every active graph type's combined output, when the
385
- * export pass ran at all.
384
+ * What a `--check boundaries` pass found, as the combined output carries it
385
+ * — but only when the command line asked for an output.
386
386
  *
387
- * A `--check boundaries`-only run never reaches this: nothing was built to
388
- * combine, so `--format`/`--json-output`/`--markdown-output` are silently
389
- * inert on a run that touched no export at all — the same way `--write`
390
- * and `--check reports` are inert on one that never named a destination.
387
+ * Left out unless `--format`, `--json-output`, or `--markdown-output` was
388
+ * given: an export run prints its graphs to standard output by default, and
389
+ * a `--write --check boundaries` run that named no output keeps printing
390
+ * exactly those graphs. A `--check boundaries`-only run that named none
391
+ * prints nothing at all and logs to standard error alone.
392
+ */
393
+ private buildBoundaryReport;
394
+ /**
395
+ * Prints and writes the combined output: every active graph type's data
396
+ * when the export pass ran, and the boundary pass's findings beside it when
397
+ * `buildBoundaryReport` carries them.
391
398
  */
392
399
  private runCombinedOutput;
393
400
  /**
@@ -419,6 +426,12 @@ export declare class MapCommand extends CommandRunner {
419
426
  parseCheck(value: string): string;
420
427
  /** Parses the optional configuration path from command-line input. */
421
428
  parseConfig(value: string | undefined): string | undefined;
429
+ /**
430
+ * Builds `--projects`/`--tags` graphs over the named projects' dependency
431
+ * closure — the default, so this exists only for symmetry with
432
+ * `--no-dependencies`.
433
+ */
434
+ parseDependencies(): true;
422
435
  /** Parses the directory whose Nx workspace this run reads. */
423
436
  parseDirectory(value: string | undefined): string;
424
437
  /**
@@ -459,6 +472,13 @@ export declare class MapCommand extends CommandRunner {
459
472
  parseMarkdownOutput(value: string | undefined): string | undefined;
460
473
  /** Enables the `nestjsModules` graph type for this run. */
461
474
  parseNestjsModules(): true;
475
+ /**
476
+ * Builds `--projects`/`--tags` graphs over the named projects alone,
477
+ * without their dependencies — faster, but an Nx edge leaving the named
478
+ * set is no longer drawn, and a finding the named projects inherit from a
479
+ * dependency is no longer noted.
480
+ */
481
+ parseNoDependencies(): false;
462
482
  /** Disables the `fileImports` graph type for this run. */
463
483
  parseNoFileImports(): false;
464
484
  /** Disables the `nestjsModules` graph type for this run. */
@@ -472,10 +492,10 @@ export declare class MapCommand extends CommandRunner {
472
492
  *
473
493
  * **Widening, and narrowing.** A named project is added to whatever
474
494
  * `include` already selected, and `exclude` still wins over it. It also
475
- * narrows what a run draws and judges: the Workspace Graph's node set and
476
- * every level `--check boundaries` judges become the named set. A narrowed
477
- * gate sees fewer edges than a whole-workspace one — fine for a local run,
478
- * and worth thinking twice about in CI.
495
+ * narrows the Workspace Graph to the named set, and `--check boundaries`
496
+ * to judging it: graphs are built over the named set's dependency closure,
497
+ * and only a finding charged to a named project fails the run — one in a
498
+ * dependency is reported as a note.
479
499
  */
480
500
  parseProjects(value: string | undefined): string | undefined;
481
501
  /**
package/dist/src/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as e, r as t, t as n } from "../main.module-DhSimp4F.js";
1
+ import { n as e, r as t, t as n } from "../main.module-DJFfw_zD.js";
2
2
  export { n as MainModule, t as MapCommand, e as MapModule };
package/dist/src/main.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { i as e, t } from "../main.module-DhSimp4F.js";
2
+ import { i as e, t } from "../main.module-DJFfw_zD.js";
3
3
  import { CommandFactory as n } from "nest-commander";
4
4
  import "reflect-metadata";
5
5
  //#region packages/ic-suite/codependix/codependix-cli/src/main.ts
package/package.json CHANGED
@@ -7,10 +7,10 @@
7
7
  "url": "https://github.com/organizzolini/codebase/issues"
8
8
  },
9
9
  "dependencies": {
10
- "@codependix/boundaries": "0.0.10",
11
- "@codependix/configuration": "0.0.11",
12
- "@codependix/core": "0.0.10",
13
- "@codependix/output": "0.0.10",
10
+ "@codependix/boundaries": "0.0.12",
11
+ "@codependix/configuration": "0.0.13",
12
+ "@codependix/core": "0.0.11",
13
+ "@codependix/output": "0.0.12",
14
14
  "@nestjs/common": "^11.1.21 || ^12.0.1",
15
15
  "@nestjs/config": "^12.0.0",
16
16
  "@nestjs/core": "^11.1.21 || ^12.0.1",
@@ -74,5 +74,5 @@
74
74
  "strict": true
75
75
  },
76
76
  "types": "./dist/src/index.d.ts",
77
- "version": "0.0.11"
77
+ "version": "0.0.13"
78
78
  }