Repository navigation
feat(riviere-extract-ts): add TypeScript component extractor - #67
Conversation
Add new package @living-architecture/riviere-extract-ts for extracting components from TypeScript code using ts-morph for AST parsing. Updated root CLAUDE.md and tsconfig.json to include the new package. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
📝 WalkthroughWalkthroughAdds a new package Changes
Sequence Diagram(s)(omitted — changes are scaffolding and documentation without new multi-component control flow) Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related issues
Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
Deploying living-architecture with
|
| Latest commit: |
77938cf
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://b9fdc895.living-architecture.pages.dev |
| Branch Preview URL: | https://issue-40-m3-d3-1-create-rivi.living-architecture.pages.dev |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In @packages/riviere-extract-ts/tsconfig.spec.json:
- Around line 5-22: All package tsconfig.spec.json files currently use expanded
"types" and "include" patterns; update each package (riviere-extract-ts,
riviere-query, riviere-builder, riviere-extract-config, riviere-cli,
riviere-schema, riviere-extract-conventions) to match the documented convention
by setting "types" to ["vitest/globals"] only and "include" to
["src/**/*.test.ts"] only, removing the extra vitest/importMeta, vite/client,
node, vitest entries and removing config files, .spec/.tsx/.js/.jsx and .d.ts
globs; alternatively, if you prefer to keep the expanded entries, update
docs/conventions/codebase-structure.md to explain and justify the broader
patterns so documentation and repository are consistent.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (14)
CLAUDE.mdpackage.jsonpackages/riviere-extract-ts/CLAUDE.mdpackages/riviere-extract-ts/README.mdpackages/riviere-extract-ts/package.jsonpackages/riviere-extract-ts/src/extractor.spec.tspackages/riviere-extract-ts/src/extractor.tspackages/riviere-extract-ts/src/index.tspackages/riviere-extract-ts/src/test-fixtures.tspackages/riviere-extract-ts/tsconfig.jsonpackages/riviere-extract-ts/tsconfig.lib.jsonpackages/riviere-extract-ts/tsconfig.spec.jsonpackages/riviere-extract-ts/vitest.config.mtstsconfig.json
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (CLAUDE.md)
Use cross-project imports with package names (e.g.,
import { X } from '@living-architecture/[pkg-name]'), not relative paths
Files:
packages/riviere-extract-ts/src/extractor.tspackages/riviere-extract-ts/src/index.tspackages/riviere-extract-ts/src/extractor.spec.tspackages/riviere-extract-ts/src/test-fixtures.ts
tsconfig.json
📄 CodeRabbit inference engine (CLAUDE.md)
After generating a new project, create the 3-file tsconfig structure:
tsconfig.json,tsconfig.lib.json,tsconfig.spec.json
Files:
tsconfig.json
package.json
📄 CodeRabbit inference engine (CLAUDE.md)
package.json: When adding dependencies between projects, add"@living-architecture/[pkg-name]": "workspace:*"to the consuming project's package.json
After generating a new project, update the project's package.json with correct name:@living-architecture/[project-name]
Files:
package.json
**/*.{test,spec}.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (CLAUDE.md)
Follow
docs/conventions/testing.mdfor all test implementation
Files:
packages/riviere-extract-ts/src/extractor.spec.ts
🧠 Learnings (44)
📓 Common learnings
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/*extract*.{js,ts,jsx,tsx} : Extraction code should use the Rivière Builder library to parse code and emit schema components
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/*extract*.{js,ts,jsx,tsx} : Use Rivière Builder library to programmatically build the schema graph when writing 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.733Z
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.746Z
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-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `Custom(type)` decorator to annotate components with custom types not covered by standard decorators
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/{client,frontend,browser,public,src}/**/*.{js,ts,jsx,tsx} : Use Rivière Query library for querying and analyzing the schema in browser-safe contexts
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `Ignore` decorator to exclude classes or methods from architectural extraction analysis
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `UseCase`, `Event`, or `UI` class-level decorators to mark the class itself as a component
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-cli/CLAUDE.md:0-0
Timestamp: 2026-01-02T11:58:27.001Z
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: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Run nx sync after adding projects and updating tsconfig references
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/package.json : When importing from another project, explicitly add living-architecture/[pkg-name] with workspace:* to package.json dependencies
📚 Learning: 2026-01-06T23:01:34.733Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-config/CLAUDE.md:0-0
Timestamp: 2026-01-06T23:01:34.733Z
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-ts/CLAUDE.mdpackages/riviere-extract-ts/src/extractor.tstsconfig.jsonpackages/riviere-extract-ts/README.mdpackages/riviere-extract-ts/src/index.tspackages/riviere-extract-ts/tsconfig.spec.jsonCLAUDE.mdpackages/riviere-extract-ts/src/extractor.spec.tspackages/riviere-extract-ts/package.jsonpackages/riviere-extract-ts/tsconfig.jsonpackages/riviere-extract-ts/vitest.config.mtspackages/riviere-extract-ts/tsconfig.lib.jsonpackages/riviere-extract-ts/src/test-fixtures.ts
📚 Learning: 2026-01-02T17:46:54.167Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/*extract*.{js,ts,jsx,tsx} : Use Rivière Builder library to programmatically build the schema graph when writing extraction code
Applied to files:
packages/riviere-extract-ts/CLAUDE.mdpackages/riviere-extract-ts/src/extractor.tstsconfig.jsonpackages/riviere-extract-ts/README.mdpackages/riviere-extract-ts/src/index.tsCLAUDE.mdpackages/riviere-extract-ts/src/extractor.spec.tspackages/riviere-extract-ts/package.jsonpackages/riviere-extract-ts/tsconfig.lib.jsonpackages/riviere-extract-ts/src/test-fixtures.ts
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Update CLAUDE.md 'Current packages' section when adding new packages
Applied to files:
packages/riviere-extract-ts/CLAUDE.mdCLAUDE.md
📚 Learning: 2026-01-02T17:46:54.167Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/*extract*.{js,ts,jsx,tsx} : Extraction code should use the Rivière Builder library to parse code and emit schema components
Applied to files:
packages/riviere-extract-ts/CLAUDE.mdpackages/riviere-extract-ts/src/extractor.tstsconfig.jsonpackages/riviere-extract-ts/README.mdpackages/riviere-extract-ts/src/index.tsCLAUDE.mdpackages/riviere-extract-ts/src/extractor.spec.tspackages/riviere-extract-ts/package.jsonpackages/riviere-extract-ts/src/test-fixtures.ts
📚 Learning: 2026-01-08T07:05:01.746Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `Ignore` decorator to exclude classes or methods from architectural extraction analysis
Applied to files:
packages/riviere-extract-ts/CLAUDE.mdpackages/riviere-extract-ts/src/extractor.tstsconfig.jsonpackages/riviere-extract-ts/README.mdpackages/riviere-extract-ts/src/index.tsCLAUDE.mdpackages/riviere-extract-ts/package.jsonpackages/riviere-extract-ts/tsconfig.jsonpackages/riviere-extract-ts/src/test-fixtures.ts
📚 Learning: 2026-01-08T07:05:01.746Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `Custom(type)` decorator to annotate components with custom types not covered by standard decorators
Applied to files:
packages/riviere-extract-ts/CLAUDE.mdpackages/riviere-extract-ts/src/extractor.tstsconfig.jsonpackages/riviere-extract-ts/README.mdpackages/riviere-extract-ts/src/index.tsCLAUDE.mdpackages/riviere-extract-ts/package.jsonpackages/riviere-extract-ts/tsconfig.jsonpackages/riviere-extract-ts/src/test-fixtures.ts
📚 Learning: 2026-01-02T11:58:27.001Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-cli/CLAUDE.md:0-0
Timestamp: 2026-01-02T11:58:27.001Z
Learning: After modifying CLI commands, run `nx generate-docs riviere-cli` to regenerate CLI reference documentation
Applied to files:
packages/riviere-extract-ts/CLAUDE.mdCLAUDE.md
📚 Learning: 2026-01-02T11:58:27.001Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-cli/CLAUDE.md:0-0
Timestamp: 2026-01-02T11:58:27.001Z
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:
packages/riviere-extract-ts/CLAUDE.md
📚 Learning: 2026-01-02T17:46:54.167Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/{client,frontend,browser,public,src}/**/*.{js,ts,jsx,tsx} : Use Rivière Query library for querying and analyzing the schema in browser-safe contexts
Applied to files:
packages/riviere-extract-ts/CLAUDE.mdtsconfig.jsonpackages/riviere-extract-ts/README.mdCLAUDE.mdpackages/riviere-extract-ts/package.json
📚 Learning: 2026-01-08T07:05:01.746Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
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:
packages/riviere-extract-ts/CLAUDE.mdpackages/riviere-extract-ts/src/extractor.tstsconfig.jsonpackages/riviere-extract-ts/README.mdpackages/riviere-extract-ts/src/index.tsCLAUDE.mdpackages/riviere-extract-ts/src/extractor.spec.tspackages/riviere-extract-ts/package.jsonpackages/riviere-extract-ts/vitest.config.mtspackages/riviere-extract-ts/src/test-fixtures.ts
📚 Learning: 2026-01-08T07:05:01.746Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
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:
packages/riviere-extract-ts/CLAUDE.mdpackages/riviere-extract-ts/src/extractor.tspackages/riviere-extract-ts/README.mdpackages/riviere-extract-ts/src/index.tsCLAUDE.md
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Extract software architecture from code using Riviere schema for flow-based (not structural) architecture
Applied to files:
packages/riviere-extract-ts/CLAUDE.mdCLAUDE.md
📚 Learning: 2026-01-08T07:05:01.746Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
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:
packages/riviere-extract-ts/CLAUDE.mdpackages/riviere-extract-ts/src/extractor.tstsconfig.jsonpackages/riviere-extract-ts/README.mdpackages/riviere-extract-ts/src/index.ts
📚 Learning: 2026-01-08T07:05:01.746Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
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:
packages/riviere-extract-ts/src/extractor.tspackages/riviere-extract-ts/src/index.ts
📚 Learning: 2026-01-08T07:05:01.746Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
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:
packages/riviere-extract-ts/src/extractor.tstsconfig.jsonpackages/riviere-extract-ts/README.mdpackages/riviere-extract-ts/src/index.ts
📚 Learning: 2026-01-06T23:01:34.733Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-config/CLAUDE.md:0-0
Timestamp: 2026-01-06T23:01:34.733Z
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:
packages/riviere-extract-ts/src/extractor.tspackages/riviere-extract-ts/src/index.tspackages/riviere-extract-ts/src/test-fixtures.ts
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Applies to tsconfig.json : After generating a new project, create the 3-file tsconfig structure: `tsconfig.json`, `tsconfig.lib.json`, `tsconfig.spec.json`
Applied to files:
tsconfig.jsonpackages/riviere-extract-ts/tsconfig.spec.jsonCLAUDE.mdpackages/riviere-extract-ts/tsconfig.jsonpackages/riviere-extract-ts/tsconfig.lib.json
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/*.ts : Import from other projects using package names (living-architecture/[pkg-name]) instead of relative paths
Applied to files:
tsconfig.json
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/@(tsconfig.json|tsconfig.lib.json|tsconfig.spec.json) : Each app and package requires a 3-file tsconfig structure: tsconfig.json, tsconfig.lib.json, and tsconfig.spec.json with proper references and extends setup
Applied to files:
tsconfig.jsonpackages/riviere-extract-ts/tsconfig.spec.jsonpackages/riviere-extract-ts/tsconfig.jsonpackages/riviere-extract-ts/tsconfig.lib.json
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Run nx sync after adding projects and updating tsconfig references
Applied to files:
tsconfig.jsonCLAUDE.md
📚 Learning: 2026-01-06T08:11:11.843Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 53
File: packages/riviere-extract-config/vitest.config.mts:20-20
Timestamp: 2026-01-06T08:11:11.843Z
Learning: In packages/riviere-extract-config/vitest.config.mts, the explicit tuple type assertion for the reporter configuration (`as ['text', ['lcov', { projectRoot: string }]]`) is necessary because vitest's CoverageReporter type requires the exact tuple shape; neither inference nor 'as const' produces a compatible type.
Applied to files:
tsconfig.jsonpackages/riviere-extract-ts/tsconfig.spec.jsonpackages/riviere-extract-ts/src/extractor.spec.tspackages/riviere-extract-ts/tsconfig.jsonpackages/riviere-extract-ts/vitest.config.mtspackages/riviere-extract-ts/tsconfig.lib.jsonpackages/riviere-extract-ts/src/test-fixtures.ts
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/package.json : When importing from another project, explicitly add living-architecture/[pkg-name] with workspace:* to package.json dependencies
Applied to files:
tsconfig.jsonCLAUDE.mdpackages/riviere-extract-ts/package.json
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/tsconfig.spec.json : tsconfig.spec.json must include only test files (src/**/*.test.ts) and set types to [vitest/globals]
Applied to files:
packages/riviere-extract-ts/tsconfig.spec.jsonpackages/riviere-extract-ts/src/extractor.spec.tspackages/riviere-extract-ts/tsconfig.jsonpackages/riviere-extract-ts/vitest.config.mtspackages/riviere-extract-ts/tsconfig.lib.jsonpackages/riviere-extract-ts/src/test-fixtures.ts
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Applies to vitest.config.ts : Add `vitest.config.ts` if tests are needed, with 100% coverage as the default
Applied to files:
packages/riviere-extract-ts/tsconfig.spec.jsonpackages/riviere-extract-ts/src/extractor.spec.tspackages/riviere-extract-ts/tsconfig.jsonpackages/riviere-extract-ts/vitest.config.mtspackages/riviere-extract-ts/tsconfig.lib.jsonpackages/riviere-extract-ts/src/test-fixtures.ts
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/vitest.config.ts : Create vitest.config.ts for each app and package with 100% coverage thresholds
Applied to files:
packages/riviere-extract-ts/tsconfig.spec.jsonpackages/riviere-extract-ts/src/extractor.spec.tspackages/riviere-extract-ts/tsconfig.jsonpackages/riviere-extract-ts/vitest.config.mtspackages/riviere-extract-ts/tsconfig.lib.jsonpackages/riviere-extract-ts/src/test-fixtures.ts
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/tsconfig.lib.json : tsconfig.lib.json must exclude test files (src/**/*.test.ts) and set outDir to ./dist with rootDir to ./src
Applied to files:
packages/riviere-extract-ts/tsconfig.spec.jsonpackages/riviere-extract-ts/package.jsonpackages/riviere-extract-ts/tsconfig.jsonpackages/riviere-extract-ts/vitest.config.mtspackages/riviere-extract-ts/tsconfig.lib.json
📚 Learning: 2026-01-04T17:04:31.747Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/testing.md:0-0
Timestamp: 2026-01-04T17:04:31.747Z
Learning: Applies to docs/conventions/**/*-fixtures.ts : Create `<module>-fixtures.ts` files alongside `<module>.spec.ts` to reduce duplication when multiple tests share similar setup data
Applied to files:
packages/riviere-extract-ts/tsconfig.spec.jsonpackages/riviere-extract-ts/src/extractor.spec.tspackages/riviere-extract-ts/vitest.config.mtspackages/riviere-extract-ts/src/test-fixtures.ts
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Follow `docs/conventions/testing.md` for all test implementation
Applied to files:
packages/riviere-extract-ts/tsconfig.spec.jsonpackages/riviere-extract-ts/tsconfig.jsonpackages/riviere-extract-ts/vitest.config.mtspackages/riviere-extract-ts/tsconfig.lib.json
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/*.test.ts : Shared test fixtures used across multiple test files may be grouped in files like test-fixtures.ts
Applied to files:
packages/riviere-extract-ts/tsconfig.spec.jsonpackages/riviere-extract-ts/src/extractor.spec.tspackages/riviere-extract-ts/tsconfig.jsonpackages/riviere-extract-ts/vitest.config.mtspackages/riviere-extract-ts/src/test-fixtures.ts
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Applies to {eslint.config.mjs,tsconfig.base.json,nx.json,vite.config.*,vitest.config.mts} : 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 if necessary
Applied to files:
packages/riviere-extract-ts/tsconfig.spec.jsonpackages/riviere-extract-ts/tsconfig.jsonpackages/riviere-extract-ts/vitest.config.mtspackages/riviere-extract-ts/tsconfig.lib.json
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/package.json : Verify and update package.json name to living-architecture/[project-name] after project generation
Applied to files:
CLAUDE.mdpackages/riviere-extract-ts/package.json
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Applies to package.json : After generating a new project, update the project's package.json with correct name: `living-architecture/[project-name]`
Applied to files:
CLAUDE.mdpackages/riviere-extract-ts/package.json
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Applies to **/*.{ts,tsx,js,jsx} : Use cross-project imports with package names (e.g., `import { X } from 'living-architecture/[pkg-name]'`), not relative paths
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-02T17:46:54.167Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Use the Rivière CLI for building and validating schemas interactively
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Use `nx` commands for all build, test, and lint operations (e.g., `nx run-many -t build`, `nx test [project-name]`), never run npm/pnpm directly
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: After modifying tsconfig references or adding dependencies between projects, run `nx sync`
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Use NX generators to add projects (nx g nx/node:application for apps, nx g nx/js:library for packages) instead of creating folders manually
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Use generators to create new projects—don't manually create project folders; use `nx g nx/js:library` or `nx g nx/node:application`
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: If something seems stale, run `nx reset` to clear the NX cache
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-08T06:46:00.609Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 66
File: packages/riviere-extract-conventions/src/eslint/require-component-decorator.spec.ts:19-21
Timestamp: 2026-01-08T06:46:00.609Z
Learning: In test files using typescript-eslint/rule-tester's RuleTester.run(), ensure there is an explicit it() block with at least one expect() assertion (e.g., expect(rule).toBeDefined()) to satisfy sonarjs/no-empty-test-file and sonarjs/assertions-in-tests lint rules, which don’t recognize RuleTester's internal test blocks. Apply this pattern to all spec.ts test files to maintain consistency and pass lint checks.
Applied to files:
packages/riviere-extract-ts/src/extractor.spec.ts
📚 Learning: 2026-01-04T17:04:31.747Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/testing.md:0-0
Timestamp: 2026-01-04T17:04:31.747Z
Learning: Applies to docs/conventions/**/*.spec.{ts,tsx,js,jsx} : Test edge cases for collections: empty collection, single element, duplicates, nested structures, circular references, large collections, sparse arrays, and mixed types
Applied to files:
packages/riviere-extract-ts/src/extractor.spec.ts
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Applies to package.json : When adding dependencies between projects, add `"living-architecture/[pkg-name]": "workspace:*"` to the consuming project's package.json
Applied to files:
packages/riviere-extract-ts/package.json
📚 Learning: 2026-01-04T17:04:31.747Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/testing.md:0-0
Timestamp: 2026-01-04T17:04:31.747Z
Learning: Applies to docs/conventions/**/*-fixtures.ts : Use fixture builder functions like `buildArgs(options = {})` to provide default test data with the ability to override specific values
Applied to files:
packages/riviere-extract-ts/src/test-fixtures.ts
🧬 Code graph analysis (1)
packages/riviere-extract-ts/src/extractor.ts (2)
packages/riviere-extract-ts/src/index.ts (2)
DraftComponent(2-2)extractComponents(2-2)packages/riviere-extract-config/src/types.ts (1)
ExtractionConfig(58-61)
⏰ 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 (14)
packages/riviere-extract-ts/tsconfig.lib.json (1)
1-31: LGTM! Follows monorepo TypeScript configuration conventions.The configuration correctly:
- Extends the base tsconfig
- Sets
rootDirtosrcandoutDirtodist- Excludes all test files
- References the dependency package
riviere-extract-configThis aligns with the 3-file tsconfig structure convention.
Based on learnings and coding guidelines.
packages/riviere-extract-ts/CLAUDE.md (1)
1-47: LGTM! Comprehensive package documentation.The documentation clearly articulates:
- Deterministic, config-driven extraction approach
- Separation of concerns (component extraction vs connection detection)
- Testing strategy with 100% coverage enforcement
- Dependencies and architectural principles
This aligns well with the extraction architecture and monorepo conventions.
Based on learnings and architectural principles.
packages/riviere-extract-ts/README.md (1)
1-82: LGTM! Clear and accurate user-facing documentation.The README provides:
- Clear installation and usage instructions
- Example configuration showing all 6 component types
- Output format documentation
- Development commands using
pnpm nx(consistent with monorepo conventions)- Appropriate acknowledgment of skeleton implementation status
packages/riviere-extract-ts/src/test-fixtures.ts (1)
1-17: LGTM! Test fixture follows conventions correctly.The fixture:
- Properly defines all 6 required component types with
notUsed: true- Uses cross-project import with package name
- Follows the test fixture pattern for reducing test duplication
- Provides a minimal valid
ExtractionConfigappropriate for unit testsBased on learnings and coding guidelines.
package.json (1)
36-36: Version@swc/[email protected]is valid and has no known security vulnerabilities.The package exists in the npm registry with Apache-2.0 licensing. Note that newer patch versions are available (latest is 0.5.18); consider updating if your project requires the latest improvements, though the current version is stable.
packages/riviere-extract-ts/src/extractor.ts (1)
1-20: LGTM - Placeholder implementation is appropriate.The DraftComponent interface and extractComponents function provide a solid foundation for the TypeScript extractor. The placeholder implementation returning an empty array is appropriate given the PR's stated objective of establishing "an initial extractor with a placeholder structure."
Future implementation guidance: When implementing the extraction logic, ensure the code uses the Rivière Builder library to programmatically build the schema graph and imports the default extraction config from
@living-architecture/riviere-extract-conventions/default-configto detect all 6 component types.Based on learnings, per coding guidelines.
CLAUDE.md (2)
21-21: LGTM - New package documented correctly.The new
@living-architecture/riviere-extract-tspackage entry follows the established documentation pattern and accurately describes the package's purpose.
47-146: LGTM - Consistent standardization to pnpm nx pattern.The systematic update from
nxtopnpm nxcommands throughout the documentation improves clarity about using pnpm as the nx task runner in this workspace. The changes maintain the principle of using nx for all build, test, and lint operations while making the pnpm workspace integration explicit.packages/riviere-extract-ts/vitest.config.mts (1)
1-37: LGTM - Vitest configuration follows established patterns.The configuration correctly:
- Sets 100% coverage thresholds as required
- Uses the explicit tuple type assertion for the reporter configuration (line 20), following the established pattern necessary for Vitest's type system
- Excludes appropriate files from coverage (test files, fixtures, index.ts barrel file)
- Configures the test environment properly for a Node.js package
packages/riviere-extract-ts/package.json (1)
1-27: LGTM - Package structure follows conventions.The package.json correctly:
- Uses the proper naming format
@living-architecture/riviere-extract-ts- Declares the workspace dependency on
@living-architecture/riviere-extract-configwithworkspace:*- Configures ESM exports with proper entry points
- Includes the custom
@living-architecture/sourcecondition for developmentThe ts-morph dependency version 24.0.0 is valid with no known security vulnerabilities.
tsconfig.json (1)
30-31: LGTM! Remember to runnx sync.The project reference for the new package is correctly added.
As per conventions, ensure you run
nx syncafter adding projects and updating tsconfig references to keep the workspace synchronized.packages/riviere-extract-ts/tsconfig.json (1)
1-13: LGTM! Follows the 3-file tsconfig structure.The configuration correctly establishes the multi-project TypeScript setup with proper references to both library and test configurations.
packages/riviere-extract-ts/src/index.ts (1)
1-3: LGTM! Clean barrel export pattern.The public API surface is clearly defined by re-exporting the extractor's core functionality.
packages/riviere-extract-ts/src/extractor.spec.ts (1)
1-15: LGTM! Placeholder test with correct structure.The test correctly validates the skeleton implementation and follows Vitest conventions. Cross-project imports use package names, and test fixtures are properly utilized.
For future implementation, ensure the extractor uses the Rivière Builder library to build schema components and imports the default extraction config from
@living-architecture/riviere-extract-conventions/default-configto detect all 6 component types. Additional test coverage should include edge cases such as single file, multiple files, files with various decorator patterns, and error conditions.Based on learnings, extraction code should use the Rivière Builder library.
Add minimal ts-morph usage to satisfy knip dependency check: - Add ts-morph integration test to verify dependency works - Satisfies knip unused dependency check while maintaining skeleton implementation - Test verifies ts-morph Project can be instantiated for future AST parsing Note: This minimal ts-morph usage is required by knip to verify the dependency is actually used. The actual extraction logic using ts-morph will be implemented in task #41 (M3-D3.2 - Implement all detection predicates). Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Remove @swc/helpers from root devDependencies - flagged as unused by knip.
Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
…UDE.md - Add packages/riviere-extract-ts/src/index.ts to SonarCloud coverage exclusions (re-exports only) - Clarify distinction between command failures (STOP) and code quality issues (fix) in CLAUDE.md
Use __dirname and projectRoot: repoRoot in vitest config to match riviere-extract-config and riviere-extract-conventions pattern. This ensures lcov.info paths are repo-relative (packages/...) for correct SonarCloud coverage reporting. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Match riviere-extract-conventions vitest.config.mts exactly - no custom exclude list. The only differences should be package name and cache dir. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Adds **/*-fixtures.ts to sonar.coverage.exclusions to align with source exclusions. This prevents SonarCloud from trying to process coverage data for files that are excluded from analysis. Fixes quality gate failure caused by unresolved coverage paths for test fixture files. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Reverts commit 609a272 which incorrectly excluded fixture files from SonarCloud source analysis. Fixture files are legitimate source files containing test helper logic, not build artifacts. Also removes the failed attempt (87b580d) to add fixtures to coverage exclusions. This fixes the 'Could not resolve 8 file paths' error where SonarCloud received coverage data for files it wasn't analyzing. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In @sonar-project.properties:
- Line 10: Add the schema JSON pattern to Sonar exclusions: update the
sonar.exclusions setting to include "**/*.schema.json" (matching the existing
coverage exclusion pattern) so schema files are not analyzed by Sonar; if
sonar.exclusions does not exist, create it and append "**/*.schema.json"
alongside existing patterns like "**/node_modules/**" and "**/dist/**", unless
you intentionally want Sonar to validate schema files.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (1)
sonar-project.properties
🧰 Additional context used
🧠 Learnings (10)
📓 Common learnings
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/*extract*.{js,ts,jsx,tsx} : Extraction code should use the Rivière Builder library to parse code and emit schema components
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/*extract*.{js,ts,jsx,tsx} : Use Rivière Builder library to programmatically build the schema graph when writing 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.733Z
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.746Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `Custom(type)` decorator to annotate components with custom types not covered by standard decorators
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
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/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/{client,frontend,browser,public,src}/**/*.{js,ts,jsx,tsx} : Use Rivière Query library for querying and analyzing the schema in browser-safe contexts
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `Ignore` decorator to exclude classes or methods from architectural extraction analysis
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
Learning: Configure ESLint to enforce component decorators on classes using the `require-component-decorator` rule from `living-architecture/riviere-extract-conventions/eslint-plugin`
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 53
File: packages/riviere-extract-config/vitest.config.mts:20-20
Timestamp: 2026-01-06T08:11:11.843Z
Learning: In packages/riviere-extract-config/vitest.config.mts, the explicit tuple type assertion for the reporter configuration (`as ['text', ['lcov', { projectRoot: string }]]`) is necessary because vitest's CoverageReporter type requires the exact tuple shape; neither inference nor 'as const' produces a compatible type.
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-cli/CLAUDE.md:0-0
Timestamp: 2026-01-02T11:58:27.001Z
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: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Run nx sync after adding projects and updating tsconfig references
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/vitest.config.ts : Create vitest.config.ts for each app and package with 100% coverage thresholds
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: After modifying tsconfig references or adding dependencies between projects, run `nx sync`
📚 Learning: 2026-01-08T12:57:11.887Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 67
File: packages/riviere-extract-ts/tsconfig.spec.json:5-22
Timestamp: 2026-01-08T12:57:11.887Z
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:
sonar-project.properties
📚 Learning: 2026-01-08T07:05:01.746Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `Ignore` decorator to exclude classes or methods from architectural extraction analysis
Applied to files:
sonar-project.properties
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/tsconfig.lib.json : tsconfig.lib.json must exclude test files (src/**/*.test.ts) and set outDir to ./dist with rootDir to ./src
Applied to files:
sonar-project.properties
📚 Learning: 2026-01-06T23:01:34.733Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-config/CLAUDE.md:0-0
Timestamp: 2026-01-06T23:01:34.733Z
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:
sonar-project.properties
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/vitest.config.ts : Create vitest.config.ts for each app and package with 100% coverage thresholds
Applied to files:
sonar-project.properties
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Applies to vitest.config.ts : Add `vitest.config.ts` if tests are needed, with 100% coverage as the default
Applied to files:
sonar-project.properties
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Follow `docs/conventions/testing.md` for all test implementation
Applied to files:
sonar-project.properties
📚 Learning: 2026-01-07T08:54:48.056Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/workflow/code-review.md:0-0
Timestamp: 2026-01-07T08:54:48.056Z
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:
sonar-project.properties
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/@(tsconfig.json|tsconfig.lib.json|tsconfig.spec.json) : Each app and package requires a 3-file tsconfig structure: tsconfig.json, tsconfig.lib.json, and tsconfig.spec.json with proper references and extends setup
Applied to files:
sonar-project.properties
⏰ 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: Cloudflare Pages
🔇 Additional comments (2)
sonar-project.properties (2)
9-9: Verify that the removal of fixture-pattern exclusions is intentional.Lines 9 removes
**/*-test-fixtures.tsand**/*-fixtures.tsfromsonar.exclusions, meaning test fixture files will now be analyzed by Sonar for code quality issues. This is a behavior change from the previous configuration. Confirm this is desired—allowing fixtures to be linted alongside production code.
10-10: Filepackages/riviere-extract-ts/src/index.tsis correctly added to coverage exclusions—it contains only re-exports.The file exports
extractComponentsandDraftComponentfrom./extractorwith no additional logic, aligning with the pattern used by other packages in the project.
Enforce using scripts in ./scripts/ for PRs, issues, and tasks instead of raw gh/git commands. If functionality doesn't exist, propose creating a script.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In @CLAUDE.md:
- Around line 151-156: Replace the phrase "STOP and consult with user" with the
tighter wording "STOP and consult" in the section under "Command failures vs
code quality issues" (the bullet that starts with "Command failures" which
currently contains "STOP and consult with user"); update only that phrase to
improve conciseness without changing surrounding guidance.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (2)
CLAUDE.mdsonar-project.properties
🧰 Additional context used
🧠 Learnings (36)
📓 Common learnings
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/*extract*.{js,ts,jsx,tsx} : Extraction code should use the Rivière Builder library to parse code and emit schema components
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/*extract*.{js,ts,jsx,tsx} : Use Rivière Builder library to programmatically build the schema graph when writing 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.733Z
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.746Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `Custom(type)` decorator to annotate components with custom types not covered by standard decorators
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
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/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/{client,frontend,browser,public,src}/**/*.{js,ts,jsx,tsx} : Use Rivière Query library for querying and analyzing the schema in browser-safe contexts
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `Ignore` decorator to exclude classes or methods from architectural extraction analysis
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
Learning: Configure ESLint to enforce component decorators on classes using the `require-component-decorator` rule from `living-architecture/riviere-extract-conventions/eslint-plugin`
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 53
File: packages/riviere-extract-config/vitest.config.mts:20-20
Timestamp: 2026-01-06T08:11:11.843Z
Learning: In packages/riviere-extract-config/vitest.config.mts, the explicit tuple type assertion for the reporter configuration (`as ['text', ['lcov', { projectRoot: string }]]`) is necessary because vitest's CoverageReporter type requires the exact tuple shape; neither inference nor 'as const' produces a compatible type.
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-cli/CLAUDE.md:0-0
Timestamp: 2026-01-02T11:58:27.001Z
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: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Run nx sync after adding projects and updating tsconfig references
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/vitest.config.ts : Create vitest.config.ts for each app and package with 100% coverage thresholds
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: After modifying tsconfig references or adding dependencies between projects, run `nx sync`
📚 Learning: 2026-01-08T12:57:11.887Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 67
File: packages/riviere-extract-ts/tsconfig.spec.json:5-22
Timestamp: 2026-01-08T12:57:11.887Z
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:
sonar-project.properties
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Applies to vitest.config.ts : Add `vitest.config.ts` if tests are needed, with 100% coverage as the default
Applied to files:
sonar-project.properties
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/vitest.config.ts : Create vitest.config.ts for each app and package with 100% coverage thresholds
Applied to files:
sonar-project.properties
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/tsconfig.lib.json : tsconfig.lib.json must exclude test files (src/**/*.test.ts) and set outDir to ./dist with rootDir to ./src
Applied to files:
sonar-project.properties
📚 Learning: 2026-01-07T08:54:48.056Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/workflow/code-review.md:0-0
Timestamp: 2026-01-07T08:54:48.056Z
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:
sonar-project.properties
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Follow `docs/conventions/testing.md` for all test implementation
Applied to files:
sonar-project.properties
📚 Learning: 2026-01-06T08:11:11.843Z
Learnt from: NTCoding
Repo: NTCoding/living-architecture PR: 53
File: packages/riviere-extract-config/vitest.config.mts:20-20
Timestamp: 2026-01-06T08:11:11.843Z
Learning: In packages/riviere-extract-config/vitest.config.mts, the explicit tuple type assertion for the reporter configuration (`as ['text', ['lcov', { projectRoot: string }]]`) is necessary because vitest's CoverageReporter type requires the exact tuple shape; neither inference nor 'as const' produces a compatible type.
Applied to files:
sonar-project.properties
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Applies to {eslint.config.mjs,tsconfig.base.json,nx.json,vite.config.*,vitest.config.mts} : 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 if necessary
Applied to files:
sonar-project.propertiesCLAUDE.md
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/@(tsconfig.json|tsconfig.lib.json|tsconfig.spec.json) : Each app and package requires a 3-file tsconfig structure: tsconfig.json, tsconfig.lib.json, and tsconfig.spec.json with proper references and extends setup
Applied to files:
sonar-project.properties
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Update CLAUDE.md 'Current packages' section when adding new packages
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-02T11:58:27.001Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-cli/CLAUDE.md:0-0
Timestamp: 2026-01-02T11:58:27.001Z
Learning: After modifying CLI commands, run `nx generate-docs riviere-cli` to regenerate CLI reference documentation
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/package.json : Verify and update package.json name to living-architecture/[project-name] after project generation
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Applies to docs/conventions/**/package.json : When importing from another project, explicitly add living-architecture/[pkg-name] with workspace:* to package.json dependencies
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Applies to package.json : After generating a new project, update the project's package.json with correct name: `living-architecture/[project-name]`
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-02T17:46:54.167Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/*extract*.{js,ts,jsx,tsx} : Use Rivière Builder library to programmatically build the schema graph when writing extraction code
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-02T17:46:54.167Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/*extract*.{js,ts,jsx,tsx} : Extraction code should use the Rivière Builder library to parse code and emit schema components
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-06T23:01:34.733Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-config/CLAUDE.md:0-0
Timestamp: 2026-01-06T23:01:34.733Z
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:
CLAUDE.md
📚 Learning: 2026-01-08T07:05:01.746Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
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:
CLAUDE.md
📚 Learning: 2026-01-02T17:46:54.167Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Applies to docs/architecture/**/{client,frontend,browser,public,src}/**/*.{js,ts,jsx,tsx} : Use Rivière Query library for querying and analyzing the schema in browser-safe contexts
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Extract software architecture from code using Riviere schema for flow-based (not structural) architecture
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-08T07:05:01.746Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
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:
CLAUDE.md
📚 Learning: 2026-01-02T17:46:54.167Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/architecture/overview.md:0-0
Timestamp: 2026-01-02T17:46:54.167Z
Learning: Use the Rivière CLI for building and validating schemas interactively
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-08T07:05:01.746Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
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:
CLAUDE.md
📚 Learning: 2026-01-08T07:05:01.746Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-extract-conventions/CLAUDE.md:0-0
Timestamp: 2026-01-08T07:05:01.746Z
Learning: Applies to packages/riviere-extract-conventions/**/*.ts : Use `Ignore` decorator to exclude classes or methods from architectural extraction analysis
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Use `nx` commands for all build, test, and lint operations (e.g., `nx run-many -t build`, `nx test [project-name]`), never run npm/pnpm directly
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: After modifying tsconfig references or adding dependencies between projects, run `nx sync`
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Use NX generators to add projects (nx g nx/node:application for apps, nx g nx/js:library for packages) instead of creating folders manually
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-05T13:01:29.359Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/codebase-structure.md:0-0
Timestamp: 2026-01-05T13:01:29.359Z
Learning: Run nx sync after adding projects and updating tsconfig references
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Use generators to create new projects—don't manually create project folders; use `nx g nx/js:library` or `nx g nx/node:application`
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Applies to **/*.{ts,tsx,js,jsx} : Use cross-project imports with package names (e.g., `import { X } from 'living-architecture/[pkg-name]'`), not relative paths
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: If something seems stale, run `nx reset` to clear the NX cache
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-07T08:54:48.056Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/workflow/code-review.md:0-0
Timestamp: 2026-01-07T08:54:48.056Z
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:
CLAUDE.md
📚 Learning: 2026-01-07T08:55:18.232Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-07T08:55:18.232Z
Learning: Maintain high code quality—rushing or taking shortcuts is never acceptable; always read `eslint.config.mjs` for lint rules
Applied to files:
CLAUDE.md
📚 Learning: 2026-01-07T08:54:48.056Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/workflow/code-review.md:0-0
Timestamp: 2026-01-07T08:54:48.056Z
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:
CLAUDE.md
📚 Learning: 2026-01-07T08:54:48.056Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/workflow/code-review.md:0-0
Timestamp: 2026-01-07T08:54:48.056Z
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:
CLAUDE.md
🪛 LanguageTool
CLAUDE.md
[style] ~153-~153: This phrase is redundant. Consider writing “consult”.
Context: ...rrors, missing dependencies) → STOP and consult with user - Code quality issues (lint ...
(CONSULT_WITH)
⏰ 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 (3)
sonar-project.properties (1)
9-10: Sonar exclusion patterns correctly configured for test infrastructure.The wildcard patterns appropriately exclude vitest configuration and test fixtures from coverage analysis, consistent with standard test setup practices in the monorepo.
CLAUDE.md (2)
21-21: New package entry correctly added to Current packages section.The
@living-architecture/riviere-extract-tsentry follows the established format and accurately describes the TypeScript component extractor with ts-morph AST parsing capabilities.
43-95: Systematicpnpm nxcommand pattern correctly applied throughout.All
nxcommand references have been consistently replaced withpnpm nx, which is the correct invocation pattern for this pnpm workspace monorepo. Updates span Build & Test, Adding New Projects, NX Guidelines, and general workflow sections.Also applies to: 144-146, 158-158
|



Summary
Test plan
Generated with Claude Code
Summary by CodeRabbit
New Features
Documentation
Tests
Chores
✏️ Tip: You can customize this high-level summary in your review settings.