Skip to content

docs(api): add sidebar navigation and remove auto-generated notices - #157

Merged
NTCoding merged 10 commits into
mainfrom
issue-154-fix-documentation-navigation-a
Jan 14, 2026
Merged

NTCoding merged 10 commits into
mainfrom
issue-154-fix-documentation-navigation-a

Conversation

@NTCoding

@NTCoding NTCoding commented Jan 14, 2026 •

Copy link
Copy Markdown
Owner

User description

Closes #154

Fixes #154

Summary

  • Add left sidebar navigation for /api/ pages in VitePress config
  • Remove auto-generated notices from CLI and extraction-config docs for cleaner UX

Changes

  • apps/docs/.vitepress/config.ts: Added /api/ sidebar with riviere-builder and riviere-query sections
  • packages/riviere-cli/scripts/generate-docs.ts: Removed notice generation
  • packages/riviere-extract-config/scripts/generate-docs.ts: Removed notice generation
  • Regenerated all affected documentation files

PR Type

Documentation


Description

  • Add left sidebar navigation for /api/ pages in VitePress config

  • Remove auto-generated notices from CLI and extraction-config docs

  • Regenerate affected documentation files with cleaner UX


Diagram Walkthrough

flowchart LR
  A["VitePress Config"] -->|"Add /api/ sidebar"| B["API Navigation"]
  C["Doc Generators"] -->|"Remove notices"| D["Generated Docs"]
  B --> E["Cleaner UX"]
  D --> E
Loading

File Walkthrough

Relevant files
Documentation
9 files
config.ts
Add API sidebar navigation structure                                         
+28/-0   
generate-docs.ts
Remove auto-generated notice from CLI docs                             
+0/-3     
generate-docs.ts
Remove auto-generated notices from schema docs                     
+0/-6     
cli-reference.md
Remove auto-generated notice from CLI reference                   
+0/-3     
predicates.md
Remove auto-generated notice from predicates                         
+0/-3     
schema.md
Remove notice and update schema documentation                       
+14/-4   
cli-reference.md
Remove auto-generated notice from CLI reference                   
+0/-3     
predicates.md
Remove auto-generated notice from predicates                         
+0/-3     
schema.md
Remove auto-generated notice from schema docs                       
+0/-3     

Summary by CodeRabbit

  • Documentation

    • Updated Reference sidebar and API links to the new Reference API paths.
    • Removed auto-generated header notices from several reference pages and generated outputs for cleaner docs.
    • Extraction-config docs expanded to document external module references and a new customTypes property; modules now accept refs.
  • New Features

    • Docs generator improved rendering for unions, arrays, records/maps and supports schema additionalProperties.
  • Chores

    • Documentation build configured to emit under the Reference path and include frontmatter metadata; lint ignore pattern updated and dev tooling entries adjusted.

✏️ Tip: You can customize this high-level summary in your review settings.

- Add left sidebar navigation for /api/ pages in VitePress config
- Remove auto-generated notices from CLI and extraction-config docs
- Notices are developer-facing, not user-facing - cleaner UX

Fixes #154

Co-Authored-By: Claude Opus 4.5 <[email protected]>
@coderabbitai

coderabbitai Bot commented Jan 14, 2026 •

Copy link
Copy Markdown

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

📝 Walkthrough

Walkthrough

Replaces API doc links to reference paths, removes several auto-generated banners from docs and generators, and extends extraction-config schema/docs and the schema doc generator to support moduleRef, customTypes, and additionalProperties rendering.

Changes

Cohort / File(s) Summary
Docs config
apps/docs/.vitepress/config.ts
Updated sidebar link targets from /api/generated/... to /reference/api/generated/....
API reference pages
apps/docs/reference/api/index.md, apps/docs/reference/api/...
Normalized many API hyperlinks to the new /reference/api/generated/... paths.
CLI reference + generator
apps/docs/reference/cli/cli-reference.md, packages/riviere-cli/scripts/generate-docs.ts
Removed the 3-line "This file is auto-generated…" banner from the CLI reference and the generator output.
Extraction-config schema docs
apps/docs/reference/extraction-config/schema.md
Changed root modules type from module[] → `(module
Predicates docs + schema generator
apps/docs/reference/extraction-config/predicates.md, packages/riviere-extract-config/scripts/generate-docs.ts
Removed auto-generated notice from predicates.md; generator: added additionalProperties rendering, improved oneOf/array/record type formatting, and added `additionalProperties?: SchemaProperty
TypeDoc configs
packages/riviere-builder/typedoc.json, packages/riviere-query/typedoc.json
Changed TypeDoc output paths to apps/docs/reference/api/generated/..., added typedoc-plugin-frontmatter and frontmatterGlobals.pageClass = "reference".
Linting config
.markdownlint-cli2.jsonc
Updated ignore pattern from apps/docs/api/generated/** → apps/docs/reference/api/generated/**.
Package deps
package.json
Added typedoc-plugin-frontmatter and @vitest/eslint-plugin (devDependencies adjustments).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

"I hop the paths where sidebars bend,
I nudge the banners to a tidy end.
Modules now can point and grow,
Types tucked in a gentle row.
🥕 — a rabbit's cheer for docs that flow!"

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main changes: adding sidebar navigation for API pages and removing auto-generated notices from documentation.
Linked Issues check ✅ Passed The PR successfully implements both acceptance criteria from issue #154: API pages now have left sidebar navigation and auto-generated notices are consistently removed.
Out of Scope Changes check ✅ Passed All changes are directly aligned with issue #154 objectives; some ancillary updates like TypeDoc configuration and documentation path restructuring support the main goals.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.



📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9b73ae3 and 64f676c.

⛔ Files ignored due to path filters (86)
  • apps/docs/reference/api/generated/riviere-builder/README.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/BuildValidationError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/ComponentId.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/ComponentNotFoundError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/CustomTypeAlreadyDefinedError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/CustomTypeNotFoundError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/DirectoryNotFoundError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/DomainNotFoundError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/DuplicateComponentError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/DuplicateDomainError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/InvalidEnrichmentTargetError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/InvalidGraphError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/MissingDomainsError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/MissingRequiredPropertiesError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/MissingSourcesError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/classes/RiviereBuilder.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/functions/findNearMatches.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/APIInput.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/BuilderOptions.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/BuilderStats.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/BuilderWarning.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/ComponentIdParts.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/CustomInput.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/CustomTypeInput.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/DomainInput.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/DomainOpInput.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/EnrichmentInput.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/EventHandlerInput.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/EventInput.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/ExternalLinkInput.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/LinkInput.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/NearMatchMismatch.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/NearMatchOptions.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/NearMatchQuery.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/NearMatchResult.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/UIInput.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-builder/interfaces/UseCaseInput.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/README.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/classes/ComponentNotFoundError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/classes/RiviereQuery.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/functions/parseComponentId.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/functions/parseDomainName.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/functions/parseEntityName.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/functions/parseEventId.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/functions/parseEventName.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/functions/parseHandlerId.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/functions/parseHandlerName.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/functions/parseLinkId.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/functions/parseOperationName.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/functions/parseState.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/ComponentCounts.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/ComponentModification.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/CrossDomainLink.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/DiffStats.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/Domain.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/DomainConnection.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/Entity.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/EntityTransition.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/EventHandlerInfo.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/EventSubscriber.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/ExternalDomain.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/Flow.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/FlowStep.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/GraphDiff.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/GraphStats.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/KnownSourceEvent.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/PublishedEvent.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/SearchWithFlowOptions.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/SearchWithFlowResult.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/UnknownSourceEvent.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/ValidationError.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/interfaces/ValidationResult.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/type-aliases/ComponentId.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/type-aliases/DomainName.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/type-aliases/EntityName.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/type-aliases/EventId.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/type-aliases/EventName.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/type-aliases/HandlerId.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/type-aliases/HandlerName.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/type-aliases/LinkId.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/type-aliases/LinkType.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/type-aliases/OperationName.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/type-aliases/State.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/type-aliases/SubscribedEventWithDomain.md is excluded by !**/generated/**
  • apps/docs/reference/api/generated/riviere-query/type-aliases/ValidationErrorCode.md is excluded by !**/generated/**
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (4)
  • apps/docs/reference/api/index.md
  • package.json
  • packages/riviere-builder/typedoc.json
  • packages/riviere-query/typedoc.json
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{js,mjs,ts,tsx,json}

📄 CodeRabbit inference engine (CLAUDE.md)

Always use nx commands for build, test, lint operations. Do not run npm/pnpm directly in project folders

Files:

  • packages/riviere-builder/typedoc.json
  • packages/riviere-query/typedoc.json
  • package.json
package.json

📄 CodeRabbit inference engine (CLAUDE.md)

When adding dependencies between projects, add "@living-architecture/[pkg-name]": "workspace:*" to the consuming project's package.json

Files:

  • package.json
🧠 Learnings (26)
📓 Common learnings
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 156
File: packages/riviere-extract-config/src/types.ts:71-75
Timestamp: 2026-01-14T00:09:27.486Z
Learning: In packages/riviere-extract-config/src/types.ts, the ExtractionConfig interface represents the post-expansion state where all $ref module references have been resolved to ModuleConfig entries. The extraction-config.schema.json allows both ModuleConfig and ModuleRef in the modules array because it validates raw input before expandModuleRefs runs, but after expansion, modules are always ModuleConfig[], so the TypeScript type correctly models this expanded state.
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.{json,ts} : Define extraction configuration using the JSON Schema from `living-architecture/riviere-extract-config` DSL
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.ts : Use `living-architecture/riviere-extract-ts` TypeScript extractor with ts-morph for AST parsing when implementing TypeScript extraction for architecture schema components
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.ts : Use the Rivière Builder Node.js library to programmatically construct the schema graph when implementing custom extraction code
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-config/CLAUDE.md:0-0
Timestamp: 2026-01-06T23:01:34.751Z
Learning: Extraction config schemas must define all six required component types per module: api, useCase, domainOp, event, eventHandler, and ui. Unused component types must be explicitly marked with `notUsed: true` rather than omitted
📚 Learning: 2026-01-02T11:58:27.018Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-cli/CLAUDE.md:0-0
Timestamp: 2026-01-02T11:58:27.018Z
Learning: After modifying CLI commands, run `nx generate-docs riviere-cli` to regenerate CLI reference documentation

Applied to files:

  • packages/riviere-builder/typedoc.json
  • packages/riviere-query/typedoc.json
  • apps/docs/reference/api/index.md
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.{ts,tsx} : Use ts-morph for TypeScript AST parsing instead of other parsers

Applied to files:

  • packages/riviere-builder/typedoc.json
  • packages/riviere-query/typedoc.json
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.ts : Use the Rivière Builder Node.js library to programmatically construct the schema graph when implementing custom extraction code

Applied to files:

  • packages/riviere-builder/typedoc.json
  • packages/riviere-query/typedoc.json
  • apps/docs/reference/api/index.md
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.ts : Use `living-architecture/riviere-extract-ts` TypeScript extractor with ts-morph for AST parsing when implementing TypeScript extraction for architecture schema components

Applied to files:

  • packages/riviere-builder/typedoc.json
  • packages/riviere-query/typedoc.json
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*.{ts,tsx} : Apply decorators from `living-architecture/riviere-extract-conventions` to mark all classes as architectural components

Applied to files:

  • packages/riviere-builder/typedoc.json
  • packages/riviere-query/typedoc.json
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.test.{ts,tsx} : Implement integration tests for end-to-end extraction from TypeScript code to JSON output

Applied to files:

  • packages/riviere-builder/typedoc.json
  • packages/riviere-query/typedoc.json
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.{json,ts} : Define extraction configuration using the JSON Schema from `living-architecture/riviere-extract-config` DSL

Applied to files:

  • packages/riviere-builder/typedoc.json
  • packages/riviere-query/typedoc.json
📚 Learning: 2026-01-06T23:01:34.751Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-config/CLAUDE.md:0-0
Timestamp: 2026-01-06T23:01:34.751Z
Learning: Applies to packages/riviere-extract-config/**/*.ts : Extraction config schema is the source of truth for valid structures. TypeScript types must mirror the schema definition to maintain consistency

Applied to files:

  • packages/riviere-builder/typedoc.json
  • packages/riviere-query/typedoc.json
📚 Learning: 2026-01-08T19:36:17.306Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-08T19:36:17.306Z
Learning: Applies to docs/conventions/apps/*/tsconfig.json : Each app must have a 3-file tsconfig structure: tsconfig.json (editor entry point), tsconfig.lib.json (production build), and tsconfig.spec.json (tests).

Applied to files:

  • packages/riviere-builder/typedoc.json
  • package.json
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.{ts,tsx} : Use glob pattern matching for module-based organization of extraction rules

Applied to files:

  • packages/riviere-query/typedoc.json
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.test.{ts,tsx} : Use ts-morph's in-memory file system (`useInMemoryFileSystem: true`) for fast isolated tests

Applied to files:

  • packages/riviere-query/typedoc.json
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.{ts,tsx} : Implement extraction logic as pure functions with no side effects

Applied to files:

  • packages/riviere-query/typedoc.json
📚 Learning: 2026-01-08T07:05:01.766Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.766Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `UseCase`, `Event`, or `UI` class-level decorators to mark the class itself as a component

Applied to files:

  • apps/docs/reference/api/index.md
📚 Learning: 2026-01-08T07:05:01.766Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.766Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `DomainOp`, `APIEndpoint`, or `EventHandler` method-level decorators to mark individual methods as components

Applied to files:

  • apps/docs/reference/api/index.md
📚 Learning: 2026-01-11T23:03:06.868Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 130
File: apps/docs/extract/deterministic/typescript/getting-started.md:8-8
Timestamp: 2026-01-11T23:03:06.868Z
Learning: In Markdown documentation files, when stating Node.js requirements, clearly distinguish between the minimum supported version (as per package.json engines) and the recommended/CI-tested version stated in prerequisites. Apply this pattern to similar docs under apps/docs to avoid confusion and maintain consistency across the repository.

Applied to files:

  • apps/docs/reference/api/index.md
📚 Learning: 2026-01-08T12:57:19.167Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 67
File: packages/riviere-extract-ts/tsconfig.spec.json:5-22
Timestamp: 2026-01-08T12:57:19.167Z
Learning: In tsconfig.spec.json files, use expanded types array ["vitest/globals", "vitest/importMeta", "vite/client", "node", "vitest"] for complete test type coverage. Include patterns should cover .test and .spec files, config files (vitest.config.ts/mts, vite.config.ts/mts), multiple extensions (.ts, .tsx, .js, .jsx), and .d.ts files to ensure proper TypeScript coverage across the testing environment.

Applied to files:

  • package.json
📚 Learning: 2026-01-13T11:37:59.334Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-13T11:37:59.334Z
Learning: Applies to vitest.config.ts : Add vitest.config.ts if tests are needed with 100% coverage as the default

Applied to files:

  • package.json
📚 Learning: 2026-01-08T19:36:17.306Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-08T19:36:17.306Z
Learning: Applies to docs/conventions/packages/*/vitest.config.ts : Each package must include a vitest.config.ts file with 100% coverage thresholds for test configuration.

Applied to files:

  • package.json
📚 Learning: 2026-01-08T19:36:17.306Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-08T19:36:17.306Z
Learning: Applies to docs/conventions/apps/*/vitest.config.ts : Each app must include a vitest.config.ts file with 100% coverage thresholds for test configuration.

Applied to files:

  • package.json
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/vitest.config.mts : Enforce 100% code coverage using Vitest with v8 coverage and thresholds configured in vitest.config.mts

Applied to files:

  • package.json
📚 Learning: 2026-01-13T11:37:59.334Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-13T11:37:59.334Z
Learning: Applies to **/*.{ts,tsx} : When adding dependencies between projects, add `"living-architecture/[pkg-name]": "workspace:*"` to the consuming project's package.json

Applied to files:

  • package.json
📚 Learning: 2026-01-08T19:36:17.306Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-08T19:36:17.306Z
Learning: Applies to docs/conventions/packages/*/tsconfig.json : Each package must have a 3-file tsconfig structure: tsconfig.json (editor entry point), tsconfig.lib.json (production build), and tsconfig.spec.json (tests).

Applied to files:

  • package.json
📚 Learning: 2026-01-13T11:37:59.334Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-13T11:37:59.334Z
Learning: Applies to **/*.{ts,tsx} : Follow `docs/conventions/software-design.md` when writing, editing, refactoring, or reviewing code

Applied to files:

  • package.json
📚 Learning: 2026-01-13T11:37:59.334Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-13T11:37:59.334Z
Learning: Applies to **/*.{ts,tsx} : Follow `docs/conventions/testing.md` when writing tests. 100% test coverage is mandatory and enforced

Applied to files:

  • package.json
📚 Learning: 2026-01-02T17:46:32.292Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/standard-patterns.md:0-0
Timestamp: 2026-01-02T17:46:32.292Z
Learning: Applies to docs/conventions/**/*.{ts,tsx} : Use Zod for creating branded types

Applied to files:

  • package.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: browser-tests (firefox)
  • GitHub Check: browser-tests (webkit)
  • GitHub Check: main
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (6)
packages/riviere-builder/typedoc.json (1)

4-8: LGTM! Consistent documentation reorganization.

The output path relocation to reference/api/generated/ and addition of the frontmatter plugin align with the PR objectives. The frontmatterGlobals configuration will apply the reference page class to all generated documentation files, supporting consistent styling.

packages/riviere-query/typedoc.json (1)

4-8: LGTM! Consistent with riviere-builder configuration.

The changes mirror the riviere-builder typedoc.json exactly, ensuring consistent documentation generation across both packages. The output path and frontmatter settings are properly aligned.

apps/docs/reference/api/index.md (3)

22-29: LGTM! Links updated consistently.

All RiviereBuilder method links are correctly updated to the new /reference/api/generated/ path structure, matching the TypeDoc output configuration.


78-83: LGTM! RiviereQuery links aligned with new paths.

The RiviereQuery method links are consistently updated to match the new documentation structure.

Also applies to: 89-89, 95-97, 103-103


109-111: LGTM! Full documentation section updated.

The main documentation links correctly point to the new reference paths for RiviereBuilder, RiviereQuery, and Types.

package.json (1)

57-59: typedoc-plugin-frontmatter ^1.3.1 is compatible with TypeDoc ^0.28.15.

The typedoc-plugin-frontmatter addition correctly supports the new frontmatter configuration in both typedoc.json files. Version compatibility is confirmed.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@qodo-code-review

qodo-code-review Bot commented Jan 14, 2026 •

Copy link
Copy Markdown
Contributor

PR Compliance Guide 🔍

Below is a summary of compliance checks for this PR:

Security Compliance
🟢
No security concerns identified No security vulnerabilities detected by AI analysis. Human verification advised for critical code.
Ticket Compliance
🟡
🎫 #154
🟢 Add left sidebar navigation for documentation pages under the `/api/` path.
🔴 Ensure all auto-generated documentation pages display a consistent auto-generated notice
format.
Codebase Duplication Compliance
⚪
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
🟢
Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

🔴
Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status:
Misleading type docs: The generated documentation lists the modules field type as undefined[], which is not
meaningful and makes the reference non-self-documenting.

Referred Code
| `modules` | `undefined[]` | **Yes** | Module definitions for component extraction |

Learn more about managing compliance generic rules or creating your own custom rules

  • Update
Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jan 14, 2026 •

Copy link
Copy Markdown

Deploying living-architecture with  Cloudflare Pages  Cloudflare Pages

Latest commit: 64f676c
Status: ✅  Deploy successful!
Preview URL: https://8a86f9b3.living-architecture.pages.dev
Branch Preview URL: https://issue-154-fix-documentation.living-architecture.pages.dev

View logs

@qodo-code-review

qodo-code-review Bot commented Jan 14, 2026 •

Copy link
Copy Markdown
Contributor

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Possible issue
✅ Fix incorrect modules type
Suggestion Impact:The documentation schema table was corrected to show `modules` as an array of `module` or `moduleRef` instead of `undefined[]`.

code diff:

-| `modules` | `undefined[]` | **Yes** | Module definitions for component extraction |
+| `modules` | (`module` \| `moduleRef`)[] | **Yes** | Module definitions for component extraction |

Update the type for the modules property from undefined[] to (module |
moduleRef)[] to correctly reflect that it can contain both module and moduleRef
items.

apps/docs/reference/extraction-config/schema.md [18]

-| `modules` | `undefined[]` | **Yes** | Module definitions for component extraction |
+| `modules` | `(module \| moduleRef)[]` | **Yes** | Module definitions for component extraction |

[Suggestion processed]

Suggestion importance[1-10]: 8

__

Why: This suggestion correctly identifies a significant error (undefined[]) introduced in the PR and provides a comprehensive fix by incorporating the newly added moduleRef type, which makes the documentation accurate and complete.

Medium
General
✅ Clarify customTypes type
Suggestion Impact:The documentation for `customTypes` was updated from `object` to a `Record<...>` type, improving specificity as suggested, though it uses `Record` instead of `Record`.

code diff:

-| `customTypes` | `object` | No | User-defined component types with their detection rules |
+| `customTypes` | `Record<string, detectionRule>` | No | User-defined component types with their detection rules |

Clarify the type for customTypes from a generic object to a more specific
Record<string, componentRule> for better documentation.

apps/docs/reference/extraction-config/schema.md [51]

-| `customTypes` | `object` | No | User-defined component types with their detection rules |
+| `customTypes` | `Record<string, componentRule>` | No | User-defined component types with their detection rules |

[Suggestion processed]

Suggestion importance[1-10]: 6

__

Why: This suggestion improves the documentation for the new customTypes property by replacing the generic object type with a more specific Record<string, componentRule>, which significantly enhances clarity and usability.

Low
  • Update

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a77552e and 5e63666.

⛔ Files ignored due to path filters (3)
  • packages/riviere-cli/docs/generated/cli-reference.md is excluded by !**/generated/**
  • packages/riviere-extract-config/docs/generated/predicates.md is excluded by !**/generated/**
  • packages/riviere-extract-config/docs/generated/schema.md is excluded by !**/generated/**
📒 Files selected for processing (6)
  • apps/docs/.vitepress/config.ts
  • apps/docs/reference/cli/cli-reference.md
  • apps/docs/reference/extraction-config/predicates.md
  • apps/docs/reference/extraction-config/schema.md
  • packages/riviere-cli/scripts/generate-docs.ts
  • packages/riviere-extract-config/scripts/generate-docs.ts
💤 Files with no reviewable changes (4)
  • apps/docs/reference/extraction-config/predicates.md
  • packages/riviere-cli/scripts/generate-docs.ts
  • apps/docs/reference/cli/cli-reference.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
🧰 Additional context used
🧠 Learnings (13)
📚 Learning: 2026-01-02T11:58:27.018Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-cli/CLAUDE.md:0-0
Timestamp: 2026-01-02T11:58:27.018Z
Learning: After modifying CLI commands, run `nx generate-docs riviere-cli` to regenerate CLI reference documentation

Applied to files:

  • apps/docs/.vitepress/config.ts
📚 Learning: 2026-01-14T00:09:27.486Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 156
File: packages/riviere-extract-config/src/types.ts:71-75
Timestamp: 2026-01-14T00:09:27.486Z
Learning: In packages/riviere-extract-config/src/types.ts, the ExtractionConfig interface represents the post-expansion state where all $ref module references have been resolved to ModuleConfig entries. The extraction-config.schema.json allows both ModuleConfig and ModuleRef in the modules array because it validates raw input before expandModuleRefs runs, but after expansion, modules are always ModuleConfig[], so the TypeScript type correctly models this expanded state.

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-06T23:01:34.751Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-config/CLAUDE.md:0-0
Timestamp: 2026-01-06T23:01:34.751Z
Learning: Extraction config schemas must define all six required component types per module: api, useCase, domainOp, event, eventHandler, and ui. Unused component types must be explicitly marked with `notUsed: true` rather than omitted

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.{json,ts} : Define extraction configuration using the JSON Schema from `living-architecture/riviere-extract-config` DSL

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-06T23:01:34.751Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-config/CLAUDE.md:0-0
Timestamp: 2026-01-06T23:01:34.751Z
Learning: Applies to packages/riviere-extract-config/**/*.ts : Extraction config schema is the source of truth for valid structures. TypeScript types must mirror the schema definition to maintain consistency

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.ts : Use `living-architecture/riviere-extract-ts` TypeScript extractor with ts-morph for AST parsing when implementing TypeScript extraction for architecture schema components

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T07:05:01.766Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.766Z
Learning: Import and use the default extraction config from `living-architecture/riviere-extract-conventions/default-config` in extraction tooling to detect all 6 component types

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: All extraction rules should come from validated ExtractionConfig provided by riviere-extract-config

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.ts : Use the Rivière Builder Node.js library to programmatically construct the schema graph when implementing custom extraction code

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-13T11:37:59.334Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-13T11:37:59.334Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*.{ts,tsx} : Apply decorators from `living-architecture/riviere-extract-conventions` to mark all classes as architectural components

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.{ts,tsx} : Reject invalid extraction configs at load time, not during extraction phase

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-11T23:03:06.868Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 130
File: apps/docs/extract/deterministic/typescript/getting-started.md:8-8
Timestamp: 2026-01-11T23:03:06.868Z
Learning: In Markdown documentation files, when stating Node.js requirements, clearly distinguish between the minimum supported version (as per package.json engines) and the recommended/CI-tested version stated in prerequisites. Apply this pattern to similar docs under apps/docs to avoid confusion and maintain consistency across the repository.

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: main
  • GitHub Check: browser-tests (webkit)
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (3)
apps/docs/reference/extraction-config/schema.md (2)

22-30: Good addition documenting module references.

The moduleRef section clearly documents the $ref pattern for external module definitions, which aligns with the schema's support for modular extraction configs.


51-51: LGTM! New customTypes property extends schema flexibility.

The addition of customTypes enables user-defined component types beyond the six built-in types (api, useCase, domainOp, event, eventHandler, ui). Consider adding a cross-reference to documentation explaining the expected structure of custom type definitions if such documentation exists.

apps/docs/.vitepress/config.ts (1)

108-135: LGTM! API sidebar structure follows VitePress conventions.

The new /api/ sidebar fulfills the PR objective of adding left navigation for API pages. The two-group structure (riviere-builder and riviere-query) is well-organized, and all referenced documentation files exist at the configured paths.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment thread apps/docs/reference/extraction-config/schema.md Outdated
getTypeString() now correctly renders array items with oneOf (e.g.,
`(module | moduleRef)[]`) instead of showing `undefined[]`.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5e63666 and 1e778f2.

⛔ Files ignored due to path filters (1)
  • packages/riviere-extract-config/docs/generated/schema.md is excluded by !**/generated/**
📒 Files selected for processing (2)
  • apps/docs/reference/extraction-config/schema.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
🧰 Additional context used
📓 Path-based instructions (4)
packages/riviere-extract-config/**/*.ts

📄 CodeRabbit inference engine (packages/riviere-extract-config/CLAUDE.md)

Extraction config schema is the source of truth for valid structures. TypeScript types must mirror the schema definition to maintain consistency

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
**/*.{js,mjs,ts,tsx,json}

📄 CodeRabbit inference engine (CLAUDE.md)

Always use nx commands for build, test, lint operations. Do not run npm/pnpm directly in project folders

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx}: Use cross-project imports with package names (e.g., import { X } from '@living-architecture/[pkg-name]'), not relative paths
When adding dependencies between projects, add "@living-architecture/[pkg-name]": "workspace:*" to the consuming project's package.json
Follow docs/conventions/software-design.md when writing, editing, refactoring, or reviewing code
Look for and follow standard implementation patterns defined in docs/conventions/standard-patterns.md
Avoid anti-patterns documented in @docs/conventions/anti-patterns.md
Follow docs/conventions/testing.md when writing tests. 100% test coverage is mandatory and enforced

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx,js,jsx}: Never commit secrets, API keys, or credentials. Use environment variables for sensitive configuration
Do not log sensitive data (passwords, tokens, PII). Validate and sanitize all external input

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
🧠 Learnings (21)
📚 Learning: 2026-01-14T00:09:27.486Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 156
File: packages/riviere-extract-config/src/types.ts:71-75
Timestamp: 2026-01-14T00:09:27.486Z
Learning: In packages/riviere-extract-config/src/types.ts, the ExtractionConfig interface represents the post-expansion state where all $ref module references have been resolved to ModuleConfig entries. The extraction-config.schema.json allows both ModuleConfig and ModuleRef in the modules array because it validates raw input before expandModuleRefs runs, but after expansion, modules are always ModuleConfig[], so the TypeScript type correctly models this expanded state.

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-06T23:01:34.751Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-config/CLAUDE.md:0-0
Timestamp: 2026-01-06T23:01:34.751Z
Learning: Extraction config schemas must define all six required component types per module: api, useCase, domainOp, event, eventHandler, and ui. Unused component types must be explicitly marked with `notUsed: true` rather than omitted

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.{json,ts} : Define extraction configuration using the JSON Schema from `living-architecture/riviere-extract-config` DSL

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-06T23:01:34.751Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-config/CLAUDE.md:0-0
Timestamp: 2026-01-06T23:01:34.751Z
Learning: Applies to packages/riviere-extract-config/**/*.ts : Extraction config schema is the source of truth for valid structures. TypeScript types must mirror the schema definition to maintain consistency

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-07T08:54:48.071Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/workflow/code-review.md:0-0
Timestamp: 2026-01-07T08:54:48.071Z
Learning: Applies to docs/workflow/**/*.{ts,tsx,js,jsx} : Review usage of `/* v8 ignore next -- preserve */` coverage skip directives. This is only acceptable for unreachable code needed to satisfy the compiler. Most cases should be solved by extracting code or writing tests to mock behavior.

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-10T19:16:48.557Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 120
File: docs/workflow/parallel-workflow.md:160-281
Timestamp: 2026-01-10T19:16:48.557Z
Learning: In the NTCoding/living-architecture repository, design and investigation documents (such as those in docs/workflow/) can reference scripts, commands, or features that don't yet exist in the codebase. These references serve as specifications for future implementation tasks, not documentation of current capabilities. This is acceptable when the PR scope is research/design rather than implementation.

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T07:05:01.766Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.766Z
Learning: Import and use the default extraction config from `living-architecture/riviere-extract-conventions/default-config` in extraction tooling to detect all 6 component types

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.ts : Use `living-architecture/riviere-extract-ts` TypeScript extractor with ts-morph for AST parsing when implementing TypeScript extraction for architecture schema components

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: All extraction rules should come from validated ExtractionConfig provided by riviere-extract-config

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.ts : Use the Rivière Builder Node.js library to programmatically construct the schema graph when implementing custom extraction code

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-13T11:37:59.334Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-13T11:37:59.334Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*.{ts,tsx} : Apply decorators from `living-architecture/riviere-extract-conventions` to mark all classes as architectural components

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.{ts,tsx} : Reject invalid extraction configs at load time, not during extraction phase

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-11T23:03:06.868Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 130
File: apps/docs/extract/deterministic/typescript/getting-started.md:8-8
Timestamp: 2026-01-11T23:03:06.868Z
Learning: In Markdown documentation files, when stating Node.js requirements, clearly distinguish between the minimum supported version (as per package.json engines) and the recommended/CI-tested version stated in prerequisites. Apply this pattern to similar docs under apps/docs to avoid confusion and maintain consistency across the repository.

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-02T11:58:27.018Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-cli/CLAUDE.md:0-0
Timestamp: 2026-01-02T11:58:27.018Z
Learning: After modifying CLI commands, run `nx generate-docs riviere-cli` to regenerate CLI reference documentation

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.{ts,tsx} : Use ts-morph for TypeScript AST parsing instead of other parsers

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.test.{ts,tsx} : Implement integration tests for end-to-end extraction from TypeScript code to JSON output

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.{ts,tsx} : Implement extraction logic as pure functions with no side effects

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T07:05:01.766Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.766Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `Custom(type)` decorator to annotate components with custom types not covered by standard decorators

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.test.{ts,tsx} : Implement unit tests for each predicate type in isolation with positive and negative cases

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-11T18:47:09.232Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 129
File: apps/eclair/src/components/SchemaModal/SchemaModal.cssModule.spec.ts:13-19
Timestamp: 2026-01-11T18:47:09.232Z
Learning: Encourage using const for declarations by default in TypeScript/JavaScript files and only use let when a variable must be reassigned. Do not rely on var. This improves immutability and clarity. If a variable needs mutation (e.g., counters in loops, reassigned values), use let, but prefer const whenever possible and refactor reassigned logic to avoid mutations where feasible.

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: main
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (2)
packages/riviere-extract-config/scripts/generate-docs.ts (1)

90-94: Good fix for the oneOf array items type rendering.

This correctly handles the case where array items are defined with oneOf (union types), resolving the undefined[] rendering bug discussed in past review comments. The implementation is consistent with how other union types are formatted in the codebase (line 88).

apps/docs/reference/extraction-config/schema.md (1)

18-31: Generated output correctly reflects the schema union type.

The modules field now properly displays the union type (module | moduleRef)[], resolving the previous undefined[] rendering issue. The new moduleRef section is properly documented with the required $ref property.

This aligns with the learned schema behavior where the extraction config supports both inline modules and external module references. Based on learnings, the schema allows both ModuleConfig and ModuleRef in the modules array before expansion.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment thread apps/docs/reference/extraction-config/schema.md Outdated
…ects

getTypeString() now renders `Record<string, T>` for objects with
additionalProperties that reference another type (e.g., customTypes
now shows `Record<string, detectionRule>` instead of `object`).

Co-Authored-By: Claude Opus 4.5 <[email protected]>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1e778f2 and a687ef9.

⛔ Files ignored due to path filters (1)
  • packages/riviere-extract-config/docs/generated/schema.md is excluded by !**/generated/**
📒 Files selected for processing (2)
  • apps/docs/reference/extraction-config/schema.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
🧰 Additional context used
📓 Path-based instructions (4)
packages/riviere-extract-config/**/*.ts

📄 CodeRabbit inference engine (packages/riviere-extract-config/CLAUDE.md)

Extraction config schema is the source of truth for valid structures. TypeScript types must mirror the schema definition to maintain consistency

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
**/*.{js,mjs,ts,tsx,json}

📄 CodeRabbit inference engine (CLAUDE.md)

Always use nx commands for build, test, lint operations. Do not run npm/pnpm directly in project folders

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx}: Use cross-project imports with package names (e.g., import { X } from '@living-architecture/[pkg-name]'), not relative paths
When adding dependencies between projects, add "@living-architecture/[pkg-name]": "workspace:*" to the consuming project's package.json
Follow docs/conventions/software-design.md when writing, editing, refactoring, or reviewing code
Look for and follow standard implementation patterns defined in docs/conventions/standard-patterns.md
Avoid anti-patterns documented in @docs/conventions/anti-patterns.md
Follow docs/conventions/testing.md when writing tests. 100% test coverage is mandatory and enforced

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx,js,jsx}: Never commit secrets, API keys, or credentials. Use environment variables for sensitive configuration
Do not log sensitive data (passwords, tokens, PII). Validate and sanitize all external input

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
🧠 Learnings (23)
📚 Learning: 2026-01-14T00:09:27.486Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 156
File: packages/riviere-extract-config/src/types.ts:71-75
Timestamp: 2026-01-14T00:09:27.486Z
Learning: In packages/riviere-extract-config/src/types.ts, the ExtractionConfig interface represents the post-expansion state where all $ref module references have been resolved to ModuleConfig entries. The extraction-config.schema.json allows both ModuleConfig and ModuleRef in the modules array because it validates raw input before expandModuleRefs runs, but after expansion, modules are always ModuleConfig[], so the TypeScript type correctly models this expanded state.

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-06T23:01:34.751Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-config/CLAUDE.md:0-0
Timestamp: 2026-01-06T23:01:34.751Z
Learning: Extraction config schemas must define all six required component types per module: api, useCase, domainOp, event, eventHandler, and ui. Unused component types must be explicitly marked with `notUsed: true` rather than omitted

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.{json,ts} : Define extraction configuration using the JSON Schema from `living-architecture/riviere-extract-config` DSL

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-06T23:01:34.751Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-config/CLAUDE.md:0-0
Timestamp: 2026-01-06T23:01:34.751Z
Learning: Applies to packages/riviere-extract-config/**/*.ts : Extraction config schema is the source of truth for valid structures. TypeScript types must mirror the schema definition to maintain consistency

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.{ts,tsx} : Use glob pattern matching for module-based organization of extraction rules

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-07T08:54:48.071Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/workflow/code-review.md:0-0
Timestamp: 2026-01-07T08:54:48.071Z
Learning: Applies to docs/workflow/**/*.{ts,tsx,js,jsx} : Review usage of `/* v8 ignore next -- preserve */` coverage skip directives. This is only acceptable for unreachable code needed to satisfy the compiler. Most cases should be solved by extracting code or writing tests to mock behavior.

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-10T19:16:48.557Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 120
File: docs/workflow/parallel-workflow.md:160-281
Timestamp: 2026-01-10T19:16:48.557Z
Learning: In the NTCoding/living-architecture repository, design and investigation documents (such as those in docs/workflow/) can reference scripts, commands, or features that don't yet exist in the codebase. These references serve as specifications for future implementation tasks, not documentation of current capabilities. This is acceptable when the PR scope is research/design rather than implementation.

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.ts : Use `living-architecture/riviere-extract-ts` TypeScript extractor with ts-morph for AST parsing when implementing TypeScript extraction for architecture schema components

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.ts : Use the Rivière Builder Node.js library to programmatically construct the schema graph when implementing custom extraction code

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-11T14:38:35.637Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 129
File: packages/riviere-cli/src/commands/extract/config-loader.ts:31-39
Timestamp: 2026-01-11T14:38:35.637Z
Learning: In packages/riviere-cli/src/commands/extract/config-loader.ts, the isExtendedConfig type guard intentionally performs minimal validation (checks for non-null object and validates modules is an array if present) because comprehensive validation is handled downstream by the schema validator. The type guard's purpose is basic type narrowing to support both module-array and top-level-rules formats, not comprehensive validation. This follows the layered validation pattern where type guards are minimal and schema validation occurs at system boundaries.

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T07:05:01.766Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.766Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `Custom(type)` decorator to annotate components with custom types not covered by standard decorators

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T07:05:01.766Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.766Z
Learning: Import and use the default extraction config from `living-architecture/riviere-extract-conventions/default-config` in extraction tooling to detect all 6 component types

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: All extraction rules should come from validated ExtractionConfig provided by riviere-extract-config

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-13T11:37:59.334Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-13T11:37:59.334Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*.{ts,tsx} : Apply decorators from `living-architecture/riviere-extract-conventions` to mark all classes as architectural components

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.{ts,tsx} : Reject invalid extraction configs at load time, not during extraction phase

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-11T23:03:06.868Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 130
File: apps/docs/extract/deterministic/typescript/getting-started.md:8-8
Timestamp: 2026-01-11T23:03:06.868Z
Learning: In Markdown documentation files, when stating Node.js requirements, clearly distinguish between the minimum supported version (as per package.json engines) and the recommended/CI-tested version stated in prerequisites. Apply this pattern to similar docs under apps/docs to avoid confusion and maintain consistency across the repository.

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 Learning: 2026-01-08T23:16:02.639Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/software-design.md:0-0
Timestamp: 2026-01-08T23:16:02.639Z
Learning: Applies to docs/conventions/**/*.{ts,tsx} : Wrap all primitives and strings. Create value objects, encapsulate validation logic, and make domain concepts explicit.

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.{ts,tsx} : Use ts-morph for TypeScript AST parsing instead of other parsers

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-02T17:46:32.292Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/standard-patterns.md:0-0
Timestamp: 2026-01-02T17:46:32.292Z
Learning: Applies to docs/conventions/**/*.{ts,tsx} : Use Zod for creating branded types

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T23:16:02.639Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/software-design.md:0-0
Timestamp: 2026-01-08T23:16:02.639Z
Learning: Applies to docs/conventions/**/*.{ts,tsx} : Use Zod for runtime validation. In TypeScript, use Zod schemas for parsing external data, API responses, and user input. Type inference from schemas keeps types and validation in sync.

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-02T11:58:27.018Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-cli/CLAUDE.md:0-0
Timestamp: 2026-01-02T11:58:27.018Z
Learning: After modifying CLI commands, run `nx generate-docs riviere-cli` to regenerate CLI reference documentation

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-11T18:47:09.232Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 129
File: apps/eclair/src/components/SchemaModal/SchemaModal.cssModule.spec.ts:13-19
Timestamp: 2026-01-11T18:47:09.232Z
Learning: Encourage using const for declarations by default in TypeScript/JavaScript files and only use let when a variable must be reassigned. Do not rely on var. This improves immutability and clarity. If a variable needs mutation (e.g., counters in loops, reassigned values), use let, but prefer const whenever possible and refactor reassigned logic to avoid mutations where feasible.

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: main
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (5)
packages/riviere-extract-config/scripts/generate-docs.ts (2)

33-33: LGTM!

The additionalProperties type correctly models JSON Schema's flexibility—it can be either a nested schema object or a boolean (e.g., false to disallow extra properties).


91-94: LGTM!

The added handling for oneOf inside array items correctly renders union types with parentheses for proper grouping (e.g., (module | moduleRef)[]). This addresses the documentation rendering for the updated modules schema.

apps/docs/reference/extraction-config/schema.md (3)

18-18: Type rendering fixed.

The modules field now correctly displays the union type (module | moduleRef)[], addressing the previously flagged undefined[] issue. This accurately reflects the schema's support for both inline module definitions and external module references.


22-31: LGTM!

The new moduleRef section clearly documents the external module reference capability with accurate property information. The description appropriately notes that paths are relative to the config file.


51-51: Record type rendering implemented.

The customTypes property now correctly shows Record<string, detectionRule> instead of a generic object type. This provides users with clear type information about the expected structure. This addresses the past review feedback about improving documentation for additionalProperties with $ref.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment thread packages/riviere-extract-config/scripts/generate-docs.ts
Extract formatArrayType and formatRecordType helpers to reduce
getTypeString complexity. Now handles simple typed additionalProperties
(e.g., `Record<string, string>` instead of `Record<string, unknown>`).

Co-Authored-By: Claude Opus 4.5 <[email protected]>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@packages/riviere-extract-config/scripts/generate-docs.ts`:
- Around line 84-88: The array formatting breaks markdown when items.oneOf is
used because formatOneOfType returns backtick-wrapped alternatives and
formatArrayType then wraps that whole parenthesized string with [] outside the
backticks; fix formatArrayType so it builds a single backtick-wrapped array type
string: call formatOneOfType(items), strip any backticks from its returned
string (and trim), then return a template like `\`${(strippedOneOf)}[]\``; keep
the existing branches for items.$ref (using getRefTypeName) and fallback to
items.type but ensure the final array type is always wrapped in a single pair of
backticks.
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a687ef9 and 05d58ad.

📒 Files selected for processing (1)
  • packages/riviere-extract-config/scripts/generate-docs.ts
🧰 Additional context used
📓 Path-based instructions (4)
packages/riviere-extract-config/**/*.ts

📄 CodeRabbit inference engine (packages/riviere-extract-config/CLAUDE.md)

Extraction config schema is the source of truth for valid structures. TypeScript types must mirror the schema definition to maintain consistency

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
**/*.{js,mjs,ts,tsx,json}

📄 CodeRabbit inference engine (CLAUDE.md)

Always use nx commands for build, test, lint operations. Do not run npm/pnpm directly in project folders

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx}: Use cross-project imports with package names (e.g., import { X } from '@living-architecture/[pkg-name]'), not relative paths
When adding dependencies between projects, add "@living-architecture/[pkg-name]": "workspace:*" to the consuming project's package.json
Follow docs/conventions/software-design.md when writing, editing, refactoring, or reviewing code
Look for and follow standard implementation patterns defined in docs/conventions/standard-patterns.md
Avoid anti-patterns documented in @docs/conventions/anti-patterns.md
Follow docs/conventions/testing.md when writing tests. 100% test coverage is mandatory and enforced

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx,js,jsx}: Never commit secrets, API keys, or credentials. Use environment variables for sensitive configuration
Do not log sensitive data (passwords, tokens, PII). Validate and sanitize all external input

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
🧠 Learnings (11)
📚 Learning: 2026-01-06T23:01:34.751Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-config/CLAUDE.md:0-0
Timestamp: 2026-01-06T23:01:34.751Z
Learning: Applies to packages/riviere-extract-config/**/*.ts : Extraction config schema is the source of truth for valid structures. TypeScript types must mirror the schema definition to maintain consistency

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.ts : Use `living-architecture/riviere-extract-ts` TypeScript extractor with ts-morph for AST parsing when implementing TypeScript extraction for architecture schema components

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.ts : Use the Rivière Builder Node.js library to programmatically construct the schema graph when implementing custom extraction code

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T07:05:01.766Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.766Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `Custom(type)` decorator to annotate components with custom types not covered by standard decorators

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*extract*.{json,ts} : Define extraction configuration using the JSON Schema from `living-architecture/riviere-extract-config` DSL

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-14T00:09:27.486Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 156
File: packages/riviere-extract-config/src/types.ts:71-75
Timestamp: 2026-01-14T00:09:27.486Z
Learning: In packages/riviere-extract-config/src/types.ts, the ExtractionConfig interface represents the post-expansion state where all $ref module references have been resolved to ModuleConfig entries. The extraction-config.schema.json allows both ModuleConfig and ModuleRef in the modules array because it validates raw input before expandModuleRefs runs, but after expansion, modules are always ModuleConfig[], so the TypeScript type correctly models this expanded state.

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T17:19:17.148Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Applies to packages/riviere-extract-ts/**/*.{ts,tsx} : Use ts-morph for TypeScript AST parsing instead of other parsers

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T22:20:13.250Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Applies to docs/architecture/**/*.{ts,tsx} : Apply decorators from `living-architecture/riviere-extract-conventions` to mark all classes as architectural components

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-08T23:16:02.639Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/software-design.md:0-0
Timestamp: 2026-01-08T23:16:02.639Z
Learning: Applies to docs/conventions/**/*.{ts,tsx} : Wrap all primitives and strings. Create value objects, encapsulate validation logic, and make domain concepts explicit.

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-02T11:58:27.018Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-cli/CLAUDE.md:0-0
Timestamp: 2026-01-02T11:58:27.018Z
Learning: After modifying CLI commands, run `nx generate-docs riviere-cli` to regenerate CLI reference documentation

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
📚 Learning: 2026-01-11T18:47:09.232Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 129
File: apps/eclair/src/components/SchemaModal/SchemaModal.cssModule.spec.ts:13-19
Timestamp: 2026-01-11T18:47:09.232Z
Learning: Encourage using const for declarations by default in TypeScript/JavaScript files and only use let when a variable must be reassigned. Do not rely on var. This improves immutability and clarity. If a variable needs mutation (e.g., counters in loops, reassigned values), use let, but prefer const whenever possible and refactor reassigned logic to avoid mutations where feasible.

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: main
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (5)
packages/riviere-extract-config/scripts/generate-docs.ts (5)

33-33: LGTM on the interface extension.

The additionalProperties field correctly models JSON Schema's additionalProperties which can be either a schema object or a boolean. This aligns with the schema definition being the source of truth. Based on learnings, extraction config schema is the source of truth and TypeScript types must mirror it.


90-95: LGTM on the Record type helper.

The implementation correctly handles both $ref references and simple types via additionalProperties.type ?? 'unknown', addressing the previous review feedback. The output format `Record<string, T>` is consistent with other type renderings.


104-112: Good refactoring to use helper functions.

The delegation to formatArrayType and formatRecordType improves readability and centralizes type formatting logic. The condition on line 110 correctly guards against boolean additionalProperties by checking typeof prop.additionalProperties === 'object'.


295-323: Verified: Auto-generated notice removed from predicate reference.

The generatePredicatesReference function now starts directly with the frontmatter and title without the auto-generated banner, aligning with the PR objective to remove notices for cleaner UX.


325-366: Verified: Auto-generated notice removed from schema reference.

The generateSchemaReference function similarly starts with frontmatter and title, consistent with the predicate reference and the PR's goal of standardizing documentation format.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment thread packages/riviere-extract-config/scripts/generate-docs.ts
Extract raw type names to shared helper, wrap properly in formatArrayType
to produce valid markdown like `(module \| moduleRef)[]` instead of broken
output with backticks inside parentheses.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
NTCoding and others added 5 commits January 14, 2026 19:54
Users clicking RiviereBuilder/RiviereQuery/Types from Reference section
navigate to /api/generated/... but saw a minimal sidebar missing
Overview, ID Generation, Validation Rules, Error Messages.

Updated /api/ sidebar to mirror the Library API section for consistent
navigation experience across both path prefixes.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Users clicking RiviereBuilder/RiviereQuery/Types from Reference section
lost the full Reference sidebar because those pages were under /api/
which had its own sidebar config.

Moved TypeDoc generated docs from /api/generated/ to /reference/api/generated/
so they share the /reference/ sidebar and navigation stays consistent.

Updated markdownlint ignore pattern to match new location.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Updated typedoc.json configs to output to /reference/api/generated/
and fixed all links in reference/api/index.md to use the new path.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Added typedoc-plugin-frontmatter to inject `pageClass: reference`
frontmatter into all TypeDoc-generated API documentation pages.
This applies the same CSS styling as CLI and extraction-config
reference pages for visual consistency.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
@sonarqubecloud

Copy link
Copy Markdown

@NTCoding
NTCoding merged commit 59183da into main Jan 14, 2026
24 of 25 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix documentation navigation and consistency issues

1 participant