Repository navigation
docs(extraction): add comprehensive deterministic extraction docs - #130
Conversation
…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]>
…te-public-docs-for
📝 WalkthroughWalkthroughAdds 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
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related issues
Possibly related PRs
Suggested labels
Poem
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. 📜 Recent review detailsConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro 📒 Files selected for processing (1)
🧰 Additional context used🧠 Learnings (5)📓 Common learnings📚 Learning: 2026-01-11T22:40:43.505ZApplied to files:
📚 Learning: 2026-01-13T11:37:59.334ZApplied to files:
📚 Learning: 2026-01-13T11:37:59.334ZApplied to files:
📚 Learning: 2026-01-13T11:37:59.334ZApplied to files:
⏰ 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)
🔇 Additional comments (2)
Comment |
Deploying living-architecture with
|
| 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 |
PR Compliance Guide 🔍Below is a summary of compliance checks for this PR:
Compliance status legend🟢 - Fully Compliant🟡 - Partial Compliant 🔴 - Not Compliant ⚪ - Requires Further Human Verification 🏷️ - Compliance label |
||||||||||||||||||||||||||||||||||||
PR Code Suggestions ✨Explore these optional code suggestions:
|
||||||||||||||||||||
There was a problem hiding this comment.
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 onriviere-extract-config:generate-docsto ensure generated docs exist before copying.The
buildtarget copies generated documentation files but doesn't explicitly depend on the target that generates them. If the docs haven't been generated yet, thecpcommands 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
⛔ Files ignored due to path filters (52)
apps/docs/api/generated/riviere-builder/classes/ComponentNotFoundError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/CustomTypeAlreadyDefinedError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/CustomTypeNotFoundError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/DomainNotFoundError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/DuplicateComponentError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/DuplicateDomainError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/InvalidEnrichmentTargetError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/RiviereBuilder.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/functions/findNearMatches.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/classes/ComponentNotFoundError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/classes/RiviereQuery.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/functions/parseComponentId.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/functions/parseDomainName.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/functions/parseEntityName.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/functions/parseEventId.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/functions/parseEventName.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/functions/parseHandlerId.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/functions/parseHandlerName.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/functions/parseLinkId.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/functions/parseOperationName.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/functions/parseState.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/ComponentCounts.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/ComponentModification.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/CrossDomainLink.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/DiffStats.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/Domain.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/DomainConnection.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/ExternalDomain.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/Flow.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/FlowStep.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/GraphDiff.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/GraphStats.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/SearchWithFlowOptions.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/SearchWithFlowResult.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/ValidationError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/interfaces/ValidationResult.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/type-aliases/ComponentId.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/type-aliases/DomainName.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/type-aliases/EntityName.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/type-aliases/EventId.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/type-aliases/EventName.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/type-aliases/HandlerId.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/type-aliases/HandlerName.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/type-aliases/LinkId.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/type-aliases/LinkType.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/type-aliases/OperationName.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/type-aliases/State.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-query/type-aliases/ValidationErrorCode.mdis excluded by!**/generated/**apps/docs/public/extraction-enforcement-cycle.svgis excluded by!**/*.svgpackages/riviere-extract-config/docs/generated/predicates.mdis excluded by!**/generated/**packages/riviere-extract-config/docs/generated/schema.mdis excluded by!**/generated/**packages/riviere-extract-config/scripts/generate-docs.d.ts.mapis excluded by!**/*.map
📒 Files selected for processing (18)
apps/docs/.vitepress/config.tsapps/docs/extract/deterministic/enforcement.mdapps/docs/extract/deterministic/index.mdapps/docs/extract/deterministic/typescript/decorators.mdapps/docs/extract/deterministic/typescript/enforcement.mdapps/docs/extract/deterministic/typescript/examples.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/docs/extract/index.mdapps/docs/index.mdapps/docs/package.jsonapps/docs/reference/cli/cli-reference.mdapps/docs/reference/extraction-config/predicates.mdapps/docs/reference/extraction-config/schema.mdpackages/riviere-extract-config/project.jsonpackages/riviere-extract-config/scripts/generate-docs.d.tspackages/riviere-extract-config/scripts/generate-docs.tspackages/riviere-extract-config/tsconfig.jsonpackages/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.tspackages/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.mjsfor all linting
Files:
packages/riviere-extract-config/scripts/generate-docs.tspackages/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.tspackages/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.tspackages/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.tspackages/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.mdapps/docs/extract/deterministic/typescript/examples.mdpackages/riviere-extract-config/scripts/generate-docs.tsapps/docs/package.jsonapps/docs/.vitepress/config.tsapps/docs/index.mdapps/docs/extract/deterministic/index.mdapps/docs/extract/index.mdapps/docs/extract/deterministic/typescript/getting-started.mdpackages/riviere-extract-config/scripts/generate-docs.d.tspackages/riviere-extract-config/project.jsonapps/docs/extract/deterministic/enforcement.mdapps/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.mdpackages/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.mdapps/docs/extract/deterministic/typescript/examples.mdpackages/riviere-extract-config/scripts/generate-docs.tspackages/riviere-extract-config/tsconfig.jsonapps/docs/package.jsonapps/docs/.vitepress/config.tsapps/docs/index.mdapps/docs/extract/deterministic/index.mdapps/docs/extract/deterministic/typescript/getting-started.mdpackages/riviere-extract-config/scripts/generate-docs.d.tspackages/riviere-extract-config/project.jsonapps/docs/extract/deterministic/enforcement.mdapps/docs/reference/cli/cli-reference.mdpackages/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.mdapps/docs/extract/deterministic/typescript/enforcement.mdapps/docs/extract/deterministic/typescript/examples.mdpackages/riviere-extract-config/scripts/generate-docs.tspackages/riviere-extract-config/tsconfig.jsonapps/docs/package.jsonapps/docs/.vitepress/config.tsapps/docs/index.mdapps/docs/extract/deterministic/index.mdapps/docs/extract/deterministic/typescript/decorators.mdapps/docs/extract/index.mdapps/docs/extract/deterministic/typescript/getting-started.mdpackages/riviere-extract-config/scripts/generate-docs.d.tspackages/riviere-extract-config/project.jsonapps/docs/extract/deterministic/enforcement.mdapps/docs/reference/cli/cli-reference.mdpackages/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.mdapps/docs/extract/deterministic/typescript/examples.mdapps/docs/index.mdapps/docs/extract/deterministic/index.mdapps/docs/extract/deterministic/typescript/decorators.mdapps/docs/extract/index.mdapps/docs/extract/deterministic/typescript/getting-started.mdpackages/riviere-extract-config/scripts/generate-docs.d.tsapps/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.mdapps/docs/extract/deterministic/typescript/examples.mdpackages/riviere-extract-config/scripts/generate-docs.tsapps/docs/package.jsonapps/docs/index.mdapps/docs/extract/deterministic/index.mdapps/docs/extract/index.mdapps/docs/extract/deterministic/typescript/getting-started.mdpackages/riviere-extract-config/scripts/generate-docs.d.tspackages/riviere-extract-config/project.jsonapps/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.mdapps/docs/extract/deterministic/typescript/examples.mdpackages/riviere-extract-config/tsconfig.jsonapps/docs/index.mdpackages/riviere-extract-config/scripts/generate-docs.d.tspackages/riviere-extract-config/project.jsonpackages/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.mdapps/docs/extract/deterministic/typescript/enforcement.mdapps/docs/extract/deterministic/typescript/examples.mdpackages/riviere-extract-config/scripts/generate-docs.tsapps/docs/index.mdapps/docs/extract/deterministic/index.mdapps/docs/extract/deterministic/typescript/decorators.mdapps/docs/extract/deterministic/typescript/getting-started.mdpackages/riviere-extract-config/scripts/generate-docs.d.tsapps/docs/extract/deterministic/enforcement.mdapps/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.mdapps/docs/extract/deterministic/index.mdapps/docs/extract/index.mdapps/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.mdapps/docs/extract/deterministic/typescript/decorators.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/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.mdapps/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.mdapps/docs/extract/deterministic/typescript/decorators.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/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.mdapps/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.mdapps/docs/extract/deterministic/typescript/decorators.mdapps/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.mdapps/docs/extract/deterministic/typescript/decorators.mdapps/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.mdapps/docs/extract/deterministic/typescript/examples.mdapps/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.mdapps/docs/extract/deterministic/typescript/examples.mdapps/docs/index.mdapps/docs/extract/deterministic/typescript/decorators.mdapps/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.mdapps/docs/extract/deterministic/typescript/examples.mdapps/docs/extract/deterministic/typescript/decorators.mdapps/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.mdapps/docs/extract/deterministic/typescript/decorators.mdapps/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.mdapps/docs/extract/deterministic/typescript/decorators.mdapps/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.tspackages/riviere-extract-config/tsconfig.jsonapps/docs/package.jsonapps/docs/index.mdapps/docs/extract/deterministic/typescript/getting-started.mdpackages/riviere-extract-config/scripts/generate-docs.d.tspackages/riviere-extract-config/project.jsonpackages/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.tspackages/riviere-extract-config/tsconfig.jsonapps/docs/.vitepress/config.tsapps/docs/index.mdapps/docs/extract/deterministic/index.mdpackages/riviere-extract-config/scripts/generate-docs.d.tspackages/riviere-extract-config/project.jsonapps/docs/reference/cli/cli-reference.mdpackages/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.tsapps/docs/package.jsonpackages/riviere-extract-config/project.jsonapps/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.tspackages/riviere-extract-config/tsconfig.jsonapps/docs/index.mdapps/docs/extract/deterministic/typescript/getting-started.mdpackages/riviere-extract-config/scripts/generate-docs.d.tspackages/riviere-extract-config/project.jsonpackages/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.tspackages/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.jsonapps/docs/.vitepress/config.tsapps/docs/extract/deterministic/index.mdpackages/riviere-extract-config/scripts/generate-docs.d.tspackages/riviere-extract-config/project.jsonpackages/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.jsonpackages/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.jsonpackages/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.jsonpackages/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.jsonpackages/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.jsonpackages/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.jsonpackages/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.jsonpackages/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.jsonpackages/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.jsonapps/docs/extract/index.mdapps/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.jsonpackages/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.mdapps/docs/extract/index.mdapps/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.mdapps/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
- 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]>
There was a problem hiding this comment.
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
⛔ Files ignored due to path filters (2)
packages/riviere-extract-config/docs/generated/predicates.mdis excluded by!**/generated/**packages/riviere-extract-config/docs/generated/schema.mdis excluded by!**/generated/**
📒 Files selected for processing (4)
apps/docs/extract/deterministic/typescript/enforcement.mdapps/docs/extract/deterministic/typescript/getting-started.mdpackages/riviere-extract-config/scripts/generate-docs.tspackages/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.mjsfor 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.tsapps/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.tsapps/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.tsapps/docs/extract/deterministic/typescript/enforcement.mdpackages/riviere-extract-config/tsconfig.scripts.jsonapps/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.tspackages/riviere-extract-config/tsconfig.scripts.jsonapps/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.tspackages/riviere-extract-config/tsconfig.scripts.jsonapps/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.tspackages/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.tsapps/docs/extract/deterministic/typescript/enforcement.mdapps/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.mdapps/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.mdapps/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.mdapps/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.mdapps/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.jsonapps/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: truesince 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
isSchemaDeftype 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, theisSchematype 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.
Address CodeRabbit feedback - documentation should match the actual enforced requirement in the project. Co-Authored-By: Claude Opus 4.5 <[email protected]>
There was a problem hiding this comment.
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
📒 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 extractCLI to ensure the JSON structure, field names, and format match what users will see. Particular concern: confirm thedomainfield is populated from the config module name, and verify the complete output structure.
142-167: Configuration example correctly uses all 6 component types withnotUsedpattern.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/.riviereConfirm these pages exist in the documentation structure and the external link remains valid and up-to-date.
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]>
Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: Claude Opus 4.5 <[email protected]>
There was a problem hiding this comment.
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
📒 Files selected for processing (2)
apps/docs/extract/deterministic/typescript/getting-started.mdapps/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.mdapps/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.mdapps/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.mdapps/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.mdapps/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.mdapps/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
hasDecoratorandinClassWithpatterns- 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-conventionsare correct. BothAPIContainerandUseCaseare 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. Theextractcommand exists at the top level, the--configflag accepts file system paths, and the parser (using the yaml library) supports both JSON and YAML configurations, as JSON is valid YAML.
…te-public-docs-for
Co-Authored-By: Claude Opus 4.5 <[email protected]>
There was a problem hiding this comment.
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
⛔ Files ignored due to path filters (1)
packages/riviere-extract-config/docs/generated/schema.mdis excluded by!**/generated/**
📒 Files selected for processing (3)
apps/docs/extract/deterministic/typescript/examples.mdapps/docs/extract/deterministic/typescript/getting-started.mdpackages/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.mjsfor 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.mdpackages/riviere-extract-config/scripts/generate-docs.tsapps/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.mdpackages/riviere-extract-config/scripts/generate-docs.tsapps/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.mdpackages/riviere-extract-config/scripts/generate-docs.tsapps/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.mdpackages/riviere-extract-config/scripts/generate-docs.tsapps/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.mdapps/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.mdpackages/riviere-extract-config/scripts/generate-docs.tsapps/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.mdapps/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.mdapps/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.mdapps/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.tsapps/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.tsapps/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.tsapps/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.tsapps/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 usestsxfor direct TypeScript execution.
15-21: LGTM!Custom error class correctly extends
Errorand sets thenameproperty 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
escapePipesfunction 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
oneOfvariants 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
isSchemaDeftype guard provides reasonable runtime validation.
213-258: LGTM!The parameter generation logic correctly handles the three predicate structures: nested objects with properties,
$refpredicates, 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
hasKeyutility 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: truefor unused types. This aligns with the learning that "unused component types must be explicitly marked withnotUsed: truerather 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 thathttps://github.com/NTCoding/ecommerce-demo-app/tree/main/.rivierereturns HTTP 200, indicating both the repository and the specific path exist and are functional. No action required at this time.
130-146: Theextendsfeature is fully implemented and documented.The extraction config schema properly defines the
extendsfield 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
andpredicate to combine conditions- Proper
inClassWithnesting for container-based detectionThe 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
hasJSDocwithtagfor all component types.The code examples properly demonstrate JSDoc comment syntax with the
@api,@usecase,@domainop,@event, and@handlertags.
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: truefor 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
extendsfeature 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
extendsin 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.
- 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]>
There was a problem hiding this comment.
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
📒 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-runoption 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: truefor 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.
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]>
…te-public-docs-for
- 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]>
There was a problem hiding this comment.
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
⛔ Files ignored due to path filters (10)
apps/docs/api/generated/riviere-builder/README.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/BuildValidationError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/ComponentId.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/DirectoryNotFoundError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/InvalidGraphError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/MissingDomainsError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/MissingRequiredPropertiesError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/MissingSourcesError.mdis excluded by!**/generated/**apps/docs/api/generated/riviere-builder/classes/RiviereBuilder.mdis excluded by!**/generated/**packages/riviere-extract-config/docs/generated/schema.mdis excluded by!**/generated/**
📒 Files selected for processing (15)
apps/docs/.vitepress/config.tsapps/docs/extract/deterministic/typescript/enforcement.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/docs/extract/deterministic/typescript/workflow/index.mdapps/docs/extract/deterministic/typescript/workflow/step-1-understand.mdapps/docs/extract/deterministic/typescript/workflow/step-2-define.mdapps/docs/extract/deterministic/typescript/workflow/step-3-extract.mdapps/docs/extract/deterministic/typescript/workflow/step-4-link.mdapps/docs/extract/deterministic/typescript/workflow/step-5-enrich.mdapps/docs/extract/deterministic/typescript/workflow/step-6-validate.mdapps/docs/extract/index.mdapps/docs/reference/extraction-config/decorators.mdapps/docs/reference/extraction-config/examples.mdapps/docs/reference/extraction-config/predicates.mdapps/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.mdapps/docs/reference/extraction-config/decorators.mdapps/docs/extract/deterministic/typescript/workflow/step-4-link.mdapps/docs/reference/extraction-config/schema.mdapps/docs/extract/deterministic/typescript/enforcement.mdapps/docs/reference/extraction-config/predicates.mdapps/docs/extract/deterministic/typescript/workflow/step-6-validate.mdapps/docs/extract/deterministic/typescript/workflow/step-1-understand.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/docs/extract/deterministic/typescript/workflow/step-3-extract.mdapps/docs/extract/deterministic/typescript/workflow/index.mdapps/docs/.vitepress/config.tsapps/docs/extract/index.mdapps/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.mdapps/docs/reference/extraction-config/schema.mdapps/docs/extract/deterministic/typescript/workflow/step-6-validate.mdapps/docs/extract/deterministic/typescript/workflow/step-1-understand.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/docs/extract/deterministic/typescript/workflow/step-3-extract.mdapps/docs/extract/deterministic/typescript/workflow/index.mdapps/docs/.vitepress/config.tsapps/docs/extract/index.mdapps/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.mdapps/docs/reference/extraction-config/schema.mdapps/docs/extract/deterministic/typescript/workflow/step-6-validate.mdapps/docs/extract/deterministic/typescript/workflow/step-1-understand.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/docs/extract/deterministic/typescript/workflow/step-3-extract.mdapps/docs/extract/deterministic/typescript/workflow/index.mdapps/docs/.vitepress/config.tsapps/docs/extract/index.mdapps/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.mdapps/docs/reference/extraction-config/decorators.mdapps/docs/reference/extraction-config/schema.mdapps/docs/extract/deterministic/typescript/workflow/step-6-validate.mdapps/docs/extract/deterministic/typescript/workflow/step-1-understand.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/docs/extract/deterministic/typescript/workflow/step-3-extract.mdapps/docs/extract/deterministic/typescript/workflow/index.mdapps/docs/extract/index.mdapps/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.mdapps/docs/extract/deterministic/typescript/workflow/step-4-link.mdapps/docs/reference/extraction-config/schema.mdapps/docs/reference/extraction-config/predicates.mdapps/docs/extract/deterministic/typescript/workflow/step-6-validate.mdapps/docs/extract/deterministic/typescript/workflow/step-1-understand.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/docs/extract/deterministic/typescript/workflow/step-3-extract.mdapps/docs/extract/deterministic/typescript/workflow/index.mdapps/docs/.vitepress/config.tsapps/docs/extract/index.mdapps/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.mdapps/docs/reference/extraction-config/schema.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/docs/.vitepress/config.tsapps/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.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/docs/extract/deterministic/typescript/workflow/step-3-extract.mdapps/docs/extract/deterministic/typescript/workflow/index.mdapps/docs/.vitepress/config.tsapps/docs/extract/index.mdapps/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.mdapps/docs/extract/deterministic/typescript/workflow/step-1-understand.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/docs/extract/deterministic/typescript/workflow/step-3-extract.mdapps/docs/extract/deterministic/typescript/workflow/index.mdapps/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.mdapps/docs/reference/extraction-config/decorators.mdapps/docs/reference/extraction-config/schema.mdapps/docs/extract/deterministic/typescript/enforcement.mdapps/docs/reference/extraction-config/predicates.mdapps/docs/extract/deterministic/typescript/workflow/step-1-understand.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/docs/extract/deterministic/typescript/workflow/step-3-extract.mdapps/docs/extract/deterministic/typescript/workflow/index.mdapps/docs/extract/index.mdapps/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.mdapps/docs/extract/deterministic/typescript/workflow/step-4-link.mdapps/docs/extract/deterministic/typescript/workflow/step-6-validate.mdapps/docs/extract/deterministic/typescript/workflow/step-1-understand.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/docs/extract/deterministic/typescript/workflow/step-5-enrich.mdapps/docs/extract/deterministic/typescript/workflow/index.mdapps/docs/.vitepress/config.tsapps/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.mdapps/docs/reference/extraction-config/schema.mdapps/docs/extract/deterministic/typescript/workflow/step-3-extract.mdapps/docs/.vitepress/config.tsapps/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.mdapps/docs/reference/extraction-config/decorators.mdapps/docs/extract/deterministic/typescript/enforcement.mdapps/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.mdapps/docs/reference/extraction-config/decorators.mdapps/docs/extract/deterministic/typescript/workflow/step-4-link.mdapps/docs/reference/extraction-config/schema.mdapps/docs/extract/deterministic/typescript/enforcement.mdapps/docs/reference/extraction-config/predicates.mdapps/docs/extract/deterministic/typescript/workflow/step-6-validate.mdapps/docs/extract/deterministic/typescript/workflow/step-1-understand.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/docs/extract/deterministic/typescript/workflow/step-5-enrich.mdapps/docs/extract/deterministic/typescript/workflow/step-3-extract.mdapps/docs/extract/deterministic/typescript/workflow/index.mdapps/docs/extract/index.mdapps/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.mdapps/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.mdapps/docs/extract/deterministic/typescript/enforcement.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/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.mdapps/docs/extract/deterministic/typescript/enforcement.mdapps/docs/extract/deterministic/typescript/workflow/step-5-enrich.mdapps/docs/extract/deterministic/typescript/workflow/step-3-extract.mdapps/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.mdapps/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.mdapps/docs/extract/deterministic/typescript/enforcement.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/docs/extract/deterministic/typescript/workflow/step-3-extract.mdapps/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.mdapps/docs/extract/deterministic/typescript/enforcement.mdapps/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.mdapps/docs/extract/deterministic/typescript/enforcement.mdapps/docs/extract/deterministic/typescript/workflow/step-1-understand.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/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.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/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.mdapps/docs/reference/extraction-config/predicates.mdapps/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.mdapps/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.mdapps/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.mdapps/docs/extract/deterministic/typescript/workflow/step-1-understand.mdapps/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.mdapps/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.mdapps/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.mdapps/docs/extract/deterministic/typescript/getting-started.mdapps/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.mdapps/docs/extract/deterministic/typescript/workflow/index.mdapps/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.mdapps/docs/.vitepress/config.tsapps/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.mdapps/docs/extract/deterministic/typescript/workflow/step-3-extract.mdapps/docs/.vitepress/config.tsapps/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.mdapps/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-pluginand rule nameconventions/require-component-decoratoralign 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
@Customand@Ignore. This aligns with the learnings forriviere-extract-conventions.
164-168: All cross-link targets exist and are correctly referenced. The language-agnostic enforcement page at/extract/deterministic/enforcementis 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 theextendsfield 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
fromvalidation- Class-level useCase detection via
@Injectable- Proper use of
notUsed: truefor 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
extendspattern 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
andandorpredicates 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
domainfield 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 linkhttps://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, andpredicates.mdare present inapps/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/, includingstep-4-link.mdandstep-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.
- 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]>
There was a problem hiding this comment.
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
📒 Files selected for processing (3)
apps/docs/extract/deterministic/typescript/workflow/index.mdapps/docs/reference/extraction-config/decorators.mdapps/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.mdapps/docs/reference/extraction-config/decorators.mdapps/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.mdapps/docs/reference/extraction-config/decorators.mdapps/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.mdapps/docs/reference/extraction-config/decorators.mdapps/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.mdapps/docs/reference/extraction-config/decorators.mdapps/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.mdapps/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.mdapps/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.mdapps/docs/reference/extraction-config/decorators.mdapps/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.mdapps/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.mdapps/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.mdapps/docs/reference/extraction-config/decorators.mdapps/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.mdapps/docs/reference/extraction-config/decorators.mdapps/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.mdapps/docs/reference/extraction-config/decorators.mdapps/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.mdapps/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.mdapps/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.mdapps/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
OrderEntityinstead ofOrderto 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
|



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/)TypeScript guides (
/extract/deterministic/typescript/)Reference documentation (
/reference/extraction-config/)Supporting assets
Test Plan
🤖 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/nodedependency version from 20.19.9 to 24.10.6Diagram Walkthrough
File Walkthrough
56 files
generate-docs.ts
Auto-generation script for extraction config documentationpackages/riviere-extract-config/scripts/generate-docs.ts
JSON Schema definitions
reference
generation
generate-docs.d.ts
Type declarations for documentation generatorpackages/riviere-extract-config/scripts/generate-docs.d.ts
examples.md
Real-world extraction configuration examplesapps/docs/extract/deterministic/typescript/examples.md
and multi-module projects
decorators.md
TypeScript decorator reference and usage guideapps/docs/extract/deterministic/typescript/decorators.md
method-level decorators, and others
to use which
getting-started.md
Getting started tutorial for TypeScript extractionapps/docs/extract/deterministic/typescript/getting-started.md
and extraction execution
output
enforcement.md
ESLint enforcement setup for architectural decoratorsapps/docs/extract/deterministic/typescript/enforcement.md
examples
error messages
enforcement.md
Enforcement principles for deterministic extractionapps/docs/extract/deterministic/enforcement.md
tests, CI gates, code review
TypeScript-specific guidance
index.md
Deterministic extraction overview and conceptsapps/docs/extract/deterministic/index.md
components
architecture
documentation
predicates.md
Auto-generated predicate reference documentationpackages/riviere-extract-config/docs/generated/predicates.md
predicates.md
Public predicate reference documentationapps/docs/reference/extraction-config/predicates.md
detailed sections
schema.md
Auto-generated schema reference documentationpackages/riviere-extract-config/docs/generated/schema.md
detection rules
schema.md
Public schema reference documentationapps/docs/reference/extraction-config/schema.md
specifications
index.md
Updated extraction overview with deterministic approachapps/docs/extract/index.md
deterministic approaches
cli-reference.md
CLI reference updates for extraction commandsapps/docs/reference/cli/cli-reference.md
riviere extractcommand
--configand--dry-runflags for extraction--event-schemaflag to builder add-component commandRiviereQuery.md
Updated API documentation line referencesapps/docs/api/generated/riviere-query/classes/RiviereQuery.md
RiviereQuery.ts
lines added)
RiviereBuilder.md
Updated builder API documentation line referencesapps/docs/api/generated/riviere-builder/classes/RiviereBuilder.md
builder.ts
lines added)
ComponentCounts.md
Updated ComponentCounts interface documentationapps/docs/api/generated/riviere-query/interfaces/ComponentCounts.md
domain-types.ts
lines added)
InvalidEnrichmentTargetError.md
Updated error class documentation and dependenciesapps/docs/api/generated/riviere-builder/classes/InvalidEnrichmentTargetError.md
added)
24.10.6
GraphStats.md
Updated GraphStats interface documentationapps/docs/api/generated/riviere-query/interfaces/GraphStats.md
domain-types.ts
lines added)
CustomTypeAlreadyDefinedError.md
Updated custom type error documentationapps/docs/api/generated/riviere-builder/classes/CustomTypeAlreadyDefinedError.md
added)
24.10.6
DiffStats.md
Updated DiffStats interface documentationapps/docs/api/generated/riviere-query/interfaces/DiffStats.md
domain-types.ts
lines added)
FlowStep.md
Updated FlowStep interface documentationapps/docs/api/generated/riviere-query/interfaces/FlowStep.md
domain-types.ts
lines added)
DomainConnection.md
Updated DomainConnection interface documentationapps/docs/api/generated/riviere-query/interfaces/DomainConnection.md
domain-types.ts
lines added)
ComponentModification.md
Updated ComponentModification interface documentationapps/docs/api/generated/riviere-query/interfaces/ComponentModification.md
domain-types.ts
lines added)
Domain.md
Updated Domain interface documentationapps/docs/api/generated/riviere-query/interfaces/Domain.md
domain-types.ts
lines added)
ExternalDomain.md
Updated ExternalDomain interface documentationapps/docs/api/generated/riviere-query/interfaces/ExternalDomain.md
domain-types.ts
lines added)
ValidationError.md
Updated ValidationError interface documentationapps/docs/api/generated/riviere-query/interfaces/ValidationError.md
domain-types.ts
lines added)
SearchWithFlowOptions.md
Updated SearchWithFlowOptions interface documentationapps/docs/api/generated/riviere-query/interfaces/SearchWithFlowOptions.md
flow-queries.ts
lines added)
GraphDiff.md
Update GraphDiff interface line number referencesapps/docs/api/generated/riviere-query/interfaces/GraphDiff.md
domain-types.ts:149todomain-types.ts:151code changes
SearchWithFlowResult.md
Update SearchWithFlowResult interface line referencesapps/docs/api/generated/riviere-query/interfaces/SearchWithFlowResult.md
domain-types.ts:200todomain-types.ts:202matchingIdsandvisibleIdsCrossDomainLink.md
Update CrossDomainLink interface line referencesapps/docs/api/generated/riviere-query/interfaces/CrossDomainLink.md
domain-types.ts:210todomain-types.ts:212members
Flow.md
Update Flow interface line referencesapps/docs/api/generated/riviere-query/interfaces/Flow.md
domain-types.ts:190todomain-types.ts:192entryPointandstepsValidationResult.md
Update ValidationResult interface line referencesapps/docs/api/generated/riviere-query/interfaces/ValidationResult.md
domain-types.ts:73todomain-types.ts:75members
index.md
Update homepage with flexible extraction and new packagesapps/docs/index.md
AI-Assisted ExtractiontoFlexibleExtractionconfig-based extraction approaches
AI-assisted extractiontoextraction and graph buildingriviere-extract-config,riviere-extract-conventions, andriviere-extract-tsfindNearMatches.md
Update findNearMatches function line referenceapps/docs/api/generated/riviere-builder/functions/findNearMatches.md
component-suggestion.ts:40tocomponent-suggestion.ts:55ValidationErrorCode.md
Update ValidationErrorCode type alias line referenceapps/docs/api/generated/riviere-query/type-aliases/ValidationErrorCode.md
domain-types.ts:56todomain-types.ts:58parseComponentId.md
Update parseComponentId function line referenceapps/docs/api/generated/riviere-query/functions/parseComponentId.md
domain-types.ts:270todomain-types.ts:272parseDomainName.md
Update parseDomainName function line referenceapps/docs/api/generated/riviere-query/functions/parseDomainName.md
domain-types.ts:300todomain-types.ts:302parseEntityName.md
Update parseEntityName function line referenceapps/docs/api/generated/riviere-query/functions/parseEntityName.md
domain-types.ts:290todomain-types.ts:292parseEventId.md
Update parseEventId function line referenceapps/docs/api/generated/riviere-query/functions/parseEventId.md
domain-types.ts:330todomain-types.ts:332parseEventName.md
Update parseEventName function line referenceapps/docs/api/generated/riviere-query/functions/parseEventName.md
domain-types.ts:340todomain-types.ts:342parseHandlerId.md
Update parseHandlerId function line referenceapps/docs/api/generated/riviere-query/functions/parseHandlerId.md
domain-types.ts:350todomain-types.ts:352parseHandlerName.md
Update parseHandlerName function line referenceapps/docs/api/generated/riviere-query/functions/parseHandlerName.md
domain-types.ts:360todomain-types.ts:362parseLinkId.md
Update parseLinkId function line referenceapps/docs/api/generated/riviere-query/functions/parseLinkId.md
domain-types.ts:280todomain-types.ts:282parseOperationName.md
Update parseOperationName function line referenceapps/docs/api/generated/riviere-query/functions/parseOperationName.md
domain-types.ts:320todomain-types.ts:322HandlerId.md
Update HandlerId type alias line referenceapps/docs/api/generated/riviere-query/type-aliases/HandlerId.md
domain-types.ts:50todomain-types.ts:52HandlerName.md
Update HandlerName type alias line referenceapps/docs/api/generated/riviere-query/type-aliases/HandlerName.md
domain-types.ts:53todomain-types.ts:55State.md
Update State type alias line referenceapps/docs/api/generated/riviere-query/type-aliases/State.md
domain-types.ts:38todomain-types.ts:40ComponentId.md
Update ComponentId type alias line referenceapps/docs/api/generated/riviere-query/type-aliases/ComponentId.md
domain-types.ts:26todomain-types.ts:28DomainName.md
Update DomainName type alias line referenceapps/docs/api/generated/riviere-query/type-aliases/DomainName.md
domain-types.ts:35todomain-types.ts:37EntityName.md
Update EntityName type alias line referenceapps/docs/api/generated/riviere-query/type-aliases/EntityName.md
domain-types.ts:32todomain-types.ts:34LinkId.md
Update LinkId type alias line referenceapps/docs/api/generated/riviere-query/type-aliases/LinkId.md
domain-types.ts:29todomain-types.ts:31OperationName.md
Update OperationName type alias line referenceapps/docs/api/generated/riviere-query/type-aliases/OperationName.md
domain-types.ts:41todomain-types.ts:43parseState.md
Update parseState function line referenceapps/docs/api/generated/riviere-query/functions/parseState.md
domain-types.ts:310todomain-types.ts:312EventId.md
Update EventId type alias line referenceapps/docs/api/generated/riviere-query/type-aliases/EventId.md
domain-types.ts:44todomain-types.ts:46EventName.md
Update EventName type alias line referenceapps/docs/api/generated/riviere-query/type-aliases/EventName.md
domain-types.ts:47todomain-types.ts:493 files
config.ts
Updated documentation navigation for deterministic extractionapps/docs/.vitepress/config.ts
with 5 subsections
predicates links
project.json
Add documentation generation targets to project configpackages/riviere-extract-config/project.json
generate-docstarget to run documentation generation scriptcheck-generated-docstarget to validate generated documentationis up-to-date
tsxfor TypeScript script execution{projectRoot}/docs/generatedpackage.json
Add extraction config docs copy commands to buildapps/docs/package.json
files in build target
files in dev target
predicates.mdandschema.mdfromriviere-extract-config/docs/generated/toreference/extraction-config/6 files
CustomTypeNotFoundError.md
Update @types/node dependency version referencesapps/docs/api/generated/riviere-builder/classes/CustomTypeNotFoundError.md
@types/nodeversion references from20.19.9to24.10.6globals.d.ts:149toglobals.d.ts:68captureStackTraceandprepareStackTracemethod line referencesDomainNotFoundError.md
Update @types/node dependency version referencesapps/docs/api/generated/riviere-builder/classes/DomainNotFoundError.md
@types/nodeversion from20.19.9to24.10.6stackTraceLimit,captureStackTrace, andprepareStackTraceDuplicateComponentError.md
Update @types/node dependency version referencesapps/docs/api/generated/riviere-builder/classes/DuplicateComponentError.md
@types/nodeversion from20.19.9to24.10.6DuplicateDomainError.md
Update @types/node dependency version referencesapps/docs/api/generated/riviere-builder/classes/DuplicateDomainError.md
@types/nodeversion from20.19.9to24.10.6stackTraceLimit,captureStackTrace, andprepareStackTraceComponentNotFoundError.md
Update @types/node dependency version referencesapps/docs/api/generated/riviere-builder/classes/ComponentNotFoundError.md
@types/nodeversion from20.19.9to24.10.6stackTraceLimit,captureStackTrace,and
prepareStackTraceComponentNotFoundError.md
Update @types/node dependency version referencesapps/docs/api/generated/riviere-query/classes/ComponentNotFoundError.md
@types/nodeversion from20.19.9to24.10.63 files
Summary by CodeRabbit
Documentation
CLI
Chores
✏️ Tip: You can customize this high-level summary in your review settings.