Skip to content

docs(extraction): add comprehensive deterministic extraction docs - #130

Merged
NTCoding merged 17 commits into
mainfrom
issue-50-m5-d5-3-create-public-docs-for
Jan 13, 2026
Merged

NTCoding merged 17 commits into
mainfrom
issue-50-m5-d5-3-create-public-docs-for

Conversation

@NTCoding

@NTCoding NTCoding commented Jan 11, 2026 •

Copy link
Copy Markdown
Owner

User description

Closes #50

Summary

Adds complete public documentation for deterministic TypeScript extraction to the living-architecture documentation website.

Changes

  • Deterministic extraction overview (/extract/deterministic/)

    • Comparison with AI-assisted extraction
    • When to use deterministic vs AI-assisted approaches
    • TypeScript extractor architecture
  • TypeScript guides (/extract/deterministic/typescript/)

    • Getting started tutorial with decorator examples
    • Complete decorator reference (all 10 decorators)
    • ESLint enforcement setup and configuration
    • Real-world examples
  • Reference documentation (/reference/extraction-config/)

    • Config schema reference (auto-generated from JSON Schema)
    • Predicate reference with all 8 predicate types
    • Documentation generator script for automation
  • Supporting assets

    • SVG diagram for extraction-enforcement cycle
    • Updated navigation sidebar
    • Cross-links between related sections

Test Plan

  • Documentation generator produces correct markdown
  • check-generated-docs task passes
  • All markdown lints pass
  • Sidebar navigation includes new sections
  • Cross-links work correctly

🤖 Generated with Claude Code


PR Type

Documentation


Description

  • Comprehensive deterministic extraction documentation for the living-architecture documentation website, addressing issue [M5-D5.3] Create public docs for deterministic extraction #50

  • Auto-generation infrastructure for extraction config documentation with TypeScript script that generates markdown from JSON Schema definitions

  • Deterministic extraction overview and guides covering concepts, TypeScript implementation, decorators, getting started tutorial, real-world examples, and enforcement strategies

  • Reference documentation including auto-generated predicate and schema references with cross-links

  • Navigation updates to VitePress sidebar with new sections for deterministic extraction and extraction config reference

  • Homepage updates reflecting flexible extraction approach and new extraction-related packages

  • Build configuration changes to copy generated documentation files during build and dev processes

  • API documentation updates with refreshed line number references due to source code changes and updated @types/node dependency version from 20.19.9 to 24.10.6


Diagram Walkthrough

flowchart LR
  A["JSON Schema<br/>Definitions"] -->|"generate-docs<br/>script"| B["Auto-generated<br/>Markdown Docs"]
  B --> C["Predicate<br/>Reference"]
  B --> D["Schema<br/>Reference"]
  E["TypeScript<br/>Guides"] --> F["Getting Started"]
  E --> G["Decorators"]
  E --> H["Examples"]
  E --> I["Enforcement"]
  J["Deterministic<br/>Extraction<br/>Overview"] --> K["Enforcement<br/>Principles"]
  F --> C
  G --> F
  H --> G
  I --> K
  C --> L["Public Docs<br/>Site"]
  D --> L
  J --> L
  F --> L
Loading

File Walkthrough

Relevant files
Documentation
56 files
generate-docs.ts
Auto-generation script for extraction config documentation

packages/riviere-extract-config/scripts/generate-docs.ts

  • New TypeScript script that auto-generates markdown documentation from
    JSON Schema definitions
  • Generates two reference documents: predicate reference and schema
    reference
  • Implements schema traversal, type formatting, and markdown table
    generation
  • Includes type guards and helper functions for safe schema processing
+326/-0 
generate-docs.d.ts
Type declarations for documentation generator                       

packages/riviere-extract-config/scripts/generate-docs.d.ts

  • New TypeScript declaration file for the generate-docs script
  • Provides type definitions for the documentation generator
+10/-0   
examples.md
Real-world extraction configuration examples                         

apps/docs/extract/deterministic/typescript/examples.md

  • Comprehensive guide with 6 real-world extraction config examples
  • Covers NestJS, Domain-Driven Design, JSDoc-based, naming convention,
    and multi-module projects
  • Each example includes YAML config and TypeScript code samples
  • Links to ecommerce demo app and reference documentation
+343/-0 
decorators.md
TypeScript decorator reference and usage guide                     

apps/docs/extract/deterministic/typescript/decorators.md

  • Complete reference for 11 TypeScript decorators across 4 categories
  • Documents container decorators, class-as-component decorators,
    method-level decorators, and others
  • Includes usage examples for each decorator and decision table for when
    to use which
  • References enforcement guide and other related documentation
+237/-0 
getting-started.md
Getting started tutorial for TypeScript extraction             

apps/docs/extract/deterministic/typescript/getting-started.md

  • 10-minute tutorial for TypeScript extraction setup
  • Covers prerequisites, code annotation with decorators, config usage,
    and extraction execution
  • Includes step-by-step instructions with code examples and expected
    output
  • Links to customization, enforcement, and demo application resources
+185/-0 
enforcement.md
ESLint enforcement setup for architectural decorators       

apps/docs/extract/deterministic/typescript/enforcement.md

  • Guide for ESLint-based enforcement of component decorators
  • Explains why enforcement matters and provides ESLint configuration
    examples
  • Documents valid decorators, violation examples, CI integration, and
    error messages
  • Links to enforcement concepts and related guides
+163/-0 
enforcement.md
Enforcement principles for deterministic extraction           

apps/docs/extract/deterministic/enforcement.md

  • Language-agnostic enforcement principles and patterns
  • Describes extraction-enforcement cycle with diagram reference
  • Documents 4 enforcement approaches: static analysis, architecture
    tests, CI gates, code review
  • Includes language-specific implementation table and
    TypeScript-specific guidance
+127/-0 
index.md
Deterministic extraction overview and concepts                     

apps/docs/extract/deterministic/index.md

  • Overview of deterministic extraction approach and when to use it
  • Explains how it works: config DSL, language-specific extractors, draft
    components
  • Compares with AI-assisted extraction and documents modular
    architecture
  • Links to TypeScript implementation, enforcement, and reference
    documentation
+93/-0   
predicates.md
Auto-generated predicate reference documentation                 

packages/riviere-extract-config/docs/generated/predicates.md

  • Auto-generated predicate reference documentation
  • Documents 9 predicates with descriptions and parameter tables
  • Includes overview table and detailed sections for each predicate type
  • Contains cross-links to schema reference and getting started guide
+120/-0 
predicates.md
Public predicate reference documentation                                 

apps/docs/reference/extraction-config/predicates.md

  • Auto-generated predicate reference for public documentation site
  • Mirrors the generated predicates documentation with overview and
    detailed sections
  • Documents all 9 predicates with parameter specifications
  • Includes links to schema reference and TypeScript getting started
+120/-0 
schema.md
Auto-generated schema reference documentation                       

packages/riviere-extract-config/docs/generated/schema.md

  • Auto-generated extraction config schema reference
  • Documents root properties, module definitions, component rules, and
    detection rules
  • Includes property tables with type and requirement information
  • Contains cross-links to predicate reference and getting started guide
+87/-0   
schema.md
Public schema reference documentation                                       

apps/docs/reference/extraction-config/schema.md

  • Auto-generated schema reference for public documentation site
  • Mirrors the generated schema documentation with complete property
    specifications
  • Documents module structure, component rules, and detection rules
  • Includes links to predicate reference and TypeScript getting started
+87/-0   
index.md
Updated extraction overview with deterministic approach   

apps/docs/extract/index.md

  • Updated extraction overview to cover both AI-assisted and
    deterministic approaches
  • Added comparison table for when to use each method
  • Introduced enforcement concept and extraction-enforcement cycle
  • Reorganized content with clearer section headers and cross-links
+31/-10 
cli-reference.md
CLI reference updates for extraction commands                       

apps/docs/reference/cli/cli-reference.md

  • Added new "Extract Commands" section documenting riviere extract
    command
  • Documents --config and --dry-run flags for extraction
  • Added --event-schema flag to builder add-component command
  • Updated examples to show event schema usage
+29/-7   
RiviereQuery.md
Updated API documentation line references                               

apps/docs/api/generated/riviere-query/classes/RiviereQuery.md

  • Updated line number references throughout due to source code changes
  • All method and property definitions point to new line numbers in
    RiviereQuery.ts
  • Changes reflect code additions in the source file (approximately 69
    lines added)
+32/-32 
RiviereBuilder.md
Updated builder API documentation line references               

apps/docs/api/generated/riviere-builder/classes/RiviereBuilder.md

  • Updated line number references throughout due to source code changes
  • All method and property definitions point to new line numbers in
    builder.ts
  • Changes reflect code additions in the source file (approximately 16
    lines added)
+15/-15 
ComponentCounts.md
Updated ComponentCounts interface documentation                   

apps/docs/api/generated/riviere-query/interfaces/ComponentCounts.md

  • Updated line number references due to source code changes in
    domain-types.ts
  • All interface properties point to new line numbers (approximately 2
    lines added)
+9/-9     
InvalidEnrichmentTargetError.md
Updated error class documentation and dependencies             

apps/docs/api/generated/riviere-builder/classes/InvalidEnrichmentTargetError.md

  • Updated line number references in errors.ts (approximately 2 lines
    added)
  • Updated @types/node dependency reference from version 20.19.9 to
    24.10.6
+7/-7     
GraphStats.md
Updated GraphStats interface documentation                             

apps/docs/api/generated/riviere-query/interfaces/GraphStats.md

  • Updated line number references due to source code changes in
    domain-types.ts
  • All interface properties point to new line numbers (approximately 2
    lines added)
+7/-7     
CustomTypeAlreadyDefinedError.md
Updated custom type error documentation                                   

apps/docs/api/generated/riviere-builder/classes/CustomTypeAlreadyDefinedError.md

  • Updated line number references in errors.ts (approximately 2 lines
    added)
  • Updated @types/node dependency reference from version 20.19.9 to
    24.10.6
+6/-6     
DiffStats.md
Updated DiffStats interface documentation                               

apps/docs/api/generated/riviere-query/interfaces/DiffStats.md

  • Updated line number references due to source code changes in
    domain-types.ts
  • All interface properties point to new line numbers (approximately 2
    lines added)
+6/-6     
FlowStep.md
Updated FlowStep interface documentation                                 

apps/docs/api/generated/riviere-query/interfaces/FlowStep.md

  • Updated line number references due to source code changes in
    domain-types.ts
  • All interface properties point to new line numbers (approximately 2
    lines added)
+5/-5     
DomainConnection.md
Updated DomainConnection interface documentation                 

apps/docs/api/generated/riviere-query/interfaces/DomainConnection.md

  • Updated line number references due to source code changes in
    domain-types.ts
  • All interface properties point to new line numbers (approximately 2
    lines added)
+5/-5     
ComponentModification.md
Updated ComponentModification interface documentation       

apps/docs/api/generated/riviere-query/interfaces/ComponentModification.md

  • Updated line number references due to source code changes in
    domain-types.ts
  • All interface properties point to new line numbers (approximately 2
    lines added)
+5/-5     
Domain.md
Updated Domain interface documentation                                     

apps/docs/api/generated/riviere-query/interfaces/Domain.md

  • Updated line number references due to source code changes in
    domain-types.ts
  • All interface properties point to new line numbers (approximately 2
    lines added)
+5/-5     
ExternalDomain.md
Updated ExternalDomain interface documentation                     

apps/docs/api/generated/riviere-query/interfaces/ExternalDomain.md

  • Updated line number references due to source code changes in
    domain-types.ts
  • All interface properties point to new line numbers (approximately 2
    lines added)
+4/-4     
ValidationError.md
Updated ValidationError interface documentation                   

apps/docs/api/generated/riviere-query/interfaces/ValidationError.md

  • Updated line number references due to source code changes in
    domain-types.ts
  • All interface properties point to new line numbers (approximately 2
    lines added)
+4/-4     
SearchWithFlowOptions.md
Updated SearchWithFlowOptions interface documentation       

apps/docs/api/generated/riviere-query/interfaces/SearchWithFlowOptions.md

  • Updated line number references due to source code changes in
    flow-queries.ts
  • All interface properties point to new line numbers (approximately 41
    lines added)
+2/-2     
GraphDiff.md
Update GraphDiff interface line number references               

apps/docs/api/generated/riviere-query/interfaces/GraphDiff.md

  • Updated line number references in documentation links from
    domain-types.ts:149 to domain-types.ts:151
  • Adjusted all property definition line numbers by +2 to reflect source
    code changes
  • Maintained all interface documentation and descriptions
+4/-4     
SearchWithFlowResult.md
Update SearchWithFlowResult interface line references       

apps/docs/api/generated/riviere-query/interfaces/SearchWithFlowResult.md

  • Updated line number references in documentation links from
    domain-types.ts:200 to domain-types.ts:202
  • Adjusted property definition line numbers by +2 for matchingIds and
    visibleIds
  • Reflects source code line shifts in domain types
+3/-3     
CrossDomainLink.md
Update CrossDomainLink interface line references                 

apps/docs/api/generated/riviere-query/interfaces/CrossDomainLink.md

  • Updated line number references in documentation links from
    domain-types.ts:210 to domain-types.ts:212
  • Adjusted property definition line numbers by +2 for all interface
    members
  • Reflects source code line shifts in domain types
+3/-3     
Flow.md
Update Flow interface line references                                       

apps/docs/api/generated/riviere-query/interfaces/Flow.md

  • Updated line number references in documentation links from
    domain-types.ts:190 to domain-types.ts:192
  • Adjusted property definition line numbers by +2 for entryPoint and
    steps
  • Reflects source code line shifts in domain types
+3/-3     
ValidationResult.md
Update ValidationResult interface line references               

apps/docs/api/generated/riviere-query/interfaces/ValidationResult.md

  • Updated line number references in documentation links from
    domain-types.ts:73 to domain-types.ts:75
  • Adjusted property definition line numbers by +2 for all interface
    members
  • Reflects source code line shifts in domain types
+3/-3     
index.md
Update homepage with flexible extraction and new packages

apps/docs/index.md

  • Changed feature title from AI-Assisted Extraction to Flexible
    Extraction
  • Updated feature description to mention both AI-assisted and
    config-based extraction approaches
  • Updated CLI package description from AI-assisted extraction to
    extraction and graph building
  • Added three new packages to the package table: riviere-extract-config,
    riviere-extract-conventions, and riviere-extract-ts
+6/-3     
findNearMatches.md
Update findNearMatches function line reference                     

apps/docs/api/generated/riviere-builder/functions/findNearMatches.md

  • Updated line number reference in documentation link from
    component-suggestion.ts:40 to component-suggestion.ts:55
  • Reflects source code line shift of +15 lines
+1/-1     
ValidationErrorCode.md
Update ValidationErrorCode type alias line reference         

apps/docs/api/generated/riviere-query/type-aliases/ValidationErrorCode.md

  • Updated line number reference in documentation link from
    domain-types.ts:56 to domain-types.ts:58
  • Reflects source code line shift of +2 lines
+1/-1     
parseComponentId.md
Update parseComponentId function line reference                   

apps/docs/api/generated/riviere-query/functions/parseComponentId.md

  • Updated line number reference in documentation link from
    domain-types.ts:270 to domain-types.ts:272
  • Reflects source code line shift of +2 lines
+1/-1     
parseDomainName.md
Update parseDomainName function line reference                     

apps/docs/api/generated/riviere-query/functions/parseDomainName.md

  • Updated line number reference in documentation link from
    domain-types.ts:300 to domain-types.ts:302
  • Reflects source code line shift of +2 lines
+1/-1     
parseEntityName.md
Update parseEntityName function line reference                     

apps/docs/api/generated/riviere-query/functions/parseEntityName.md

  • Updated line number reference in documentation link from
    domain-types.ts:290 to domain-types.ts:292
  • Reflects source code line shift of +2 lines
+1/-1     
parseEventId.md
Update parseEventId function line reference                           

apps/docs/api/generated/riviere-query/functions/parseEventId.md

  • Updated line number reference in documentation link from
    domain-types.ts:330 to domain-types.ts:332
  • Reflects source code line shift of +2 lines
+1/-1     
parseEventName.md
Update parseEventName function line reference                       

apps/docs/api/generated/riviere-query/functions/parseEventName.md

  • Updated line number reference in documentation link from
    domain-types.ts:340 to domain-types.ts:342
  • Reflects source code line shift of +2 lines
+1/-1     
parseHandlerId.md
Update parseHandlerId function line reference                       

apps/docs/api/generated/riviere-query/functions/parseHandlerId.md

  • Updated line number reference in documentation link from
    domain-types.ts:350 to domain-types.ts:352
  • Reflects source code line shift of +2 lines
+1/-1     
parseHandlerName.md
Update parseHandlerName function line reference                   

apps/docs/api/generated/riviere-query/functions/parseHandlerName.md

  • Updated line number reference in documentation link from
    domain-types.ts:360 to domain-types.ts:362
  • Reflects source code line shift of +2 lines
+1/-1     
parseLinkId.md
Update parseLinkId function line reference                             

apps/docs/api/generated/riviere-query/functions/parseLinkId.md

  • Updated line number reference in documentation link from
    domain-types.ts:280 to domain-types.ts:282
  • Reflects source code line shift of +2 lines
+1/-1     
parseOperationName.md
Update parseOperationName function line reference               

apps/docs/api/generated/riviere-query/functions/parseOperationName.md

  • Updated line number reference in documentation link from
    domain-types.ts:320 to domain-types.ts:322
  • Reflects source code line shift of +2 lines
+1/-1     
HandlerId.md
Update HandlerId type alias line reference                             

apps/docs/api/generated/riviere-query/type-aliases/HandlerId.md

  • Updated line number reference in documentation link from
    domain-types.ts:50 to domain-types.ts:52
  • Reflects source code line shift of +2 lines
+1/-1     
HandlerName.md
Update HandlerName type alias line reference                         

apps/docs/api/generated/riviere-query/type-aliases/HandlerName.md

  • Updated line number reference in documentation link from
    domain-types.ts:53 to domain-types.ts:55
  • Reflects source code line shift of +2 lines
+1/-1     
State.md
Update State type alias line reference                                     

apps/docs/api/generated/riviere-query/type-aliases/State.md

  • Updated line number reference in documentation link from
    domain-types.ts:38 to domain-types.ts:40
  • Reflects source code line shift of +2 lines
+1/-1     
ComponentId.md
Update ComponentId type alias line reference                         

apps/docs/api/generated/riviere-query/type-aliases/ComponentId.md

  • Updated line number reference in documentation link from
    domain-types.ts:26 to domain-types.ts:28
  • Reflects source code line shift of +2 lines
+1/-1     
DomainName.md
Update DomainName type alias line reference                           

apps/docs/api/generated/riviere-query/type-aliases/DomainName.md

  • Updated line number reference in documentation link from
    domain-types.ts:35 to domain-types.ts:37
  • Reflects source code line shift of +2 lines
+1/-1     
EntityName.md
Update EntityName type alias line reference                           

apps/docs/api/generated/riviere-query/type-aliases/EntityName.md

  • Updated line number reference in documentation link from
    domain-types.ts:32 to domain-types.ts:34
  • Reflects source code line shift of +2 lines
+1/-1     
LinkId.md
Update LinkId type alias line reference                                   

apps/docs/api/generated/riviere-query/type-aliases/LinkId.md

  • Updated line number reference in documentation link from
    domain-types.ts:29 to domain-types.ts:31
  • Reflects source code line shift of +2 lines
+1/-1     
OperationName.md
Update OperationName type alias line reference                     

apps/docs/api/generated/riviere-query/type-aliases/OperationName.md

  • Updated line number reference in documentation link from
    domain-types.ts:41 to domain-types.ts:43
  • Reflects source code line shift of +2 lines
+1/-1     
parseState.md
Update parseState function line reference                               

apps/docs/api/generated/riviere-query/functions/parseState.md

  • Updated line number reference in documentation link from
    domain-types.ts:310 to domain-types.ts:312
  • Reflects source code line shift of +2 lines
+1/-1     
EventId.md
Update EventId type alias line reference                                 

apps/docs/api/generated/riviere-query/type-aliases/EventId.md

  • Updated line number reference in documentation link from
    domain-types.ts:44 to domain-types.ts:46
  • Reflects source code line shift of +2 lines
+1/-1     
EventName.md
Update EventName type alias line reference                             

apps/docs/api/generated/riviere-query/type-aliases/EventName.md

  • Updated line number reference in documentation link from
    domain-types.ts:47 to domain-types.ts:49
  • Reflects source code line shift of +2 lines
+1/-1     
Configuration changes
3 files
config.ts
Updated documentation navigation for deterministic extraction

apps/docs/.vitepress/config.ts

  • Added new sidebar navigation section for "Deterministic Extraction"
    with 5 subsections
  • Added "Enforcement" link under extraction overview
  • Renamed "Extraction Steps" to "AI-Assisted Extraction" for clarity
  • Added new "Extraction Config" reference section with schema and
    predicates links
+43/-1   
project.json
Add documentation generation targets to project config     

packages/riviere-extract-config/project.json

  • Added generate-docs target to run documentation generation script
  • Added check-generated-docs target to validate generated documentation
    is up-to-date
  • Configured both targets to use tsx for TypeScript script execution
  • Set output directory to {projectRoot}/docs/generated
+22/-1   
package.json
Add extraction config docs copy commands to build               

apps/docs/package.json

  • Added copy commands for generated extraction config documentation
    files in build target
  • Added copy commands for generated extraction config documentation
    files in dev target
  • Copies predicates.md and schema.md from
    riviere-extract-config/docs/generated/ to reference/extraction-config/
+4/-0     
Dependencies
6 files
CustomTypeNotFoundError.md
Update @types/node dependency version references                 

apps/docs/api/generated/riviere-builder/classes/CustomTypeNotFoundError.md

  • Updated @types/node version references from 20.19.9 to 24.10.6
  • Adjusted line numbers in type definitions from globals.d.ts:149 to
    globals.d.ts:68
  • Updated captureStackTrace and prepareStackTrace method line references
+3/-3     
DomainNotFoundError.md
Update @types/node dependency version references                 

apps/docs/api/generated/riviere-builder/classes/DomainNotFoundError.md

  • Updated @types/node version from 20.19.9 to 24.10.6
  • Adjusted static method line numbers in Error class documentation
  • Updated references for stackTraceLimit, captureStackTrace, and
    prepareStackTrace
+3/-3     
DuplicateComponentError.md
Update @types/node dependency version references                 

apps/docs/api/generated/riviere-builder/classes/DuplicateComponentError.md

  • Updated @types/node version from 20.19.9 to 24.10.6
  • Adjusted line numbers for Error static methods and properties
  • Updated documentation links to reflect new type definition locations
+3/-3     
DuplicateDomainError.md
Update @types/node dependency version references                 

apps/docs/api/generated/riviere-builder/classes/DuplicateDomainError.md

  • Updated @types/node version from 20.19.9 to 24.10.6
  • Adjusted line numbers for Error class static members
  • Updated references for stackTraceLimit, captureStackTrace, and
    prepareStackTrace
+3/-3     
ComponentNotFoundError.md
Update @types/node dependency version references                 

apps/docs/api/generated/riviere-builder/classes/ComponentNotFoundError.md

  • Updated @types/node version from 20.19.9 to 24.10.6
  • Adjusted line numbers for Error static methods in type definitions
  • Updated documentation links for stackTraceLimit, captureStackTrace,
    and prepareStackTrace
+3/-3     
ComponentNotFoundError.md
Update @types/node dependency version references                 

apps/docs/api/generated/riviere-query/classes/ComponentNotFoundError.md

  • Updated @types/node version from 20.19.9 to 24.10.6
  • Adjusted line numbers for Error class static members
  • Updated references for Error type definition locations
+3/-3     
Additional files
3 files
generate-docs.d.ts.map +1/-0     
tsconfig.json +3/-0     
tsconfig.scripts.json +14/-0   

Summary by CodeRabbit

  • Documentation

    • Redesigned Extraction docs: renamed headings, split AI-Assisted and TypeScript workflows, and added a comprehensive deterministic extraction guide (Understand, Define, Extract, Link, Enrich, Validate).
    • Added enforcement guidance, TypeScript-specific getting-started, decorators reference, config examples, and extraction-config references (schema, predicates, examples).
  • CLI

    • Added an extract command (--config, --dry-run); add-component gained an --event-schema flag; component-summary usage updated.
  • Chores

    • Added automated docs generation and packaging updates to publish extraction reference docs.

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

NTCoding and others added 2 commits January 11, 2026 14:45
…ation

Add complete public documentation for deterministic TypeScript extraction:
- Overview comparing deterministic vs AI-assisted approaches
- Getting started tutorial with decorator usage examples
- Decorator reference with all component types
- ESLint enforcement guide with rules and configuration
- Config schema reference (auto-generated from JSON Schema)
- Predicate reference (auto-generated from JSON Schema)
- Documentation generator script for automation
- SVG diagram illustrating extraction-enforcement cycle
- Updated sidebar navigation and cross-links

Fixes markdown table escaping in doc generator to properly escape pipe characters.

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

coderabbitai Bot commented Jan 11, 2026 •

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Adds comprehensive deterministic-extraction documentation, TypeScript extraction guides and workflow steps, auto-generated extraction-config schema and predicate docs, ESLint enforcement guidance, CLI extract command docs, and doc-generation tooling integrated into the extract-config package and docs build.

Changes

Cohort / File(s) Summary
Docs site nav & landing
apps/docs/.vitepress/config.ts, apps/docs/index.md, apps/docs/extract/index.md
Sidebar and landing updates: rename entries, add "Extraction" and "TypeScript Extraction" groups, and link new extraction sections.
Deterministic extraction overview
apps/docs/extract/deterministic/index.md, apps/docs/extract/deterministic/enforcement.md
New conceptual reference and enforcement guidance describing the extraction-enforcement cycle and enforcement approaches (static analysis, tests, CI).
TypeScript extraction guides & workflow
apps/docs/extract/deterministic/typescript/getting-started.md, apps/docs/extract/deterministic/typescript/enforcement.md, apps/docs/extract/deterministic/typescript/workflow/*
Added getting-started, ESLint enforcement guide, and six-step TypeScript workflow pages (steps 1–6 and workflow index).
Extraction reference (schema/predicates/decorators/examples)
apps/docs/reference/extraction-config/schema.md, apps/docs/reference/extraction-config/predicates.md, apps/docs/reference/extraction-config/decorators.md, apps/docs/reference/extraction-config/examples.md
Added auto-generated schema and predicate docs plus decorator reference and multiple real-world extraction config examples.
CLI reference updates
apps/docs/reference/cli/cli-reference.md
Documented new riviere extract command (--config, --dry-run), added --event-schema flag to add-component, and updated component-summary examples.
Doc-gen tooling & packaging
packages/riviere-extract-config/scripts/generate-docs.ts, packages/riviere-extract-config/project.json, packages/riviere-extract-config/tsconfig.scripts.json, packages/riviere-extract-config/tsconfig.json, apps/docs/package.json
New script to generate predicates.md and schema.md from JSON Schema, Nx targets to generate/check docs, tsconfig for scripts, and docs build/serve copy steps wired to generated outputs.
Misc docs / small updates
apps/docs/extract/deterministic/index.md, apps/docs/extract/deterministic/*
Multiple new markdown pages under deterministic extraction (general and language-specific) and enforcement examples.
CI / workflow doc tweak
.claude/agents/submit-pr.md
Updated submit-pr guidance to require running ./scripts/submit-pr.sh (do not git push manually).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related issues

  • #50 — Public docs for deterministic extraction: this PR delivers the conceptual guides, getting-started, predicates, and enforcement coverage requested.
  • NTCoding/living-architecture#46 — CLI extract docs: this PR adds the riviere extract command and flags to the CLI reference, matching that issue's intent.

Possibly related PRs

  • #83 — Adds extraction-related packages and enforcement concepts that the new docs describe (strong overlap).
  • #53 — Modifies extraction-config schema/types and doc-generation wiring used by the generate-docs script.
  • #84 — Changes extraction-config schema artifacts which affect the generated predicates/schema docs produced here.

Suggested labels

Review effort 2/5

Poem

🐰 I hopped through schemas, predicates in tow,

Decorators danced, and workflows did grow,
Docs stitched together, step-one to six,
ESLint guards and CLI new tricks,
A joyous nibble — extraction on show!

🚥 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 'docs(extraction): add comprehensive deterministic extraction docs' clearly and accurately describes the main change: adding comprehensive documentation for deterministic extraction.
Linked Issues check ✅ Passed The PR comprehensively addresses all acceptance criteria from #50: explains deterministic vs AI-assisted tradeoffs, provides working getting-started guide, documents all predicates with examples, includes enforcement setup guidance, and documents public API methods.
Out of Scope Changes check ✅ Passed All changes directly support the documentation objectives. The script, build config, and TypeScript declarations enable auto-generation and proper integration of extraction docs into the site.

✏️ 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 f5dca3a and 45826a4.

📒 Files selected for processing (1)
  • .claude/agents/submit-pr.md
🧰 Additional context used
🧠 Learnings (5)
📓 Common learnings
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*.{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 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: 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
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
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
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
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
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: When modifying CLI commands in the riviere-cli tool, update the corresponding workflow prompts in docs/workflow/ directory (step-1 through step-6) to keep the extraction workflow in sync
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Ensure extraction code produces deterministic results—the same source code should always produce the same schema components
📚 Learning: 2026-01-11T22:40:43.505Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 132
File: scripts/submit-pr.sh:76-82
Timestamp: 2026-01-11T22:40:43.505Z
Learning: Claude Code PreToolUse hooks (`.claude/hooks/block-dangerous-commands.sh`) intercept direct agent tool invocations but do not intercept commands that run inside scripts. When an agent executes a script like `./scripts/submit-pr.sh`, the hook checks the script execution command itself, not the individual commands (e.g., `git push`) that run within the script's subprocess.

Applied to files:

  • .claude/agents/submit-pr.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: Never use `--no-verify`, `--force`, or `--hard` flags when making commits. All commits must pass the `verify` gate

Applied to files:

  • .claude/agents/submit-pr.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: Always use scripts in `./scripts/` for git and GitHub operations (PRs, issues, tasks). Do not use `gh` or `git` commands directly unless no script exists

Applied to files:

  • .claude/agents/submit-pr.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: Follow docs/workflow/task-workflow.md from start to finish when working on any task. Do not make any changes or commit any code without following these steps exactly

Applied to files:

  • .claude/agents/submit-pr.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). (1)
  • GitHub Check: main
🔇 Additional comments (2)
.claude/agents/submit-pr.md (2)

3-3: LGTM! Description accurately reflects the workflow.

The updated description correctly clarifies that the agent commits changes and runs the submit-pr.sh script, which then handles the push operation internally. This aligns with the enforcement mechanism that blocks direct git push commands from agent tools.


27-27: LGTM! Critical Rules update improves clarity and enforcement alignment.

The updated rule correctly:

  • Removes "and push" from the agent's direct responsibilities (now "commit existing changes" instead of "commit and push existing changes")
  • Explicitly states that git push is blocked and cannot be used manually
  • Directs the agent to use ./scripts/submit-pr.sh instead

This aligns with the enforcement mechanisms (hooks that block direct git commands) and the retrieved learnings about always using scripts for git operations. Based on learnings, this reinforces the correct workflow approach.


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

@cloudflare-workers-and-pages

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

Copy link
Copy Markdown

Deploying living-architecture with  Cloudflare Pages  Cloudflare Pages

Latest commit: 45826a4
Status: ✅  Deploy successful!
Preview URL: https://a3ba94b7.living-architecture.pages.dev
Branch Preview URL: https://issue-50-m5-d5-3-create-publ.living-architecture.pages.dev

View logs

@qodo-code-review

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

Copy link
Copy Markdown
Contributor

PR Compliance Guide 🔍

Below is a summary of compliance checks for this PR:

Security Compliance
⚪
Markdown injection/XSS

Description: The generator interpolates unescaped schema-provided description fields into Markdown
tables (e.g., line 97), which could enable stored HTML/JS injection in the published docs
site if the JSON Schema descriptions contain malicious content and the renderer allows raw
HTML. generate-docs.ts [85-99]

Referred Code
function generatePropertiesTable(
  properties: Record<string, SchemaProperty>,
  required: string[] = [],
): string[] {
  const lines: string[] = []
  lines.push('| Field | Type | Required | Description |')
  lines.push('|-------|------|----------|-------------|')

  for (const [propName, prop] of Object.entries(properties)) {
    const isRequired = required.includes(propName) ? '**Yes**' : 'No'
    const type = getTypeString(prop)
    const desc = prop.description ?? ''
    lines.push(`| \`${propName}\` | ${type} | ${isRequired} | ${desc} |`)
  }
  return lines
Ticket Compliance
🟡
🎫 #50
🟢 Explain deterministic vs AI-assisted extraction tradeoffs and guidance on when to use
each.
Provide a getting started guide that lets a new developer run their first extraction.
Provide an enforcement guide that enables ESLint enforcement.
Provide API reference documentation for programmatic usage, documenting public methods.
Provide complete public documentation for deterministic extraction, covering concepts,
getting started, config reference, predicate reference, and enforcement setup.
⚪ Document all predicates with examples in a predicate reference.
Verification: following the getting started guide on a fresh setup works as written.
Verification: enforcement guide is complete, and docs are clear and accurate.
Dependency awareness: work depends on issues #44 and #48.
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: Meaningful Naming and Self-Documenting Code

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

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: Robust Error Handling and Edge Case Management

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

Status:
Generic error context: The generator throws a generic Error without actionable context (e.g., which file/path
failed), and it does not handle common I/O/parse failures around schema loading and JSON
parsing.

Referred Code
const schemaPath = join(import.meta.dirname, '..', 'extraction-config.schema.json')
const schemaContent = readFileSync(schemaPath, 'utf-8')
const parsed: unknown = JSON.parse(schemaContent)
if (!isSchema(parsed)) {
  throw new Error('Invalid schema format')
}

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:
Weak schema validation: The script validates the parsed JSON only minimally (e.g., isSchema checks $defs is an
object) which may be insufficient if the schema file can be malformed or tampered with,
and needs confirmation that this input is fully trusted in the build environment.

Referred Code
function isSchema(value: unknown): value is Schema {
  if (typeof value !== 'object' || value === null) return false
  if (!hasKey(value, '$defs')) return false
  return typeof value['$defs'] === 'object'
}

// Main execution
const schemaPath = join(import.meta.dirname, '..', 'extraction-config.schema.json')
const schemaContent = readFileSync(schemaPath, 'utf-8')
const parsed: unknown = JSON.parse(schemaContent)
if (!isSchema(parsed)) {
  throw new Error('Invalid schema format')
}
const schema = parsed

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

@qodo-code-review

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

Copy link
Copy Markdown
Contributor

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Possible issue
Use __dirname for ESM path resolution

Replace the non-standard import.meta.dirname with a standards-compliant method
using import.meta.url to ensure correct file path resolution in an ES module
context.

packages/riviere-extract-config/scripts/generate-docs.ts [305-314]

-const schemaPath = join(import.meta.dirname, '..', 'extraction-config.schema.json')
+import { dirname, join } from 'path'
+import { fileURLToPath } from 'url'
+const __dirname = dirname(fileURLToPath(import.meta.url))
+const schemaPath = join(__dirname, '..', 'extraction-config.schema.json')
 const schemaContent = readFileSync(schemaPath, 'utf-8')
 ...
-const outputDir = join(import.meta.dirname, '..', 'docs', 'generated')
+const outputDir = join(__dirname, '..', 'docs', 'generated')
 mkdirSync(outputDir, { recursive: true })

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 9

__

Why: The suggestion corrects a critical runtime error by replacing the non-standard import.meta.dirname with the standard ESM pattern for resolving file paths, making the script executable.

High
✅ Resolve $ref for predicate parameters
Suggestion Impact:The commit updated predicate-parameter generation to explicitly handle inner predicate payloads that are $ref-based: it extended schema typing to include $ref, treated $ref-bearing objects as schema defs, and added a dedicated $ref predicate parameter table generator. While it did not resolve the $ref against the main schema to expand referenced properties (as suggested), it did add $ref-aware documentation output, addressing the underlying bug of failing/empty docs for $ref predicate payloads.

code diff:

@@ -168,29 +185,68 @@
   return (
     typeof value === 'object' &&
     value !== null &&
-    ('properties' in value || 'type' in value || 'oneOf' in value)
+    ('properties' in value || 'type' in value || 'oneOf' in value || '$ref' in value)
   )
 }
 
+function generateRefPredicateTable(innerProp: SchemaDef): string[] {
+  const lines: string[] = []
+  lines.push('**Parameters:**')
+  lines.push('')
+  lines.push('| Field | Type | Required | Description |')
+  lines.push('|-------|------|----------|-------------|')
+  const refName = getRefTypeName(innerProp.$ref ?? '')
+  const desc = escapePipes(innerProp.description ?? `Nested ${refName}`)
+  lines.push(`| (nested) | \`${refName}\` | **Yes** | ${desc} |`)
+  lines.push('')
+  return lines
+}
+
+function generateArrayPredicateTable(innerProp: SchemaDef): string[] {
+  const lines: string[] = []
+  lines.push('**Parameters:**')
+  lines.push('')
+  lines.push('| Field | Type | Required | Description |')
+  lines.push('|-------|------|----------|-------------|')
+  const itemType = innerProp.items?.$ref
+    ? getRefTypeName(innerProp.items.$ref)
+    : (innerProp.items?.type ?? 'any')
+  const minItems = innerProp.minItems ?? 1
+  const desc = escapePipes(innerProp.description ?? `Array of ${itemType}`)
+  lines.push(`| (array) | \`${itemType}[]\` | **Yes** (min: ${minItems}) | ${desc} |`)
+  lines.push('')
+  return lines
+}
+
 function generatePredicateParameters(def: SchemaDef): string[] {
-  const lines: string[] = []
   const outerProps = def.properties ?? {}
   const innerPropName = Object.keys(outerProps)[0]
-  if (!innerPropName) return lines
+  if (!innerPropName) return []
 
   const innerProp = outerProps[innerPropName]
-  if (!isSchemaDef(innerProp)) return lines
-
-  if (!innerProp.properties || Object.keys(innerProp.properties).length === 0) {
+  if (!isSchemaDef(innerProp)) return []
+
+  // Handle nested object with properties (hasDecorator, hasJSDoc, etc.)
+  if (innerProp.properties && Object.keys(innerProp.properties).length > 0) {
+    const lines: string[] = []
+    lines.push('**Parameters:**')
+    lines.push('')
+    lines.push(...generatePropertiesTable(innerProp.properties, innerProp.required))
+    lines.push('')
     return lines
   }
 
-  lines.push('**Parameters:**')
-  lines.push('')
-  lines.push(...generatePropertiesTable(innerProp.properties, innerProp.required))
-  lines.push('')
-
-  return lines
+  // Handle $ref predicates (inClassWith)
+  if (innerProp.$ref) {
+    return generateRefPredicateTable(innerProp)
+  }
+
+  // Handle array predicates (and, or)
+  if (innerProp.type === 'array' && innerProp.items) {
+    return generateArrayPredicateTable(innerProp)
+  }
+
+  return []
 }

Modify generatePredicateParameters to resolve $ref properties for predicate
payloads against the main schema, ensuring correct documentation generation for
referenced schemas.

packages/riviere-extract-config/scripts/generate-docs.ts [175-194]

-function generatePredicateParameters(def: SchemaDef): string[] {
+function generatePredicateParameters(def: SchemaDef, schema: Schema): string[] {
   const lines: string[] = []
   const outerProps = def.properties ?? {}
   const innerPropName = Object.keys(outerProps)[0]
   if (!innerPropName) return lines
 
-  const innerProp = outerProps[innerPropName]
+  let innerProp = outerProps[innerPropName]
+  if (innerProp.$ref) {
+    const resolvedDef = resolveRef(schema, innerProp.$ref)
+    if (!resolvedDef) return lines
+    innerProp = resolvedDef
+  }
+
   if (!isSchemaDef(innerProp)) return lines
 
   if (!innerProp.properties || Object.keys(innerProp.properties).length === 0) {
     return lines
   }
 
   lines.push('**Parameters:**')
   lines.push('')
   lines.push(...generatePropertiesTable(innerProp.properties, innerProp.required))
   lines.push('')
 
   return lines
 }

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 8

__

Why: This suggestion fixes a bug where the script would fail to generate documentation for predicate parameters defined using a $ref, which is a critical feature for schema reuse and a likely use case.

Medium
General
Use relative deterministic link

Correct a documentation link to use a relative path, ensuring it resolves
correctly within the site.

apps/docs/extract/index.md [20]

-[Learn about Deterministic Extraction →](/extract/deterministic/)
+[Learn about Deterministic Extraction →](./deterministic/)

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies a potential broken link in the documentation and provides a fix, which improves the user experience of the documentation site.

Medium
Avoid command duplication in nx targets

Refactor the check-generated-docs target to use dependsOn to avoid duplicating
the generation command, improving maintainability.

packages/riviere-extract-config/project.json [12-22]

 "check-generated-docs": {
+  "dependsOn": ["generate-docs"],
   "executor": "nx:run-commands",
   "options": {
-    "commands": [
-      "pnpm exec npx tsx packages/riviere-extract-config/scripts/generate-docs.ts",
-      "git diff --exit-code packages/riviere-extract-config/docs/generated/ || (echo 'Generated docs are stale. Run: pnpm nx generate-docs riviere-extract-config' && exit 1)"
-    ],
-    "cwd": "{workspaceRoot}",
-    "parallel": false
+    "command": "git diff --exit-code {projectRoot}/docs/generated/ || (echo 'Generated docs are stale. Run: pnpm nx generate-docs riviere-extract-config' && exit 1)",
+    "cwd": "{workspaceRoot}"
   }
 }

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 6

__

Why: The suggestion correctly identifies a DRY violation and proposes a more maintainable solution using dependsOn, which is idiomatic for nx configurations.

Low
Alphabetically sort properties

Modify generatePropertiesTable to sort properties alphabetically before
generating the markdown table, ensuring a consistent and predictable order in
the output.

packages/riviere-extract-config/scripts/generate-docs.ts [85-100]

 function generatePropertiesTable(
   properties: Record<string, SchemaProperty>,
   required: string[] = [],
 ): string[] {
   const lines: string[] = []
   lines.push('| Field | Type | Required | Description |')
   lines.push('|-------|------|----------|-------------|')
 
-  for (const [propName, prop] of Object.entries(properties)) {
+  for (const propName of Object.keys(properties).sort()) {
+    const prop = properties[propName]
     const isRequired = required.includes(propName) ? '**Yes**' : 'No'
     const type = getTypeString(prop)
     const desc = prop.description ?? ''
     lines.push(`| \`${propName}\` | ${type} | ${isRequired} | ${desc} |`)
   }
   return lines
 }

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 5

__

Why: This suggestion improves the generated documentation by ensuring a consistent, alphabetical ordering of properties in tables, which enhances readability and predictability.

Low
Use wildcards for robust file copying

Replace individual cp commands with a single command using a wildcard (*.md) to
copy all generated documentation files, making the script more robust.

apps/docs/package.json [28-29]

-"cp ../../packages/riviere-extract-config/docs/generated/predicates.md reference/extraction-config/predicates.md",
-"cp ../../packages/riviere-extract-config/docs/generated/schema.md reference/extraction-config/schema.md",
+"cp ../../packages/riviere-extract-config/docs/generated/*.md reference/extraction-config/",

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 5

__

Why: The suggestion improves the robustness and maintainability of the build script by using a wildcard for file copying, which is less brittle than listing individual files.

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: 7

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/docs/package.json (1)

16-34: Add dependency on riviere-extract-config:generate-docs to ensure generated docs exist before copying.

The build target copies generated documentation files but doesn't explicitly depend on the target that generates them. If the docs haven't been generated yet, the cp commands on lines 28-29 will fail.

🔧 Proposed fix
 "build": {
   "executor": "nx:run-commands",
   "dependsOn": [
-    "validate-cli-refs"
+    "validate-cli-refs",
+    "riviere-extract-config:generate-docs"
   ],
   "outputs": [
🤖 Fix all issues with AI agents
In @apps/docs/extract/deterministic/typescript/enforcement.md:
- Around line 66-82: Update the "Valid Decorators" list to include the three
method-level decorators that satisfy the rule but are currently missing:
@APIEndpoint, @DomainOp, and @EventHandler; locate the list that currently
enumerates @APIContainer, @DomainOpContainer, @EventHandlerContainer, @UseCase,
@Event, @UI, @Custom('type'), and @Ignore and add those three method-level
decorators so the documentation matches the "All 11 decorators" statement.

In @apps/docs/extract/deterministic/typescript/getting-started.md:
- Around line 128-174: The "Customize Your Config" section needs a short
clarifying note: explain that customization is only required for multi-module or
custom-rule projects, that users can start by copying the default config and
editing the "modules" array (e.g., the example module entries like "orders" and
"shipping") rather than building from scratch, and include a tip to validate
custom configs with the CLI's config-validate command or a JSON/YAML linter
before running extraction.
- Around line 74-109: Update the example JSON to match the CLI's actual output:
rename the top-level "components" array to "data", add an empty "warnings"
array, and either clarify the extraction config that maps module names to
domains or update the example's config to include "name: default" so the
illustrated "domain": "default" is accurate; ensure the JSON keys "success",
"data", and "warnings" are present and the domain note or config change is
mentioned in the surrounding text.

In @apps/docs/reference/extraction-config/predicates.md:
- Around line 98-115: The generated docs omit Parameters for the compositional
predicates; update the docs generation script used by "nx generate-docs" to
render Parameters for inClassWith, and, and or by reading the parameter
definitions from extraction-config.schema.json: for inClassWith emit a single
nested predicate parameter description (the predicate that qualifies the
containing class), and for and/or emit an array-of-predicates parameter with
minItems: 2 and the same formatting used by the first six predicates; ensure the
template that builds predicate docs (the function that renders predicate
entries) includes the Parameters section for predicates that have nested
predicate or array schema types so these three predicates get the same parameter
output as the others.

In @apps/docs/reference/extraction-config/schema.md:
- Around line 77-82: The docs generator omitted enum values for the findTarget
property; update the generation logic that renders schema fields so that when a
field is an enum (like findTarget) it outputs its allowed string values
("classes", "methods", "functions") in the generated markdown alongside the
brief description; locate the code that formats enum-type definitions (the
routine responsible for rendering schema fields / properties and enum metadata)
and ensure it detects string-enums and emits the enumerated values in the output
similar to other documented properties.

In @packages/riviere-extract-config/scripts/generate-docs.d.ts:
- Around line 1-10: The generated declaration file generate-docs.d.ts is empty
(only "export {}") and unnecessary for an executable script; remove this file
and stop emitting .d.ts for scripts by updating your TS build configuration or
tooling to exclude script files (e.g., exclude the scripts folder or the
specific generate-docs.ts entry, or adjust declaration/emit settings) so future
builds don't produce generate-docs.d.ts for the executable containing the
shebang and the export {} stub.

In @packages/riviere-extract-config/scripts/generate-docs.ts:
- Around line 85-100: The Markdown table cell content isn't escaping pipe
characters, so descriptions can break table formatting; inside
generatePropertiesTable take prop.description (and field names if needed) and
replace pipe characters with an escaped version (e.g., desc.replace(/\|/g,
'\\|') or via a small helper escapePipes(str)) before injecting into the table
row; apply the same escaping helper to the other places that insert descriptions
into Markdown tables (the other table-generating sites mentioned in the comment)
so all table cells escape '|' consistently.
📜 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 122a864 and 254c900.

⛔ Files ignored due to path filters (52)
  • apps/docs/api/generated/riviere-builder/classes/ComponentNotFoundError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/CustomTypeAlreadyDefinedError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/CustomTypeNotFoundError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/DomainNotFoundError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/DuplicateComponentError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/DuplicateDomainError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/InvalidEnrichmentTargetError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/RiviereBuilder.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/functions/findNearMatches.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/classes/ComponentNotFoundError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/classes/RiviereQuery.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/functions/parseComponentId.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/functions/parseDomainName.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/functions/parseEntityName.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/functions/parseEventId.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/functions/parseEventName.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/functions/parseHandlerId.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/functions/parseHandlerName.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/functions/parseLinkId.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/functions/parseOperationName.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/functions/parseState.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/ComponentCounts.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/ComponentModification.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/CrossDomainLink.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/DiffStats.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/Domain.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/DomainConnection.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/ExternalDomain.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/Flow.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/FlowStep.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/GraphDiff.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/GraphStats.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/SearchWithFlowOptions.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/SearchWithFlowResult.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/ValidationError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/interfaces/ValidationResult.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/type-aliases/ComponentId.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/type-aliases/DomainName.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/type-aliases/EntityName.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/type-aliases/EventId.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/type-aliases/EventName.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/type-aliases/HandlerId.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/type-aliases/HandlerName.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/type-aliases/LinkId.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/type-aliases/LinkType.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/type-aliases/OperationName.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/type-aliases/State.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-query/type-aliases/ValidationErrorCode.md is excluded by !**/generated/**
  • apps/docs/public/extraction-enforcement-cycle.svg is excluded by !**/*.svg
  • packages/riviere-extract-config/docs/generated/predicates.md is excluded by !**/generated/**
  • packages/riviere-extract-config/docs/generated/schema.md is excluded by !**/generated/**
  • packages/riviere-extract-config/scripts/generate-docs.d.ts.map is excluded by !**/*.map
📒 Files selected for processing (18)
  • apps/docs/.vitepress/config.ts
  • apps/docs/extract/deterministic/enforcement.md
  • apps/docs/extract/deterministic/index.md
  • apps/docs/extract/deterministic/typescript/decorators.md
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/examples.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/index.md
  • apps/docs/index.md
  • apps/docs/package.json
  • apps/docs/reference/cli/cli-reference.md
  • apps/docs/reference/extraction-config/predicates.md
  • apps/docs/reference/extraction-config/schema.md
  • packages/riviere-extract-config/project.json
  • packages/riviere-extract-config/scripts/generate-docs.d.ts
  • packages/riviere-extract-config/scripts/generate-docs.ts
  • packages/riviere-extract-config/tsconfig.json
  • packages/riviere-extract-config/tsconfig.scripts.json
🧰 Additional context used
📓 Path-based instructions (5)
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
  • packages/riviere-extract-config/scripts/generate-docs.d.ts
**/*.{js,ts,jsx,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Follow eslint configuration rules defined in eslint.config.mjs for all linting

Files:

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

📄 CodeRabbit inference engine (CLAUDE.md)

All UI and UX design must conform to global brand guidelines in /docs/brand/ (logo, colors, typography, icons)

Files:

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

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx,js,jsx}: Do not log sensitive data (passwords, tokens, PII) in any code
Validate and sanitize all external input

Files:

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

📄 CodeRabbit inference engine (CLAUDE.md)

Use cross-project imports with package names (e.g., import { X } from '@living-architecture/[pkg-name]') rather than relative paths

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
  • packages/riviere-extract-config/scripts/generate-docs.d.ts
🧠 Learnings (56)
📓 Common learnings
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*.{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 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: 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.
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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Ensure extraction code produces deterministic results—the same source code should always produce the same schema components
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.
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
📚 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: The `where` field in extraction config describes filter predicates that qualify components. Predicates must directly match the extraction target (e.g., `hasDecorator` for decorated items, `inClassWith` for methods within qualifying classes)

Applied to files:

  • apps/docs/reference/extraction-config/predicates.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} : Compose detection rules via and/or logic for predicates

Applied to files:

  • apps/docs/reference/extraction-config/predicates.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
  • apps/docs/extract/deterministic/typescript/examples.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
  • apps/docs/package.json
  • apps/docs/.vitepress/config.ts
  • apps/docs/index.md
  • apps/docs/extract/deterministic/index.md
  • apps/docs/extract/index.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • packages/riviere-extract-config/scripts/generate-docs.d.ts
  • packages/riviere-extract-config/project.json
  • apps/docs/extract/deterministic/enforcement.md
  • apps/docs/reference/cli/cli-reference.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
  • packages/riviere-extract-config/scripts/generate-docs.d.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
  • apps/docs/extract/deterministic/typescript/examples.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
  • packages/riviere-extract-config/tsconfig.json
  • apps/docs/package.json
  • apps/docs/.vitepress/config.ts
  • apps/docs/index.md
  • apps/docs/extract/deterministic/index.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • packages/riviere-extract-config/scripts/generate-docs.d.ts
  • packages/riviere-extract-config/project.json
  • apps/docs/extract/deterministic/enforcement.md
  • apps/docs/reference/cli/cli-reference.md
  • packages/riviere-extract-config/tsconfig.scripts.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 `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
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/examples.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
  • packages/riviere-extract-config/tsconfig.json
  • apps/docs/package.json
  • apps/docs/.vitepress/config.ts
  • apps/docs/index.md
  • apps/docs/extract/deterministic/index.md
  • apps/docs/extract/deterministic/typescript/decorators.md
  • apps/docs/extract/index.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • packages/riviere-extract-config/scripts/generate-docs.d.ts
  • packages/riviere-extract-config/project.json
  • apps/docs/extract/deterministic/enforcement.md
  • apps/docs/reference/cli/cli-reference.md
  • packages/riviere-extract-config/tsconfig.scripts.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: 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
  • apps/docs/extract/deterministic/typescript/examples.md
  • apps/docs/index.md
  • apps/docs/extract/deterministic/index.md
  • apps/docs/extract/deterministic/typescript/decorators.md
  • apps/docs/extract/index.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • packages/riviere-extract-config/scripts/generate-docs.d.ts
  • apps/docs/reference/cli/cli-reference.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
  • apps/docs/extract/deterministic/typescript/examples.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
  • apps/docs/package.json
  • apps/docs/index.md
  • apps/docs/extract/deterministic/index.md
  • apps/docs/extract/index.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • packages/riviere-extract-config/scripts/generate-docs.d.ts
  • packages/riviere-extract-config/project.json
  • apps/docs/reference/cli/cli-reference.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 glob pattern matching for module-based organization of extraction rules

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
  • apps/docs/extract/deterministic/typescript/examples.md
  • packages/riviere-extract-config/tsconfig.json
  • apps/docs/index.md
  • packages/riviere-extract-config/scripts/generate-docs.d.ts
  • packages/riviere-extract-config/project.json
  • packages/riviere-extract-config/tsconfig.scripts.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:

  • apps/docs/reference/extraction-config/schema.md
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/examples.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
  • apps/docs/index.md
  • apps/docs/extract/deterministic/index.md
  • apps/docs/extract/deterministic/typescript/decorators.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • packages/riviere-extract-config/scripts/generate-docs.d.ts
  • apps/docs/extract/deterministic/enforcement.md
  • apps/docs/reference/cli/cli-reference.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
  • apps/docs/extract/deterministic/index.md
  • apps/docs/extract/index.md
  • apps/docs/reference/cli/cli-reference.md
📚 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-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} : Enforce the ESLint rule `require-component-decorator` to ensure all classes are annotated with component decorators

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/decorators.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/enforcement.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: For custom architectural conventions not covered by standard decorators, implement custom enforcement through ESLint rules or CI checks

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/enforcement.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} : Strive for maximum type-safety. No `any`. No `as` (except `as const` which is allowed). Type escape hatches defeat TypeScript's purpose.

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.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: Configure ESLint to enforce component decorators on classes using the `require-component-decorator` rule from `living-architecture/riviere-extract-conventions/eslint-plugin`

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/decorators.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/enforcement.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code (not test files) must align with architecture boundaries and layering requirements as defined in @/docs/architecture/overview.md and @/docs/conventions/codebase-structure.md

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/examples.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} : Make illegal states unrepresentable. Use discriminated unions, not optional fields. If a state combination shouldn't exist, make the type system forbid it.

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code must comply with anti-patterns guidelines defined in @/docs/conventions/anti-patterns.md. Violations are hard failures unless documented exceptions exist.

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.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} : Check lint rules (eslint.config.mjs) before providing feedback to ensure suggestions don't contradict lint rules. Never suggest using banned keywords like 'as' or 'let'.

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.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 `UseCase`, `Event`, or `UI` class-level decorators to mark the class itself as a component

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/decorators.md
  • apps/docs/reference/cli/cli-reference.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/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/decorators.md
  • apps/docs/extract/deterministic/typescript/getting-started.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 `DomainOpContainer`, `APIContainer`, or `EventHandlerContainer` decorators on classes to mark container components where all public methods inherit the component type

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/examples.md
  • apps/docs/extract/deterministic/typescript/decorators.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 `Ignore` decorator to exclude classes or methods from architectural extraction analysis

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/examples.md
  • apps/docs/index.md
  • apps/docs/extract/deterministic/typescript/decorators.md
  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/examples.md
  • apps/docs/extract/deterministic/typescript/decorators.md
  • apps/docs/reference/cli/cli-reference.md
📚 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:

  • apps/docs/extract/deterministic/typescript/examples.md
  • apps/docs/extract/deterministic/typescript/decorators.md
  • apps/docs/extract/deterministic/typescript/getting-started.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : Organize code by usage (vertical slice organization), not by type. Avoid folders/files named: types/, models/, validators/, assertions/, schemas/, interfaces/, or files like types.ts, models.ts, validators.ts. Group items by what uses them together, not by category.

Applied to files:

  • apps/docs/extract/deterministic/typescript/examples.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:

  • apps/docs/extract/deterministic/typescript/examples.md
  • apps/docs/extract/deterministic/typescript/decorators.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
📚 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/*/src/**/infra/**/*.ts : Infrastructure layer files may depend on domain and application layers. Repositories, external service clients, and framework adapters implement the infrastructure concerns required by the application.

Applied to files:

  • apps/docs/extract/deterministic/typescript/examples.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/**/*.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
  • packages/riviere-extract-config/tsconfig.json
  • apps/docs/package.json
  • apps/docs/index.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • packages/riviere-extract-config/scripts/generate-docs.d.ts
  • packages/riviere-extract-config/project.json
  • packages/riviere-extract-config/tsconfig.scripts.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-extract-config/scripts/generate-docs.ts
  • packages/riviere-extract-config/tsconfig.json
  • apps/docs/.vitepress/config.ts
  • apps/docs/index.md
  • apps/docs/extract/deterministic/index.md
  • packages/riviere-extract-config/scripts/generate-docs.d.ts
  • packages/riviere-extract-config/project.json
  • apps/docs/reference/cli/cli-reference.md
  • packages/riviere-extract-config/tsconfig.scripts.json
📚 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
  • apps/docs/package.json
  • packages/riviere-extract-config/project.json
  • apps/docs/reference/cli/cli-reference.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-extract-config/scripts/generate-docs.ts
  • packages/riviere-extract-config/tsconfig.json
  • apps/docs/index.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • packages/riviere-extract-config/scripts/generate-docs.d.ts
  • packages/riviere-extract-config/project.json
  • packages/riviere-extract-config/tsconfig.scripts.json
📚 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
  • packages/riviere-extract-config/scripts/generate-docs.d.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} : Parse, don't validate. Use Zod schemas at system boundaries to parse external data once. Don't scatter `isX(unknown): x is T` type guards throughout the codebase.

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} : Reject invalid extraction configs at load time, not during extraction phase

Applied to files:

  • packages/riviere-extract-config/tsconfig.json
  • apps/docs/.vitepress/config.ts
  • apps/docs/extract/deterministic/index.md
  • packages/riviere-extract-config/scripts/generate-docs.d.ts
  • packages/riviere-extract-config/project.json
  • packages/riviere-extract-config/tsconfig.scripts.json
📚 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:

  • packages/riviere-extract-config/tsconfig.json
  • packages/riviere-extract-config/tsconfig.scripts.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-extract-config/tsconfig.json
  • packages/riviere-extract-config/tsconfig.scripts.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:

  • packages/riviere-extract-config/tsconfig.json
  • packages/riviere-extract-config/tsconfig.scripts.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-extract-config/tsconfig.json
  • packages/riviere-extract-config/tsconfig.scripts.json
📚 Learning: 2026-01-10T10:14:57.499Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-10T10:14:57.499Z
Learning: When creating new projects, create the 3-file tsconfig structure (tsconfig.json, tsconfig.lib.json, tsconfig.spec.json)

Applied to files:

  • packages/riviere-extract-config/tsconfig.json
  • packages/riviere-extract-config/tsconfig.scripts.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.lib.json : The tsconfig.lib.json file must extend tsconfig.base.json, set outDir to ./dist, rootDir to ./src, and include only src/**/*.ts while excluding src/**/*.test.ts files.

Applied to files:

  • packages/riviere-extract-config/tsconfig.json
  • packages/riviere-extract-config/tsconfig.scripts.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.lib.json : The tsconfig.lib.json file must extend tsconfig.base.json, set outDir to ./dist, rootDir to ./src, and include only src/**/*.ts while excluding src/**/*.test.ts files.

Applied to files:

  • packages/riviere-extract-config/tsconfig.json
  • packages/riviere-extract-config/tsconfig.scripts.json
📚 Learning: 2026-01-10T10:14:57.499Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-10T10:14:57.499Z
Learning: Applies to **/*.{js,ts,jsx,tsx} : Follow eslint configuration rules defined in `eslint.config.mjs` for all linting

Applied to files:

  • packages/riviere-extract-config/tsconfig.json
  • packages/riviere-extract-config/tsconfig.scripts.json
📚 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: When modifying CLI commands in the riviere-cli tool, update the corresponding workflow prompts in docs/workflow/ directory (step-1 through step-6) to keep the extraction workflow in sync

Applied to files:

  • apps/docs/package.json
  • apps/docs/extract/index.md
  • apps/docs/reference/cli/cli-reference.md
📚 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/*/package.json : When importing from another project, add explicit workspace dependencies to package.json using the format "living-architecture/[pkg-name]": "workspace:*" and run pnpm install.

Applied to files:

  • apps/docs/package.json
  • packages/riviere-extract-config/project.json
📚 Learning: 2026-01-10T10:14:57.499Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-10T10:14:57.499Z
Learning: Extract software architecture from code as living documentation, using Riviere schema for flow-based (not structural) architecture

Applied to files:

  • apps/docs/index.md
  • apps/docs/extract/index.md
  • apps/docs/reference/cli/cli-reference.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: Deterministic extraction without AI, network calls, or external services

Applied to files:

  • apps/docs/extract/deterministic/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: Ensure extraction code produces deterministic results—the same source code should always produce the same schema components

Applied to files:

  • apps/docs/extract/deterministic/index.md
  • apps/docs/extract/deterministic/enforcement.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: Use ECMAScript Stage 3 decorators (TypeScript 5.0+) instead of legacy experimentalDecorators

Applied to files:

  • apps/docs/extract/deterministic/typescript/decorators.md
📚 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/*/package.json : When importing from another project, add explicit workspace dependencies to package.json using the format "living-architecture/[pkg-name]": "workspace:*" and run pnpm install.

Applied to files:

  • packages/riviere-extract-config/project.json
📚 Learning: 2026-01-10T10:14:57.499Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-10T10:14:57.499Z
Learning: Run `pnpm nx sync` after modifying tsconfig references or adding dependencies between projects

Applied to files:

  • packages/riviere-extract-config/project.json
📚 Learning: 2026-01-10T10:14:57.499Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-10T10:14:57.499Z
Learning: Applies to package.json : Update root-level package.json with `"living-architecture/[pkg-name]": "workspace:*"` when importing from another project

Applied to files:

  • packages/riviere-extract-config/project.json
📚 Learning: 2026-01-09T20:08:44.180Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 88
File: packages/riviere-cli/src/commands/extract/extract.ts:109-114
Timestamp: 2026-01-09T20:08:44.180Z
Learning: Applies to packages/riviere-cli/src/commands/extract/**/*.{ts,tsx} : CLI extraction commands should only catch and format expected validation errors as structured JSON. System-level exceptions (disk I/O failures, OOM, AST parse errors) should fail loudly with stack traces for debugging rather than being wrapped in try-catch and converted to JSON errors. This follows the fail-fast principle: validate inputs explicitly, then let unexpected failures surface clearly.

Applied to files:

  • apps/docs/reference/cli/cli-reference.md
📚 Learning: 2026-01-10T10:14:57.499Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-10T10:14:57.499Z
Learning: Applies to **/*.{ts,tsx} : Use cross-project imports with package names (e.g., `import { X } from 'living-architecture/[pkg-name]'`) rather than relative paths

Applied to files:

  • packages/riviere-extract-config/tsconfig.scripts.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). (2)
  • GitHub Check: main
  • GitHub Check: Cloudflare Pages

Comment thread apps/docs/extract/deterministic/typescript/enforcement.md
Comment thread apps/docs/extract/deterministic/typescript/getting-started.md
Comment thread apps/docs/extract/deterministic/typescript/getting-started.md
Comment thread apps/docs/reference/extraction-config/predicates.md
Comment thread apps/docs/reference/extraction-config/schema.md
Comment thread packages/riviere-extract-config/scripts/generate-docs.d.ts Outdated
Comment thread packages/riviere-extract-config/scripts/generate-docs.ts
- Add missing method-level decorators to enforcement.md valid list
- Fix JSON output structure (components -> data, add warnings array)
- Clarify config customization guidance
- Update doc generator to handle compositional predicates (inClassWith, and, or)
- Add enum values documentation for findTarget
- Escape pipe characters in table content
- Remove unnecessary .d.ts declaration files for scripts
- Prevent future declaration file generation with tsconfig settings

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:
- Line 361: Update the getting-started.md prerequisite from "Node.js 18+" to
"Node.js 20+" so the documentation matches the actual enforced requirement
(Node.js 20+) used by the codebase (see usage of import.meta.dirname and package
enforcement in @living-architecture/riviere-cli); edit the top/prerequisites
section (around line 8) to state "Node.js 20+".
📜 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 254c900 and a74b8e4.

⛔ Files ignored due to path filters (2)
  • 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 (4)
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
  • packages/riviere-extract-config/tsconfig.scripts.json
🧰 Additional context used
📓 Path-based instructions (5)
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,ts,jsx,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Follow eslint configuration rules defined in eslint.config.mjs for all linting

Files:

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

📄 CodeRabbit inference engine (CLAUDE.md)

All UI and UX design must conform to global brand guidelines in /docs/brand/ (logo, colors, typography, icons)

Files:

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

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx,js,jsx}: Do not log sensitive data (passwords, tokens, PII) in any code
Validate and sanitize all external input

Files:

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

📄 CodeRabbit inference engine (CLAUDE.md)

Use cross-project imports with package names (e.g., import { X } from '@living-architecture/[pkg-name]') rather than relative paths

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
🧠 Learnings (44)
📓 Common learnings
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*.{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 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-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
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
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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Ensure extraction code produces deterministic results—the same source code should always produce the same schema components
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: Deterministic extraction without AI, network calls, or external services
📚 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
  • apps/docs/extract/deterministic/typescript/getting-started.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:

  • packages/riviere-extract-config/scripts/generate-docs.ts
  • apps/docs/extract/deterministic/typescript/getting-started.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-extract-config/scripts/generate-docs.ts
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • packages/riviere-extract-config/tsconfig.scripts.json
  • apps/docs/extract/deterministic/typescript/getting-started.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:

  • packages/riviere-extract-config/scripts/generate-docs.ts
  • packages/riviere-extract-config/tsconfig.scripts.json
  • apps/docs/extract/deterministic/typescript/getting-started.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/**/*.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
  • packages/riviere-extract-config/tsconfig.scripts.json
  • apps/docs/extract/deterministic/typescript/getting-started.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} : Implement extraction logic as pure functions with no side effects

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
  • packages/riviere-extract-config/tsconfig.scripts.json
📚 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-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
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/getting-started.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/**/*.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-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-11T11:04:34.655Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/anti-patterns.md:0-0
Timestamp: 2026-01-11T11:04:34.655Z
Learning: Applies to docs/conventions/**/*.{ts,tsx,js,jsx} : When parsing strings in exception messages is 100% unavoidable (e.g., due to third-party library limitations), document the exception with justification, reference tracking issue, and note that upstream fix was requested.

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} : Parse, don't validate. Use Zod schemas at system boundaries to parse external data once. Don't scatter `isX(unknown): x is T` type guards throughout the codebase.

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} : Enforce the ESLint rule `require-component-decorator` to ensure all classes are annotated with component decorators

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.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: For custom architectural conventions not covered by standard decorators, implement custom enforcement through ESLint rules or CI checks

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.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: Configure ESLint to enforce component decorators on classes using the `require-component-decorator` rule from `living-architecture/riviere-extract-conventions/eslint-plugin`

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/getting-started.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code (not test files) must align with architecture boundaries and layering requirements as defined in @/docs/architecture/overview.md and @/docs/conventions/codebase-structure.md

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/getting-started.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} : Strive for maximum type-safety. No `any`. No `as` (except `as const` which is allowed). Type escape hatches defeat TypeScript's purpose.

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code must comply with anti-patterns guidelines defined in @/docs/conventions/anti-patterns.md. Violations are hard failures unless documented exceptions exist.

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.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} : Make illegal states unrepresentable. Use discriminated unions, not optional fields. If a state combination shouldn't exist, make the type system forbid it.

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.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:

  • apps/docs/extract/deterministic/typescript/enforcement.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/extract/deterministic/typescript/enforcement.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 `DomainOpContainer`, `APIContainer`, or `EventHandlerContainer` decorators on classes to mark container components where all public methods inherit the component type

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.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 `UseCase`, `Event`, or `UI` class-level decorators to mark the class itself as a component

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.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/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/getting-started.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 `Ignore` decorator to exclude classes or methods from architectural extraction analysis

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/getting-started.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-extract-config/tsconfig.scripts.json
  • apps/docs/extract/deterministic/typescript/getting-started.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 glob pattern matching for module-based organization of extraction rules

Applied to files:

  • packages/riviere-extract-config/tsconfig.scripts.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} : Reject invalid extraction configs at load time, not during extraction phase

Applied to files:

  • packages/riviere-extract-config/tsconfig.scripts.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-extract-config/tsconfig.scripts.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.lib.json : The tsconfig.lib.json file must extend tsconfig.base.json, set outDir to ./dist, rootDir to ./src, and include only src/**/*.ts while excluding src/**/*.test.ts files.

Applied to files:

  • packages/riviere-extract-config/tsconfig.scripts.json
📚 Learning: 2026-01-10T10:14:57.499Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-10T10:14:57.499Z
Learning: When creating new projects, create the 3-file tsconfig structure (tsconfig.json, tsconfig.lib.json, tsconfig.spec.json)

Applied to files:

  • packages/riviere-extract-config/tsconfig.scripts.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.lib.json : The tsconfig.lib.json file must extend tsconfig.base.json, set outDir to ./dist, rootDir to ./src, and include only src/**/*.ts while excluding src/**/*.test.ts files.

Applied to files:

  • packages/riviere-extract-config/tsconfig.scripts.json
📚 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:

  • packages/riviere-extract-config/tsconfig.scripts.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:

  • packages/riviere-extract-config/tsconfig.scripts.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-extract-config/tsconfig.scripts.json
📚 Learning: 2026-01-10T10:14:57.499Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-10T10:14:57.499Z
Learning: Applies to **/*.{js,ts,jsx,tsx} : Follow eslint configuration rules defined in `eslint.config.mjs` for all linting

Applied to files:

  • packages/riviere-extract-config/tsconfig.scripts.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:

  • apps/docs/extract/deterministic/typescript/getting-started.md
📚 Learning: 2026-01-09T20:08:44.180Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 88
File: packages/riviere-cli/src/commands/extract/extract.ts:109-114
Timestamp: 2026-01-09T20:08:44.180Z
Learning: Applies to packages/riviere-cli/src/commands/extract/**/*.{ts,tsx} : CLI extraction commands should only catch and format expected validation errors as structured JSON. System-level exceptions (disk I/O failures, OOM, AST parse errors) should fail loudly with stack traces for debugging rather than being wrapped in try-catch and converted to JSON errors. This follows the fail-fast principle: validate inputs explicitly, then let unexpected failures surface clearly.

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: When modifying CLI commands in the riviere-cli tool, update the corresponding workflow prompts in docs/workflow/ directory (step-1 through step-6) to keep the extraction workflow in sync

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.md
📚 Learning: 2026-01-11T11:17:09.320Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/testing.md:0-0
Timestamp: 2026-01-11T11:17:09.320Z
Learning: Applies to docs/conventions/**/*.{spec,test}.{js,ts,jsx,tsx} : Systematically test violated domain constraints: uniqueness violations (duplicate IDs, emails), missing required relationships (orphaned records), ordering violations (events out of sequence), range breaches (age -1, quantity 1000000), state inconsistencies (shipped but not paid), format mismatches (expected JSON, got XML), and temporal ordering (end before start).

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.md
📚 Learning: 2026-01-09T20:08:30.350Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 88
File: packages/riviere-cli/src/commands/extract/extract.spec.ts:33-38
Timestamp: 2026-01-09T20:08:30.350Z
Learning: In test files (*.spec.ts, *.test.ts), type guards like `isExtractionOutput(value: unknown): value is ExtractionOutput` should focus on narrowing types for TypeScript rather than comprehensive validation. Actual shape validation is handled through explicit test assertions (e.g., `expect(result).toMatchObject(...)`). This keeps type guards simple while maintaining thorough validation through assertion-based testing.

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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). (2)
  • GitHub Check: main
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (4)
packages/riviere-extract-config/tsconfig.scripts.json (1)

1-17: LGTM! TypeScript configuration is appropriate for scripts.

The configuration correctly:

  • Uses ESNext modules with bundler resolution for modern Node.js
  • Includes Node.js types for the script environment
  • Sets noEmit: true since scripts are executed directly via tsx
  • References the library config for access to project types
  • Follows the 3-file tsconfig structure pattern
packages/riviere-extract-config/scripts/generate-docs.ts (3)

184-190: Type guard is basic but acceptable for a doc generation script.

The isSchemaDef type guard performs minimal validation (checks for presence of specific keys). This is less rigorous than Zod-based parsing, but for a doc generation script consuming a known internal schema file, this pragmatic approach is acceptable.

Based on learnings, if this were production code parsing external input, Zod validation would be required.


354-358: Type guard approach is appropriate for this use case.

Similar to isSchemaDef, the isSchema type guard is basic but sufficient for validating the known internal schema structure. The script correctly throws an error (line 365) if validation fails, providing fail-fast behavior.


360-382: Main execution follows fail-fast principle appropriately.

The script:

  • Validates the schema format and throws immediately on failure (line 365)
  • Allows uncaught exceptions for file I/O and system errors
  • Provides console feedback on success

This aligns with learnings that scripts should handle expected validation errors explicitly while letting unexpected system failures surface with full stack traces for debugging.

Comment thread packages/riviere-extract-config/scripts/generate-docs.ts Outdated
Address CodeRabbit feedback - documentation should match the actual
enforced requirement in the project.

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 @apps/docs/extract/deterministic/typescript/getting-started.md:
- Around line 54-72: Consolidate the duplicate "Step 2: Use the Default Config"
and "Step 3: Run Extraction" into a single step that both explains the purpose
of the default config and shows how to run extraction, and replace the
non-exported src path with the package export name; specifically, remove the
duplicated block that repeats the extraction command, create one combined step
that explains "use the default-config export and run extraction", and show the
CLI example using
node_modules/@living-architecture/riviere-extract-conventions/default-config
(and note the import form
@living-architecture/riviere-extract-conventions/default-config for code usage)
instead of the .../src/default-extraction.config.json path.
📜 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 a74b8e4 and 135d49a.

📒 Files selected for processing (1)
  • apps/docs/extract/deterministic/typescript/getting-started.md
🧰 Additional context used
🧠 Learnings (24)
📓 Common learnings
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*.{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 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-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
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
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
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
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
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.
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
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
📚 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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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} : Implement extraction logic as pure functions with no side effects

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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:

  • apps/docs/extract/deterministic/typescript/getting-started.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/**/*.test.{ts,tsx} : Implement integration tests for end-to-end extraction from TypeScript code to JSON output

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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 `Ignore` decorator to exclude classes or methods from architectural extraction analysis

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.md
📚 Learning: 2026-01-09T20:08:44.180Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 88
File: packages/riviere-cli/src/commands/extract/extract.ts:109-114
Timestamp: 2026-01-09T20:08:44.180Z
Learning: Applies to packages/riviere-cli/src/commands/extract/**/*.{ts,tsx} : CLI extraction commands should only catch and format expected validation errors as structured JSON. System-level exceptions (disk I/O failures, OOM, AST parse errors) should fail loudly with stack traces for debugging rather than being wrapped in try-catch and converted to JSON errors. This follows the fail-fast principle: validate inputs explicitly, then let unexpected failures surface clearly.

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: When modifying CLI commands in the riviere-cli tool, update the corresponding workflow prompts in docs/workflow/ directory (step-1 through step-6) to keep the extraction workflow in sync

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code (not test files) must align with architecture boundaries and layering requirements as defined in @/docs/architecture/overview.md and @/docs/conventions/codebase-structure.md

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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: For custom architectural conventions not covered by standard decorators, implement custom enforcement through ESLint rules or CI checks

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.md
📚 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/**/*.{ts,tsx} : Use living-architecture/[pkg-name] for imports from other workspace projects, not relative paths like ../../packages/[pkg-name].

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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} : Enforce the ESLint rule `require-component-decorator` to ensure all classes are annotated with component decorators

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code must comply with coding standards and design principles as defined in @/docs/conventions/software-design.md and @/docs/conventions/standard-patterns.md

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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: Configure ESLint to enforce component decorators on classes using the `require-component-decorator` rule from `living-architecture/riviere-extract-conventions/eslint-plugin`

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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). (2)
  • GitHub Check: main
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (4)
apps/docs/extract/deterministic/typescript/getting-started.md (4)

76-110: Verify JSON output structure matches actual CLI output.

The example output shown (lines 76–110) should be tested against the actual riviere extract CLI to ensure the JSON structure, field names, and format match what users will see. Particular concern: confirm the domain field is populated from the config module name, and verify the complete output structure.


142-167: Configuration example correctly uses all 6 component types with notUsed pattern.

The YAML example properly demonstrates the extraction config DSL with all six required component types (api, useCase, domainOp, event, eventHandler, ui) and marks unused types with notUsed: true. This aligns well with extraction config constraints and learnings.


8-8: Node.js version requirement is correct.

The documentation correctly specifies Node.js 20+ (updated from 18+), consistent with the PR's commit message.


183-192: Verify all cross-references and external links are valid.

The getting-started page references several other pages and an external repository:

  • /extract/deterministic/typescript/decorators (decorators reference)
  • /extract/deterministic/typescript/enforcement (enforcement guide)
  • /extract/deterministic/typescript/examples (examples)
  • /reference/extraction-config/schema (config schema reference)
  • /reference/cli/cli-reference (CLI reference)
  • External GitHub link: https://github.com/NTCoding/ecommerce-demo-app/tree/main/.riviere

Confirm these pages exist in the documentation structure and the external link remains valid and up-to-date.

Comment thread apps/docs/extract/deterministic/typescript/getting-started.md Outdated
NTCoding and others added 3 commits January 11, 2026 15:09
Step 2 and Step 3 had identical commands. Merged into single step
and renumbered remaining steps.

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: 4

🤖 Fix all issues with AI agents
In @apps/docs/extract/deterministic/typescript/getting-started.md:
- Line 101: Update the sentence that currently reads "The default config uses
'default' as the module name." to clarify scoping by appending a brief note that
this only applies to the default config and that module names can be overridden;
for example append ", unless you customize the config (see 'Customize Your
Config')" or similar wording and link/reference the existing customization
section that shows per-domain overrides (the section shown in the diff around
lines 131–156).
- Line 8: The docs state "Node.js 24+" but package.json in packages/riviere-cli
has "node": ">=20", so make them consistent; simplest fix: update the
getting-started.md text from "Node.js 24+" to "Node.js 20+" (search for the
literal "Node.js 24+" in getting-started.md and replace it), or if you intended
to require 24+, change the "node" field in packages/riviere-cli/package.json to
">=24" instead—ensure only one source of truth remains.
- Line 60: Replace the fragile node_modules path used with the CLI --config flag
by creating a local extraction config and updating the references: copy the
contents of
@living-architecture/riviere-extract-conventions/src/default-extraction.config.json
into a local extraction.config.json at the docs project root, then change the
two occurrences in getting-started.md (the lines currently showing --config
node_modules/@living-architecture/riviere-extract-conventions/src/default-extraction.config.json)
to use --config extraction.config.json so the docs reference a stable, local
config file.
- Line 176: The external demo link "View ecommerce-demo-app →" currently points
to https://github.com/NTCoding/ecommerce-demo-app/tree/main/.riviere which is
broken; either remove that link and any surrounding reference to the demo app,
or replace it with a valid repository URL (or an internal example) and update
the link text accordingly so it no longer points to NTCoding/ecommerce-demo-app.
📜 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 657768c and ac7f62a.

📒 Files selected for processing (2)
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/index.md
🧰 Additional context used
🧠 Learnings (27)
📓 Common learnings
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*.{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 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-ts/CLAUDE.md:0-0
Timestamp: 2026-01-08T17:19:17.148Z
Learning: Deterministic extraction without AI, network calls, or external services
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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Ensure extraction code produces deterministic results—the same source code should always produce the same schema components
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
📚 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/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/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/**/*.{ts,tsx} : Apply decorators from `living-architecture/riviere-extract-conventions` to mark all classes as architectural components

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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} : Implement extraction logic as pure functions with no side effects

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/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*.{json,ts} : Define extraction configuration using the JSON Schema from `living-architecture/riviere-extract-config` DSL

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/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/**/*.test.{ts,tsx} : Implement integration tests for end-to-end extraction from TypeScript code to JSON output

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.md
📚 Learning: 2026-01-09T20:08:44.180Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 88
File: packages/riviere-cli/src/commands/extract/extract.ts:109-114
Timestamp: 2026-01-09T20:08:44.180Z
Learning: Applies to packages/riviere-cli/src/commands/extract/**/*.{ts,tsx} : CLI extraction commands should only catch and format expected validation errors as structured JSON. System-level exceptions (disk I/O failures, OOM, AST parse errors) should fail loudly with stack traces for debugging rather than being wrapped in try-catch and converted to JSON errors. This follows the fail-fast principle: validate inputs explicitly, then let unexpected failures surface clearly.

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: When modifying CLI commands in the riviere-cli tool, update the corresponding workflow prompts in docs/workflow/ directory (step-1 through step-6) to keep the extraction workflow in sync

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/index.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/extract/deterministic/typescript/getting-started.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code (not test files) must align with architecture boundaries and layering requirements as defined in @/docs/architecture/overview.md and @/docs/conventions/codebase-structure.md

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: For custom architectural conventions not covered by standard decorators, implement custom enforcement through ESLint rules or CI checks

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.md
📚 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/**/*.{ts,tsx} : Use living-architecture/[pkg-name] for imports from other workspace projects, not relative paths like ../../packages/[pkg-name].

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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} : Enforce the ESLint rule `require-component-decorator` to ensure all classes are annotated with component decorators

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code must comply with coding standards and design principles as defined in @/docs/conventions/software-design.md and @/docs/conventions/standard-patterns.md

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/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 `Ignore` decorator to exclude classes or methods from architectural extraction analysis

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: Configure ESLint to enforce component decorators on classes using the `require-component-decorator` rule from `living-architecture/riviere-extract-conventions/eslint-plugin`

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: Deterministic extraction without AI, network calls, or external services

Applied to files:

  • apps/docs/extract/index.md
📚 Learning: 2026-01-10T10:14:57.499Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-10T10:14:57.499Z
Learning: Extract software architecture from code as living documentation, using Riviere schema for flow-based (not structural) architecture

Applied to files:

  • apps/docs/extract/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: All extraction rules should come from validated ExtractionConfig provided by riviere-extract-config

Applied to files:

  • apps/docs/extract/index.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). (2)
  • GitHub Check: main
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (5)
apps/docs/extract/deterministic/typescript/getting-started.md (5)

131-156: Configuration example is well-structured.

The YAML config example correctly:

  • Defines all six component types per module (api, useCase, domainOp, event, eventHandler, ui)
  • Marks unused types with notUsed: true (as per extraction config schema requirements)
  • Shows predicate syntax with hasDecorator and inClassWith patterns
  • Demonstrates multi-module setup with separate domains

23-50: Decorator examples are clear and well-commented.

The code examples at lines 23–36 (@APIContainer on OrderController) and 40–50 (@usecase on PlaceOrderUseCase) effectively demonstrate the two main decorator patterns and extraction output. Comments explain what each annotation extracts to.


24-24: The decorator imports from @living-architecture/riviere-extract-conventions are correct. Both APIContainer and UseCase are properly exported from the package's index and available for import.


1-182: All internal documentation links are correct and the referenced pages exist. The claim of "11 decorators" on line 180 is accurate—the decorators.md file contains exactly 11 decorator definitions across four categories (Container, Class-as-Component, Method-Level, and Other).


59-61: CLI command syntax is correct. The extract command exists at the top level, the --config flag accepts file system paths, and the parser (using the yaml library) supports both JSON and YAML configurations, as JSON is valid YAML.

Comment thread apps/docs/extract/deterministic/typescript/getting-started.md Outdated
Comment thread apps/docs/extract/deterministic/typescript/getting-started.md Outdated
Comment thread apps/docs/extract/deterministic/typescript/getting-started.md Outdated
Comment thread apps/docs/extract/deterministic/typescript/getting-started.md Outdated

@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: 4

🤖 Fix all issues with AI agents
In @apps/docs/extract/deterministic/typescript/examples.md:
- Around line 71-98: The example class name does not match the module predicate:
rename the TypeScript class currently declared as Order to OrderEntity so it
satisfies the config's nameEndsWith predicate for domain entities; update any
internal references (constructors, exports, imports, type annotations, and usage
in examples) that reference Order to use OrderEntity and ensure compilation and
examples remain consistent with the module config that expects names ending with
"Entity".
- Around line 189-221: The example's domainOp.nameMatches pattern (pattern:
"^(Order|Product|Customer)$") is overly restrictive and may be misinterpreted;
update the examples.md snippet near the domainOp block to add a short comment
clarifying this is demonstrative and that real projects should use broader
regexes (or list more names) when matching entity classes, referencing the
nameMatches predicate and the domainOp/find: "methods" context so readers know
where to adjust the pattern.
- Around line 5-9: Remove or consolidate the duplicated external demo repository
link under the "## Demo Application" section: either replace the inline link
with a reference to the canonical demo reference used in getting-started.md
(e.g., point to the shared "ecommerce-demo-app" reference), or remove this
occurrence and import/include the centralized link so all docs use the same
source; also verify the demo URL
(https://github.com/NTCoding/ecommerce-demo-app/tree/main/.riviere) is reachable
and update it if the canonical reference differs.

In @packages/riviere-extract-config/scripts/generate-docs.ts:
- Around line 368-390: Wrap the main execution block that reads the schema,
validates it, creates the output directory and writes files (the code using
schemaPath, readFileSync, isSchema/InvalidSchemaFormatError,
mkdirSync(outputDir...), writeFileSync for predicatesPath and schemaRefPath, and
the calls to generatePredicatesReference and generateSchemaReference) in a
try-catch; in the catch log a clear, actionable error with console.error
including the caught error/message/stack and exit non‑zero (e.g.,
process.exit(1)) so build failures produce a descriptive message.
📜 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 ac7f62a and 0c3f59a.

⛔ Files ignored due to path filters (1)
  • packages/riviere-extract-config/docs/generated/schema.md is excluded by !**/generated/**
📒 Files selected for processing (3)
  • apps/docs/extract/deterministic/typescript/examples.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
🧰 Additional context used
📓 Path-based instructions (5)
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,ts,jsx,tsx}

📄 CodeRabbit inference engine (CLAUDE.md)

Follow eslint configuration rules defined in eslint.config.mjs for all linting

Files:

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

📄 CodeRabbit inference engine (CLAUDE.md)

All UI and UX design must conform to global brand guidelines in /docs/brand/ (logo, colors, typography, icons)

Files:

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

📄 CodeRabbit inference engine (CLAUDE.md)

**/*.{ts,tsx,js,jsx}: Do not log sensitive data (passwords, tokens, PII) in any code
Validate and sanitize all external input

Files:

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

📄 CodeRabbit inference engine (CLAUDE.md)

Use cross-project imports with package names (e.g., import { X } from '@living-architecture/[pkg-name]') rather than relative paths

Files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
🧠 Learnings (37)
📓 Common learnings
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*.{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 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-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
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
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: When modifying CLI commands in the riviere-cli tool, update the corresponding workflow prompts in docs/workflow/ directory (step-1 through step-6) to keep the extraction workflow in sync
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
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
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
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
📚 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/extract/deterministic/typescript/examples.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/examples.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
  • apps/docs/extract/deterministic/typescript/getting-started.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:

  • apps/docs/extract/deterministic/typescript/examples.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/extract/deterministic/typescript/examples.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
  • apps/docs/extract/deterministic/typescript/getting-started.md
📚 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:

  • apps/docs/extract/deterministic/typescript/examples.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/extract/deterministic/typescript/examples.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
  • apps/docs/extract/deterministic/typescript/getting-started.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code (not test files) must align with architecture boundaries and layering requirements as defined in @/docs/architecture/overview.md and @/docs/conventions/codebase-structure.md

Applied to files:

  • apps/docs/extract/deterministic/typescript/examples.md
  • apps/docs/extract/deterministic/typescript/getting-started.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : Organize code by usage (vertical slice organization), not by type. Avoid folders/files named: types/, models/, validators/, assertions/, schemas/, interfaces/, or files like types.ts, models.ts, validators.ts. Group items by what uses them together, not by category.

Applied to files:

  • apps/docs/extract/deterministic/typescript/examples.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/extract/deterministic/typescript/examples.md
  • packages/riviere-extract-config/scripts/generate-docs.ts
  • apps/docs/extract/deterministic/typescript/getting-started.md
📚 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:

  • apps/docs/extract/deterministic/typescript/examples.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/extract/deterministic/typescript/examples.md
  • apps/docs/extract/deterministic/typescript/getting-started.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 glob pattern matching for module-based organization of extraction rules

Applied to files:

  • apps/docs/extract/deterministic/typescript/examples.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/extract/deterministic/typescript/examples.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 `Ignore` decorator to exclude classes or methods from architectural extraction analysis

Applied to files:

  • apps/docs/extract/deterministic/typescript/examples.md
  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/examples.md
  • apps/docs/extract/deterministic/typescript/getting-started.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/**/*.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
  • apps/docs/extract/deterministic/typescript/getting-started.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} : Implement extraction logic as pure functions with no side effects

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
  • apps/docs/extract/deterministic/typescript/getting-started.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
  • apps/docs/extract/deterministic/typescript/getting-started.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} : 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-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/**/*.{ts,tsx} : Use living-architecture/[pkg-name] for imports from other workspace projects, not relative paths like ../../packages/[pkg-name].

Applied to files:

  • packages/riviere-extract-config/scripts/generate-docs.ts
  • apps/docs/extract/deterministic/typescript/getting-started.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} : Parse, don't validate. Use Zod schemas at system boundaries to parse external data once. Don't scatter `isX(unknown): x is T` type guards throughout the codebase.

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
📚 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/extract/deterministic/typescript/getting-started.md
📚 Learning: 2026-01-09T20:08:44.180Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 88
File: packages/riviere-cli/src/commands/extract/extract.ts:109-114
Timestamp: 2026-01-09T20:08:44.180Z
Learning: Applies to packages/riviere-cli/src/commands/extract/**/*.{ts,tsx} : CLI extraction commands should only catch and format expected validation errors as structured JSON. System-level exceptions (disk I/O failures, OOM, AST parse errors) should fail loudly with stack traces for debugging rather than being wrapped in try-catch and converted to JSON errors. This follows the fail-fast principle: validate inputs explicitly, then let unexpected failures surface clearly.

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: When modifying CLI commands in the riviere-cli tool, update the corresponding workflow prompts in docs/workflow/ directory (step-1 through step-6) to keep the extraction workflow in sync

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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: For custom architectural conventions not covered by standard decorators, implement custom enforcement through ESLint rules or CI checks

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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} : Enforce the ESLint rule `require-component-decorator` to ensure all classes are annotated with component decorators

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code must comply with coding standards and design principles as defined in @/docs/conventions/software-design.md and @/docs/conventions/standard-patterns.md

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.md
📚 Learning: 2026-01-10T10:14:57.499Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-10T10:14:57.499Z
Learning: Do not modify root configuration files (eslint.config.mjs, tsconfig.base.json, nx.json, vite.config, vitest.config.mts); provide suggested changes and ask the user before modifying

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.md
📚 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/*/package.json : When importing from another project, add explicit workspace dependencies to package.json using the format "living-architecture/[pkg-name]": "workspace:*" and run pnpm install.

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.md
📚 Learning: 2026-01-11T22:42:12.408Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/anti-patterns.md:0-0
Timestamp: 2026-01-11T22:42:12.408Z
Learning: Applies to docs/conventions/**/packages/*/src/index.{ts,tsx} : Never export test fixtures from a package's public API for use by other packages. Each package should create its own local test fixtures to avoid fragile cross-package coupling.

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: Configure ESLint to enforce component decorators on classes using the `require-component-decorator` rule from `living-architecture/riviere-extract-conventions/eslint-plugin`

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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). (2)
  • GitHub Check: main
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (20)
packages/riviere-extract-config/scripts/generate-docs.ts (11)

1-13: LGTM!

Clean imports using the node: protocol prefix. The shebang correctly uses tsx for direct TypeScript execution.


15-21: LGTM!

Custom error class correctly extends Error and sets the name property for proper error identification.


23-54: LGTM!

The interfaces appropriately model the subset of JSON Schema structure needed for documentation generation. These are internal to the script and don't need to mirror the extraction config types themselves.


56-98: LGTM!

The utility functions correctly handle the JSON Schema constructs used in extraction configs. The escapePipes function properly escapes pipe characters for Markdown table cells, and type resolution handles the expected schema patterns.


100-115: LGTM!

The table generation correctly builds Markdown table syntax with proper escaping for descriptions.


117-161: LGTM!

The function correctly generates Markdown sections for schema definitions, handling enums, properties tables, and oneOf variants with proper null-safety via optional chaining.


163-211: LGTM!

The predicate utilities correctly derive documentation keys from schema definition names and handle various predicate structures. The isSchemaDef type guard provides reasonable runtime validation.


213-258: LGTM!

The parameter generation logic correctly handles the three predicate structures: nested objects with properties, $ref predicates, and array predicates. The assumption of single-property wrapper structure aligns with the extraction config schema patterns.


260-277: LGTM!

The predicate section generation is consistent with the overview table key derivation and produces well-structured Markdown output.


279-356: LGTM!

Both reference generators produce well-structured Markdown with proper frontmatter, auto-generated notices with regeneration commands, and cross-reference links. The filtering logic correctly separates predicate and non-predicate definitions.


358-366: LGTM!

The type guards provide sufficient validation for the build script context. The hasKey utility is a clean approach to type narrowing with property checks.

apps/docs/extract/deterministic/typescript/getting-started.md (4)

162-183: Complete YAML example includes all required component types.

The full custom config example correctly demonstrates all six required component types (api, useCase, domainOp, event, eventHandler, ui) with explicit notUsed: true for unused types. This aligns with the learning that "unused component types must be explicitly marked with notUsed: true rather than omitted."

Based on learnings, extraction config schemas require all six component types to be defined.


203-203: The external repository link is currently valid and accessible. Verification confirms that https://github.com/NTCoding/ecommerce-demo-app/tree/main/.riviere returns HTTP 200, indicating both the repository and the specific path exist and are functional. No action required at this time.


130-146: The extends feature is fully implemented and documented.

The extraction config schema properly defines the extends field with validation, TypeScript types mirror the schema definition, and the extraction tooling includes complete resolution logic with comprehensive error handling and test coverage. The documentation example is consistent with the implementation.


8-9: Node.js 24+ is the current Active LTS version as of January 2026 (entered Active LTS on October 28, 2025) and is the appropriate version to recommend. The requirement is not unusually restrictive.

Likely an incorrect or invalid review comment.

apps/docs/extract/deterministic/typescript/examples.md (5)

15-40: NestJS example correctly demonstrates decorator array syntax and compound predicates.

The configuration properly uses:

  • Array of decorator names: ["Get", "Post", "Put", "Delete", "Patch"]
  • Compound and predicate to combine conditions
  • Proper inClassWith nesting for container-based detection

The code example accurately reflects what would be extracted by this configuration.


126-156: JSDoc example provides decorator-free alternative.

This example is valuable for teams that avoid TypeScript decorators. The configuration correctly uses hasJSDoc with tag for all component types.

The code examples properly demonstrate JSDoc comment syntax with the @api, @usecase, @domainop, @event, and @handler tags.


257-336: Multi-module example demonstrates heterogeneous extraction strategies.

This comprehensive example effectively shows that different modules can use different detection approaches (decorators, NestJS, naming conventions, JSDoc) within the same project. Each module correctly specifies all six component types with notUsed: true for unused types.

This validates the flexibility of the extraction DSL and provides a realistic scenario for complex projects.


342-363: Multi-Module with Extends example demonstrates inheritance pattern.

The extends feature significantly reduces boilerplate for multi-module projects using consistent decorators. The example at lines 358-362 correctly shows selective override of inherited rules.

This pattern aligns with the earlier mention of extends in getting-started.md and should be verified as implemented in the config schema (see earlier verification comment).

Ensure the extends functionality is implemented and tested (related to earlier verification request in getting-started.md).


372-376: Cross-references are comprehensive and well-organized.

The See Also section provides clear navigation to:

  • Config schema reference (complete DSL)
  • Predicate reference (all 9 predicates)
  • Getting started guide
  • Decorators reference (all 11 decorators)

These cross-links support the learning journey from examples back to reference material and tutorials.

Comment thread apps/docs/extract/deterministic/typescript/examples.md Outdated
Comment thread apps/docs/reference/extraction-config/examples.md
Comment thread apps/docs/reference/extraction-config/examples.md
Comment thread packages/riviere-extract-config/scripts/generate-docs.ts Outdated
NTCoding and others added 2 commits January 11, 2026 23:05
- Fix module name scoping clarification with link to customization
- Rename Order to OrderEntity in DDD example for consistency
- Add clarifying comment for nameMatches regex pattern
- Add try-catch error handling to generate-docs.ts

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Aligns documentation with the node engine field in riviere-cli package.json.

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 @apps/docs/extract/deterministic/typescript/getting-started.md:
- Around line 54-61: Update the example extraction command to use the package's
public export alias instead of a direct src path: replace the config path
referencing
node_modules/@living-architecture/riviere-extract-conventions/src/default-extraction.config.json
with the public export alias
node_modules/@living-architecture/riviere-extract-conventions/default-config so
the npx riviere extract --config invocation uses the package's exported
default-config entry.
📜 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 9ef7b0f and 4d3d5fd.

📒 Files selected for processing (1)
  • apps/docs/extract/deterministic/typescript/getting-started.md
🧰 Additional context used
🧠 Learnings (29)
📓 Common learnings
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: 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: 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
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
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
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: When modifying CLI commands in the riviere-cli tool, update the corresponding workflow prompts in docs/workflow/ directory (step-1 through step-6) to keep the extraction workflow in sync
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
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
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
📚 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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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} : Implement extraction logic as pure functions with no side effects

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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:

  • apps/docs/extract/deterministic/typescript/getting-started.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/**/*.test.{ts,tsx} : Implement integration tests for end-to-end extraction from TypeScript code to JSON output

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.md
📚 Learning: 2026-01-09T20:08:44.180Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 88
File: packages/riviere-cli/src/commands/extract/extract.ts:109-114
Timestamp: 2026-01-09T20:08:44.180Z
Learning: Applies to packages/riviere-cli/src/commands/extract/**/*.{ts,tsx} : CLI extraction commands should only catch and format expected validation errors as structured JSON. System-level exceptions (disk I/O failures, OOM, AST parse errors) should fail loudly with stack traces for debugging rather than being wrapped in try-catch and converted to JSON errors. This follows the fail-fast principle: validate inputs explicitly, then let unexpected failures surface clearly.

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: When modifying CLI commands in the riviere-cli tool, update the corresponding workflow prompts in docs/workflow/ directory (step-1 through step-6) to keep the extraction workflow in sync

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code (not test files) must align with architecture boundaries and layering requirements as defined in @/docs/architecture/overview.md and @/docs/conventions/codebase-structure.md

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: For custom architectural conventions not covered by standard decorators, implement custom enforcement through ESLint rules or CI checks

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.md
📚 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/**/*.{ts,tsx} : Use living-architecture/[pkg-name] for imports from other workspace projects, not relative paths like ../../packages/[pkg-name].

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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} : Enforce the ESLint rule `require-component-decorator` to ensure all classes are annotated with component decorators

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code must comply with coding standards and design principles as defined in @/docs/conventions/software-design.md and @/docs/conventions/standard-patterns.md

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.md
📚 Learning: 2026-01-10T10:14:57.499Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-10T10:14:57.499Z
Learning: Do not modify root configuration files (eslint.config.mjs, tsconfig.base.json, nx.json, vite.config, vitest.config.mts); provide suggested changes and ask the user before modifying

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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} : Check lint rules (eslint.config.mjs) before providing feedback to ensure suggestions don't contradict lint rules. Never suggest using banned keywords like 'as' or 'let'.

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code must comply with anti-patterns guidelines defined in @/docs/conventions/anti-patterns.md. Violations are hard failures unless documented exceptions exist.

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.md
📚 Learning: 2026-01-11T23:03:47.475Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 130
File: apps/docs/extract/deterministic/typescript/examples.md:5-9
Timestamp: 2026-01-11T23:03:47.475Z
Learning: In documentation files, duplicate external repository links are acceptable when they serve different purposes in different contexts (e.g., getting-started showing next steps vs examples showing complete working configs).

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: Configure ESLint to enforce component decorators on classes using the `require-component-decorator` rule from `living-architecture/riviere-extract-conventions/eslint-plugin`

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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 `Ignore` decorator to exclude classes or methods from architectural extraction analysis

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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). (2)
  • GitHub Check: main
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (7)
apps/docs/extract/deterministic/typescript/getting-started.md (7)

5-15: LGTM! Prerequisites are clear and accurate.

The Node.js and TypeScript version requirements are appropriate, and the package installation command references the correct packages for CLI and decorator support.


17-52: LGTM! Decorator examples clearly illustrate container vs class patterns.

The code examples correctly demonstrate the two main decorator patterns and import from the appropriate conventions package. The distinction between container decorators (methods extracted) and class decorators (class extracted) is well-explained.


63-99: LGTM! Output example clearly shows the extraction result structure.

The JSON output format is well-structured with appropriate fields for component type, name, location, and domain. The example effectively demonstrates what users should expect.


104-118: LGTM! Verification step provides a useful summary view.

The --dry-run option and its output format effectively show component counts across all six types, giving users a quick way to verify their extraction results.


158-183: LGTM! Full config example properly defines all required component types.

The configuration correctly includes all six mandatory component types (api, useCase, domainOp, event, eventHandler, ui), with explicit notUsed: true for unused types. The predicate structures for decorator detection are accurate.


193-203: LGTM! Next steps and demo references provide clear paths forward.

The links to CLI reference and the external demo application give users appropriate resources for deeper exploration.


205-209: LGTM! Cross-references provide comprehensive navigation.

The "See Also" section appropriately links to the decorator reference, config schema, and examples, helping users discover related documentation.

Comment thread apps/docs/extract/deterministic/typescript/getting-started.md
NTCoding and others added 4 commits January 11, 2026 23:16
Use @living-architecture/riviere-extract-conventions/default-config
instead of src path for cleaner CLI invocation.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Point to repository root instead of .riviere folder since
config is at root level as extraction.config.json.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Create 6-step TypeScript workflow matching AI-assisted structure
- Move decorators.md and examples.md to /reference/extraction-config/
- Update sidebar with consistent section naming
- Add "Evolving Workflow" banner explaining AI-to-deterministic transition
- Regenerate schema docs to include customTypes field

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: 7

🤖 Fix all issues with AI agents
In @apps/docs/extract/deterministic/typescript/workflow/index.md:
- Around line 38-58: The workflow steps "Step 1: Understand" and "Step 2:
Define" reference remote URLs but the PR adds local docs; update the markdown
under the "Step 1: Understand" and "Step 2: Define" sections to point to the
local files instead of the raw GitHub URLs by replacing the fetch lines with
instructions to follow
/extract/deterministic/typescript/workflow/step-1-understand for Step 1 and
/extract/deterministic/typescript/workflow/step-2-define for Step 2 so the steps
consistently reference the local workflow documentation.

In @apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md:
- Around line 9-13: Clarify that the deterministic TypeScript workflow defers to
the AI-assisted workflow by updating step-1-understand.md to explicitly state
that users should complete the AI-assisted step referenced by the link
/extract/steps/step-1-understand (the "Step 1: Understand" cross-reference)
before returning to continue the deterministic workflow; add a brief sentence
after the existing note about planned deterministic tooling that instructs users
to finish the AI-assisted step and then resume the deterministic guide, and
optionally add a short rationale line indicating the hand-off is intentional to
avoid confusion.

In @apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md:
- Around line 9-20: Update the Node.js prerequisite in step-3-extract.md so it
distinguishes minimum vs recommended versions: change the line that currently
reads "Node.js 20+" to something like "Node.js 20+ (recommended 24+ — used in
CI/workflows)"; ensure this matches the repository pattern used in other docs
and aligns with package.json engines and GitHub Actions usage.

In @apps/docs/reference/extraction-config/decorators.md:
- Around line 220-223: Update the example CLI in the `npx riviere extract`
snippet to use the package-resolved config path instead of a node_modules file
path: replace
`node_modules/@living-architecture/riviere-extract-conventions/src/default-extraction.config.json`
with the package-relative reference
`living-architecture/riviere-extract-conventions/default-config` (i.e., remove
the node_modules prefix and .json/ src path so the CLI can resolve the
package-provided default).
- Around line 26-40: The examples using APIContainer and APIEndpoint reference
types like Request, Order, and Promise<Order> without imports or definitions,
which may confuse readers; add a brief sentence above the first code block
stating that Request, Order, and related types are illustrative placeholders and
not imported in the snippet (or show minimal import/typedef examples), and
mention that readers should replace or import real types when copying the
example so the APIContainer and APIEndpoint examples remain clear.

In @apps/docs/reference/extraction-config/examples.md:
- Around line 204-211: The domainOp nameMatches pattern doesn't account for the
"Entity" suffix used in the code example (e.g., OrderEntity); update the config
or example so they align: either change the pattern in
domainOp/nameMatches/pattern to accept an optional "Entity" suffix (so it
matches Order, Product, Customer and OrderEntity, ProductEntity, CustomerEntity)
or update the code example to use bare class names (Order, Product, Customer)
instead of OrderEntity; edit the domainOp block (nameMatches pattern) or the
example class names accordingly.

In @apps/docs/reference/extraction-config/schema.md:
- Around line 66-76: Update the `detectionRule` table row for the `where` field
so the Description column contains an inline link to the `predicate` type
reference instead of forcing readers to use the "See Also" section; locate the
`where` entry in the `detectionRule` properties table in schema.md and replace
the current blank/placeholder description with a short sentence that includes a
direct link to the `predicate` reference (use the existing `predicate`
heading/anchor in the document).
📜 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 140c116 and ad381af.

⛔ Files ignored due to path filters (10)
  • apps/docs/api/generated/riviere-builder/README.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/BuildValidationError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/ComponentId.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/DirectoryNotFoundError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/InvalidGraphError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/MissingDomainsError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/MissingRequiredPropertiesError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/MissingSourcesError.md is excluded by !**/generated/**
  • apps/docs/api/generated/riviere-builder/classes/RiviereBuilder.md is excluded by !**/generated/**
  • packages/riviere-extract-config/docs/generated/schema.md is excluded by !**/generated/**
📒 Files selected for processing (15)
  • apps/docs/.vitepress/config.ts
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/extract/deterministic/typescript/workflow/step-2-define.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md
  • apps/docs/extract/deterministic/typescript/workflow/step-4-link.md
  • apps/docs/extract/deterministic/typescript/workflow/step-5-enrich.md
  • apps/docs/extract/deterministic/typescript/workflow/step-6-validate.md
  • apps/docs/extract/index.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/examples.md
  • apps/docs/reference/extraction-config/predicates.md
  • apps/docs/reference/extraction-config/schema.md
🧰 Additional context used
🧠 Learnings (54)
📓 Common learnings
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*.{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: 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
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-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
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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-08T22:20:13.250Z
Learning: Ensure extraction code produces deterministic results—the same source code should always produce the same schema components
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.
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: Deterministic extraction without AI, network calls, or external services
📚 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/extract/deterministic/typescript/workflow/step-2-define.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/extract/deterministic/typescript/workflow/step-4-link.md
  • apps/docs/reference/extraction-config/schema.md
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/reference/extraction-config/predicates.md
  • apps/docs/extract/deterministic/typescript/workflow/step-6-validate.md
  • apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md
  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/.vitepress/config.ts
  • apps/docs/extract/index.md
  • apps/docs/reference/extraction-config/examples.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/extract/deterministic/typescript/workflow/step-2-define.md
  • apps/docs/reference/extraction-config/schema.md
  • apps/docs/extract/deterministic/typescript/workflow/step-6-validate.md
  • apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md
  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/.vitepress/config.ts
  • apps/docs/extract/index.md
  • apps/docs/reference/extraction-config/examples.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/extract/deterministic/typescript/workflow/step-2-define.md
  • apps/docs/reference/extraction-config/schema.md
  • apps/docs/extract/deterministic/typescript/workflow/step-6-validate.md
  • apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md
  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/.vitepress/config.ts
  • apps/docs/extract/index.md
  • apps/docs/reference/extraction-config/examples.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/extract/deterministic/typescript/workflow/step-2-define.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/schema.md
  • apps/docs/extract/deterministic/typescript/workflow/step-6-validate.md
  • apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md
  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/extract/index.md
  • apps/docs/reference/extraction-config/examples.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/extract/deterministic/typescript/workflow/step-2-define.md
  • apps/docs/extract/deterministic/typescript/workflow/step-4-link.md
  • apps/docs/reference/extraction-config/schema.md
  • apps/docs/reference/extraction-config/predicates.md
  • apps/docs/extract/deterministic/typescript/workflow/step-6-validate.md
  • apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md
  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/.vitepress/config.ts
  • apps/docs/extract/index.md
  • apps/docs/reference/extraction-config/examples.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 glob pattern matching for module-based organization of extraction rules

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/step-2-define.md
  • apps/docs/reference/extraction-config/schema.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/.vitepress/config.ts
  • apps/docs/reference/extraction-config/examples.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} : Implement extraction logic as pure functions with no side effects

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/step-2-define.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md
  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/.vitepress/config.ts
  • apps/docs/extract/index.md
  • apps/docs/reference/extraction-config/examples.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/**/*.test.{ts,tsx} : Implement integration tests for end-to-end extraction from TypeScript code to JSON output

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/step-2-define.md
  • apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md
  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/.vitepress/config.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:

  • apps/docs/extract/deterministic/typescript/workflow/step-2-define.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/schema.md
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/reference/extraction-config/predicates.md
  • apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md
  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/extract/index.md
  • apps/docs/reference/extraction-config/examples.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: When modifying CLI commands in the riviere-cli tool, update the corresponding workflow prompts in docs/workflow/ directory (step-1 through step-6) to keep the extraction workflow in sync

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/step-2-define.md
  • apps/docs/extract/deterministic/typescript/workflow/step-4-link.md
  • apps/docs/extract/deterministic/typescript/workflow/step-6-validate.md
  • apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/step-5-enrich.md
  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/.vitepress/config.ts
  • apps/docs/extract/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: All extraction rules should come from validated ExtractionConfig provided by riviere-extract-config

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/step-2-define.md
  • apps/docs/reference/extraction-config/schema.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md
  • apps/docs/.vitepress/config.ts
  • apps/docs/extract/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 `UseCase`, `Event`, or `UI` class-level decorators to mark the class itself as a component

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/step-2-define.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/workflow/step-2-define.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/extract/deterministic/typescript/workflow/step-4-link.md
  • apps/docs/reference/extraction-config/schema.md
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/reference/extraction-config/predicates.md
  • apps/docs/extract/deterministic/typescript/workflow/step-6-validate.md
  • apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/step-5-enrich.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md
  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/extract/index.md
  • apps/docs/reference/extraction-config/examples.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 `DomainOpContainer`, `APIContainer`, or `EventHandlerContainer` decorators on classes to mark container components where all public methods inherit the component type

Applied to files:

  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/extract/deterministic/typescript/enforcement.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: Ensure container decorator classes have their public methods extracted as individual components by the extraction tooling

Applied to files:

  • apps/docs/reference/extraction-config/decorators.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/decorators.md
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.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/extraction-config/decorators.md
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/workflow/step-5-enrich.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md
  • apps/docs/reference/extraction-config/examples.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} : Enforce the ESLint rule `require-component-decorator` to ensure all classes are annotated with component decorators

Applied to files:

  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/extract/deterministic/typescript/enforcement.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 `Ignore` decorator to exclude classes or methods from architectural extraction analysis

Applied to files:

  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md
  • apps/docs/reference/extraction-config/examples.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: Use ECMAScript Stage 3 decorators (TypeScript 5.0+) instead of legacy experimentalDecorators

Applied to files:

  • apps/docs/reference/extraction-config/decorators.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: Configure ESLint to enforce component decorators on classes using the `require-component-decorator` rule from `living-architecture/riviere-extract-conventions/eslint-plugin`

Applied to files:

  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/getting-started.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code (not test files) must align with architecture boundaries and layering requirements as defined in @/docs/architecture/overview.md and @/docs/conventions/codebase-structure.md

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/step-4-link.md
  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/index.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
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/reference/extraction-config/examples.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
  • apps/docs/reference/extraction-config/predicates.md
  • apps/docs/extract/deterministic/typescript/getting-started.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: The `find` field in extraction config describes user intent (what components to extract), not the implementation strategy. For example, `find: "methods"` means "I want methods as architectural components", not "find classes then extract methods"

Applied to files:

  • apps/docs/reference/extraction-config/schema.md
📚 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-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: For custom architectural conventions not covered by standard decorators, implement custom enforcement through ESLint rules or CI checks

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/getting-started.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: Applies to **/*.{ts,tsx} : Avoid anti-patterns documented in `docs/conventions/anti-patterns.md`

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/reference/extraction-config/examples.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} : Strive for maximum type-safety. No `any`. No `as` (except `as const` which is allowed). Type escape hatches defeat TypeScript's purpose.

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.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} : Make illegal states unrepresentable. Use discriminated unions, not optional fields. If a state combination shouldn't exist, make the type system forbid it.

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.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: Applies to **/*.{ts,tsx} : Follow `docs/conventions/software-design.md` when writing, editing, refactoring, or reviewing code

Applied to files:

  • apps/docs/extract/deterministic/typescript/enforcement.md
  • apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/extract/deterministic/typescript/getting-started.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: The `where` field in extraction config describes filter predicates that qualify components. Predicates must directly match the extraction target (e.g., `hasDecorator` for decorated items, `inClassWith` for methods within qualifying classes)

Applied to files:

  • apps/docs/reference/extraction-config/predicates.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} : Compose detection rules via and/or logic for predicates

Applied to files:

  • apps/docs/reference/extraction-config/predicates.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} : 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:

  • apps/docs/extract/deterministic/typescript/workflow/step-6-validate.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:

  • apps/docs/extract/deterministic/typescript/workflow/step-6-validate.md
  • apps/docs/extract/deterministic/typescript/workflow/step-5-enrich.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : Organize code by usage (vertical slice organization), not by type. Avoid folders/files named: types/, models/, validators/, assertions/, schemas/, interfaces/, or files like types.ts, models.ts, validators.ts. Group items by what uses them together, not by category.

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/.vitepress/config.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code must comply with coding standards and design principles as defined in @/docs/conventions/software-design.md and @/docs/conventions/standard-patterns.md

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/index.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/extract/deterministic/typescript/workflow/step-1-understand.md
  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/extract/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:

  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/.vitepress/config.ts
  • apps/docs/extract/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} : Reject invalid extraction configs at load time, not during extraction phase

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md
  • apps/docs/.vitepress/config.ts
  • apps/docs/reference/extraction-config/examples.md
📚 Learning: 2026-01-09T20:08:44.180Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 88
File: packages/riviere-cli/src/commands/extract/extract.ts:109-114
Timestamp: 2026-01-09T20:08:44.180Z
Learning: Applies to packages/riviere-cli/src/commands/extract/**/*.{ts,tsx} : CLI extraction commands should only catch and format expected validation errors as structured JSON. System-level exceptions (disk I/O failures, OOM, AST parse errors) should fail loudly with stack traces for debugging rather than being wrapped in try-catch and converted to JSON errors. This follows the fail-fast principle: validate inputs explicitly, then let unexpected failures surface clearly.

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.md
  • apps/docs/extract/index.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: Applies to vitest.config.mts : Do not modify root configuration files (eslint.config.mjs, tsconfig.base.json, nx.json, vite.config, vitest.config.mts). If changes are necessary, provide suggested changes and ask the user

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: Applies to eslint.config.mjs : Do not modify root configuration files (eslint.config.mjs, tsconfig.base.json, nx.json, vite.config, vitest.config.mts). If changes are necessary, provide suggested changes and ask the user

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: Applies to tsconfig.base.json : Do not modify root configuration files (eslint.config.mjs, tsconfig.base.json, nx.json, vite.config, vitest.config.mts). If changes are necessary, provide suggested changes and ask the user

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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/extract/deterministic/typescript/getting-started.md
📚 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/**/*.{ts,tsx} : Use living-architecture/[pkg-name] for imports from other workspace projects, not relative paths like ../../packages/[pkg-name].

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: Applies to nx.json : Do not modify root configuration files (eslint.config.mjs, tsconfig.base.json, nx.json, vite.config, vitest.config.mts). If changes are necessary, provide suggested changes and ask the user

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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: When discussing domain concepts, clarify terminology with the user and add new terms to `docs/architecture/domain-terminology/contextive/definitions.glossary.yml`

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.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} : Check lint rules (eslint.config.mjs) before providing feedback to ensure suggestions don't contradict lint rules. Never suggest using banned keywords like 'as' or 'let'.

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.md
📚 Learning: 2026-01-11T23:03:47.475Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 130
File: apps/docs/extract/deterministic/typescript/examples.md:5-9
Timestamp: 2026-01-11T23:03:47.475Z
Learning: In documentation files, duplicate external repository links are acceptable when they serve different purposes in different contexts (e.g., getting-started showing next steps vs examples showing complete working configs).

Applied to files:

  • apps/docs/extract/deterministic/typescript/getting-started.md
📚 Learning: 2026-01-11T22:42:36.650Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/testing.md:0-0
Timestamp: 2026-01-11T22:42:36.650Z
Learning: Applies to docs/conventions/**/*.spec.{ts,tsx,js,jsx} : Test names should describe outcomes, not actions. Use pattern: '[outcome] when [condition]'. For example: 'returns empty array when input is null' not 'test null input'.

Applied to files:

  • apps/docs/reference/extraction-config/examples.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,js,jsx} : Intention-revealing names only. Never use `data`, `utils`, `helpers`, `handler`, `processor`. Name things for what they do in the domain.

Applied to files:

  • apps/docs/reference/extraction-config/examples.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: Applies to **/*.{ts,tsx} : Look for and follow standard implementation patterns defined in `docs/conventions/standard-patterns.md`

Applied to files:

  • apps/docs/reference/extraction-config/examples.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). (2)
  • GitHub Check: main
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (24)
apps/docs/extract/deterministic/typescript/enforcement.md (4)

1-14: LGTM!

Clear and concise explanation of why enforcement matters, with actionable problem statements (false negatives, incomplete architecture, silent failures).


27-42: LGTM!

ESLint flat config example is correct. The plugin import path @living-architecture/riviere-extract-conventions/eslint-plugin and rule name conventions/require-component-decorator align with the established conventions. Based on learnings, this matches the expected ESLint plugin configuration.


65-87: Decorator list is complete and well-organized.

All 11 decorators documented in the PR objectives are covered: 3 container decorators, 3 class-as-component decorators, 3 method-level decorators, plus @Custom and @Ignore. This aligns with the learnings for riviere-extract-conventions.


164-168: All cross-link targets exist and are correctly referenced. The language-agnostic enforcement page at /extract/deterministic/enforcement is present, along with the TypeScript-specific getting-started and decorators reference pages.

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

1-9: LGTM!

Clear auto-generation notice with regeneration command helps maintainers understand the workflow.


25-42: Module schema correctly documents all 6 component types.

The schema reference includes all required component types (api, useCase, domainOp, event, eventHandler, ui) and documents the extends field for config inheritance. This aligns with the extraction config schema requirements from learnings.

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

11-66: LGTM! Comprehensive NestJS example.

The example correctly shows:

  • Method-level API detection using NestJS decorators with from validation
  • Class-level useCase detection via @Injectable
  • Proper use of notUsed: true for unused component types
  • Clear code example showing what gets extracted

67-121: LGTM! Well-structured DDD example.

Demonstrates multiple detection strategies: inheritance (extendsClass), naming conventions (nameEndsWith), nested predicates (inClassWith), and decorator-based (hasDecorator). Good variety for a DDD-style codebase.


339-371: LGTM! Extends pattern promotes DRY configuration.

The extends pattern example clearly shows how to inherit detection rules while allowing selective overrides. The benefits section effectively summarizes the value proposition.

apps/docs/reference/extraction-config/predicates.md (2)

10-23: LGTM! Clear predicate overview.

The summary table provides a quick reference for all 9 predicates with concise descriptions. The document structure (overview → individual predicates → see also) is well-organized for reference use.


111-132: LGTM! Logical operators correctly documented.

The and and or predicates correctly specify the minimum of 2 predicates requirement, enabling proper composition of detection rules as per the learnings.

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

178-214: LGTM! TypeScript Extraction sidebar group is well-structured.

The new sidebar group mirrors the AI-Assisted Extraction workflow structure with parallel step-by-step navigation, plus the enforcement page. This provides consistency for users familiar with the AI workflow.


278-298: LGTM! Extraction Config reference section added.

The new reference section includes all four key reference pages (Schema, Predicates, Decorators, Examples) that support the extraction documentation. All linked pages exist and are properly organized. This aligns with the PR objectives for comprehensive reference material.

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

1-9: Excellent documentation structure.

The progressive organization from installation → categories → detailed examples → usage guidance → enforcement creates a clear learning path. The category table and "When to Use Which" decision matrix are particularly helpful for quick reference.

Also applies to: 11-19, 76-119, 202-237

apps/docs/extract/deterministic/typescript/getting-started.md (1)

1-213: Well-structured getting-started tutorial.

The 10-minute format with clear prerequisites, step-by-step instructions, sample outputs, and progressive disclosure of advanced topics (customization, enforcement, full workflow) creates an effective learning path. The explanation of the domain field default value (lines 101-102) and the distinction between when customization is required (lines 124-127) help prevent confusion.

apps/docs/extract/index.md (1)

1-60: Clear workflow choice and extraction-enforcement cycle.

The restructured page effectively distinguishes between AI-assisted (language-agnostic) and TypeScript (config-driven) workflows with clear "Best for" guidance. The new Extraction and Enforcement cycle (lines 37-52) with the 4-step reinforcing loop (Define → Build → Extract → Enforce) makes the relationship between extraction and enforcement explicit.

apps/docs/extract/deterministic/typescript/workflow/step-4-link.md (1)

1-32: Transparent about current AI-assisted implementation.

The tip box (lines 5-7) clearly communicates that this step currently uses AI-assisted linking while deterministic tooling is planned. Delegating to the existing AI-assisted workflow (line 13) is appropriate and avoids documentation duplication. The concrete examples of what gets linked (lines 15-20) and expected outputs (lines 22-26) provide useful context.

apps/docs/extract/deterministic/typescript/workflow/step-5-enrich.md (1)

1-31: Consistent with Step 4 approach.

The documentation pattern matches step-4-link.md: clear tip box about AI-assisted implementation (lines 5-7), concrete examples of what gets enriched (lines 15-19), and appropriate delegation to the existing AI-assisted workflow. The focus on DomainOp enrichment (state changes, business rules, pre/post conditions) is well-scoped.

apps/docs/extract/deterministic/typescript/workflow/step-2-define.md (1)

1-31: LGTM!

The documentation clearly describes Step 2's purpose, outputs, and next steps. The deferral to AI-assisted workflow with a future enhancement note is consistent with the overall workflow design.

apps/docs/extract/deterministic/typescript/workflow/step-6-validate.md (3)

41-47: LGTM!

The iteration guidance clearly explains how to improve extraction results through config updates, decorator additions, and re-running extraction. This aligns well with the deterministic extraction workflow's emphasis on repeatability and continuous improvement.


35-37: Enforcement guide exists at the referenced path /extract/deterministic/typescript/enforcement.


30-33: The Éclair visualization URL at line 32 is correct and accessible. The link https://living-architecture.dev/eclair/ points to the official Living Architecture (Rivière) interactive visualization tool, confirmed operational with HTTP 200 status.

apps/docs/extract/deterministic/typescript/workflow/step-3-extract.md (1)

69-69: All referenced extraction-config documentation files exist: decorators.md, examples.md, and predicates.md are present in apps/docs/reference/extraction-config/.

apps/docs/extract/deterministic/typescript/workflow/index.md (1)

119-151: Remove this review comment—the local workflow documentation for Steps 4 and 5 already exists.

All workflow step files (1–6) exist locally at apps/docs/extract/deterministic/typescript/workflow/, including step-4-link.md and step-5-enrich.md. The index.md file is referencing remote GitHub URLs by design, and this is not a documentation gap.

Likely an incorrect or invalid review comment.

Comment thread apps/docs/extract/deterministic/typescript/workflow/index.md Outdated
Comment thread apps/docs/reference/extraction-config/decorators.md
Comment thread apps/docs/reference/extraction-config/decorators.md Outdated
Comment thread apps/docs/reference/extraction-config/examples.md
Comment thread apps/docs/reference/extraction-config/schema.md
- Use local step page links in workflow index instead of raw GitHub URLs
- Fix config path in decorators.md to use extends pattern
- Fix naming convention example to match pattern (Order not OrderEntity)

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: 2

🤖 Fix all issues with AI agents
In @apps/docs/extract/deterministic/typescript/workflow/index.md:
- Around line 131-138: Update the Output section in
apps/docs/extract/deterministic/typescript/workflow/index.md: remove the faux
.riviere/ directory tree and instead document that the extract command writes
JSON to stdout (JSON.stringify of an object containing the extracted components
array), that --dry-run prints human-readable text counts to the console, and
clarify that .riviere/graph.json is produced by the builder init/finalize flow
(not extract) and that markdown files (metadata.md, component-definitions.md,
linking-rules.md) are not generated by the CLI.

In @apps/docs/reference/extraction-config/decorators.md:
- Around line 48-49: Rename the class named Order to OrderEntity to align with
the DDD naming convention used elsewhere; update all internal references/usages
(imports, tests, examples) that reference Order and keep the @DomainOpContainer
decorator applied to the renamed class (i.e., change class Order { ... } to
class OrderEntity { ... } and update any config or example that relies on the
nameEndsWith: "Entity" rule). Ensure builders, serializers, or example snippets
that reference Order are renamed accordingly so the codebase remains consistent.
📜 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 ad381af and f5dca3a.

📒 Files selected for processing (3)
  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/examples.md
🧰 Additional context used
🧠 Learnings (44)
📓 Common learnings
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*.{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 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: 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
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
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
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
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: When modifying CLI commands in the riviere-cli tool, update the corresponding workflow prompts in docs/workflow/ directory (step-1 through step-6) to keep the extraction workflow in sync
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
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
📚 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/extract/deterministic/typescript/workflow/index.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/examples.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/extract/deterministic/typescript/workflow/index.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/examples.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/extract/deterministic/typescript/workflow/index.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/examples.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/extract/deterministic/typescript/workflow/index.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/examples.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} : Implement extraction logic as pure functions with no side effects

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/reference/extraction-config/examples.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/**/*.test.{ts,tsx} : Implement integration tests for end-to-end extraction from TypeScript code to JSON output

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/index.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: When modifying CLI commands in the riviere-cli tool, update the corresponding workflow prompts in docs/workflow/ directory (step-1 through step-6) to keep the extraction workflow in sync

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/reference/extraction-config/decorators.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code (not test files) must align with architecture boundaries and layering requirements as defined in @/docs/architecture/overview.md and @/docs/conventions/codebase-structure.md

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/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/**/*.{ts,tsx} : Apply decorators from `living-architecture/riviere-extract-conventions` to mark all classes as architectural components

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/examples.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,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All production code must comply with coding standards and design principles as defined in @/docs/conventions/software-design.md and @/docs/conventions/standard-patterns.md

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/index.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/extract/deterministic/typescript/workflow/index.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: Follow docs/workflow/task-workflow.md from start to finish when working on any task. Do not make any changes or commit any code without following these steps exactly

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/index.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/extract/deterministic/typescript/workflow/index.md
  • apps/docs/reference/extraction-config/decorators.md
📚 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/**/*.{ts,tsx} : Use living-architecture/[pkg-name] for imports from other workspace projects, not relative paths like ../../packages/[pkg-name].

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/reference/extraction-config/decorators.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,jsx,css,scss,!(**/*.test.ts,**/*.test.tsx,**/*.test.js,**/*.spec.ts,**/*.spec.tsx,**/*.spec.js)} : All UI code must conform to brand identity guidelines. Design elements (colors, typography, spacing) must come from centralized sources (@/docs/brand/ or @/apps/[app]/docs/brand/), not hardcoded values. Use CSS custom properties or centralized constants. Do not use hardcoded hex colors or ad-hoc design values.

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/index.md
📚 Learning: 2026-01-10T19:16:56.186Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 120
File: docs/workflow/parallel-workflow.md:1-555
Timestamp: 2026-01-10T19:16:56.186Z
Learning: Investigation task documents (like `docs/workflow/parallel-workflow.md`) should focus on design and workflow specification rather than implementation concerns such as phased rollout plans, success metrics, and rollout risk mitigation. These operational details are addressed later when creating tasks to build the workflow.

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/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: 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/extract/deterministic/typescript/workflow/index.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/examples.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/extract/deterministic/typescript/workflow/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 `Ignore` decorator to exclude classes or methods from architectural extraction analysis

Applied to files:

  • apps/docs/extract/deterministic/typescript/workflow/index.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/examples.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/extract/deterministic/typescript/workflow/index.md
  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/examples.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 `DomainOpContainer`, `APIContainer`, or `EventHandlerContainer` decorators on classes to mark container components where all public methods inherit the component type

Applied to files:

  • apps/docs/reference/extraction-config/decorators.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: Ensure container decorator classes have their public methods extracted as individual components by the extraction tooling

Applied to files:

  • apps/docs/reference/extraction-config/decorators.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/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/examples.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/decorators.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} : Enforce the ESLint rule `require-component-decorator` to ensure all classes are annotated with component decorators

Applied to files:

  • apps/docs/reference/extraction-config/decorators.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 `UseCase`, `Event`, or `UI` class-level decorators to mark the class itself as a component

Applied to files:

  • apps/docs/reference/extraction-config/decorators.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: Decorators must have no runtime behavior and exist only for extraction purposes

Applied to files:

  • apps/docs/reference/extraction-config/decorators.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: Applies to **/*.{ts,tsx} : Follow `docs/conventions/software-design.md` when writing, editing, refactoring, or reviewing code

Applied to files:

  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/examples.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,js,jsx} : Don't abbreviate. Use full, descriptive names for variables, functions, and classes.

Applied to files:

  • apps/docs/reference/extraction-config/decorators.md
📚 Learning: 2026-01-11T22:42:36.650Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/testing.md:0-0
Timestamp: 2026-01-11T22:42:36.650Z
Learning: Applies to docs/conventions/**/*.spec.{ts,tsx,js,jsx} : Avoid implementation coupling in tests. Test behavior outcomes, not internal implementation details. For example, assert on result values rather than mock method call signatures.

Applied to files:

  • apps/docs/reference/extraction-config/decorators.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: Applies to **/*.{ts,tsx} : Avoid anti-patterns documented in `docs/conventions/anti-patterns.md`

Applied to files:

  • apps/docs/reference/extraction-config/decorators.md
  • apps/docs/reference/extraction-config/examples.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:

  • apps/docs/reference/extraction-config/decorators.md
📚 Learning: 2026-01-11T22:42:12.408Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/anti-patterns.md:0-0
Timestamp: 2026-01-11T22:42:12.408Z
Learning: Applies to docs/conventions/**/*.{js,ts,jsx,tsx} : Never pass empty strings into parameters of type string without justification. An empty string hints at an implicit concept and may indicate the need for proper type design, fail-fast error handling, or conditional method calls.

Applied to files:

  • apps/docs/reference/extraction-config/decorators.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/decorators.md
📚 Learning: 2026-01-09T20:08:44.180Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 88
File: packages/riviere-cli/src/commands/extract/extract.ts:109-114
Timestamp: 2026-01-09T20:08:44.180Z
Learning: Applies to packages/riviere-cli/src/commands/extract/**/*.{ts,tsx} : CLI extraction commands should only catch and format expected validation errors as structured JSON. System-level exceptions (disk I/O failures, OOM, AST parse errors) should fail loudly with stack traces for debugging rather than being wrapped in try-catch and converted to JSON errors. This follows the fail-fast principle: validate inputs explicitly, then let unexpected failures surface clearly.

Applied to files:

  • apps/docs/reference/extraction-config/decorators.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: Configure ESLint to enforce component decorators on classes using the `require-component-decorator` rule from `living-architecture/riviere-extract-conventions/eslint-plugin`

Applied to files:

  • apps/docs/reference/extraction-config/decorators.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: Applies to **/*.{ts,tsx} : Look for and follow standard implementation patterns defined in `docs/conventions/standard-patterns.md`

Applied to files:

  • apps/docs/reference/extraction-config/examples.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 glob pattern matching for module-based organization of extraction rules

Applied to files:

  • apps/docs/reference/extraction-config/examples.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,js,jsx} : Feature Envy Detection: If a method uses another class's data more than its own, move it there.

Applied to files:

  • apps/docs/reference/extraction-config/examples.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/**/*.test.{ts,tsx} : Implement unit tests for each predicate type in isolation with positive and negative cases

Applied to files:

  • apps/docs/reference/extraction-config/examples.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} : Compose detection rules via and/or logic for predicates

Applied to files:

  • apps/docs/reference/extraction-config/examples.md
📚 Learning: 2026-01-11T22:42:36.650Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/testing.md:0-0
Timestamp: 2026-01-11T22:42:36.650Z
Learning: Applies to docs/conventions/**/*.spec.{ts,tsx,js,jsx} : Test names should describe outcomes, not actions. Use pattern: '[outcome] when [condition]'. For example: 'returns empty array when input is null' not 'test null input'.

Applied to files:

  • apps/docs/reference/extraction-config/examples.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,js,jsx} : Intention-revealing names only. Never use `data`, `utils`, `helpers`, `handler`, `processor`. Name things for what they do in the domain.

Applied to files:

  • apps/docs/reference/extraction-config/examples.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). (1)
  • GitHub Check: main
🔇 Additional comments (1)
apps/docs/reference/extraction-config/decorators.md (1)

148-149: Consider aligning entity naming with DDD pattern.

Similar to the container example, consider using OrderEntity instead of Order to maintain consistency with the DDD naming convention shown in examples.md.

⛔ Skipped due to learnings
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: Use domain language for package naming, not technical jargon. Example: living-architecture/order-processing instead of living-architecture/order-utils.
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 `DomainOpContainer`, `APIContainer`, or `EventHandlerContainer` decorators on classes to mark container components where all public methods inherit the component type

Comment thread apps/docs/extract/deterministic/typescript/workflow/index.md
Comment thread apps/docs/reference/extraction-config/decorators.md
@sonarqubecloud

Copy link
Copy Markdown

@NTCoding
NTCoding merged commit be2aee2 into main Jan 13, 2026
16 of 17 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.

[M5-D5.3] Create public docs for deterministic extraction

1 participant