Skip to content

feat(riviere-extract-ts): add TypeScript component extractor - #67

Merged
NTCoding merged 15 commits into
mainfrom
issue-40-m3-d3-1-create-riviere-extract
Jan 8, 2026
Merged

NTCoding merged 15 commits into
mainfrom
issue-40-m3-d3-1-create-riviere-extract

Conversation

@NTCoding

@NTCoding NTCoding commented Jan 8, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Created new package @living-architecture/riviere-extract-ts for extracting components from TypeScript source code
  • Added ts-morph dependency for AST parsing with full type system support
  • Implemented initial extractor with placeholder structure and 100% test coverage
  • Updated root CLAUDE.md with new package documentation and consistent pnpm nx command usage
  • Updated root tsconfig.json with project reference for the new package

Test plan

  • All tests pass with 100% coverage
  • Verify gate (lint, typecheck, test) passes
  • Package builds successfully
  • Project follows monorepo conventions (3-file tsconfig structure, vitest config)

Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added a new TypeScript extractor package to the workspace.
  • Documentation

    • Added package documentation and README with usage, design notes, and development guidance.
  • Tests

    • Added unit tests, test fixtures, and a Vitest configuration enforcing strict (100%) coverage.
  • Chores

    • Standardized repository commands to use pnpm nx; added package metadata and TypeScript project references; updated analysis and coverage exclusions.

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

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]>
@coderabbitai

coderabbitai Bot commented Jan 8, 2026 •

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Adds a new package riviere-extract-ts (skeleton source, tests, docs, and TS/Vitest configs) and updates root documentation/examples to use pnpm nx instead of bare nx commands.

Changes

Cohort / File(s) Summary
Root documentation updates
CLAUDE.md
Replaced bare nx commands with pnpm nx across examples/guidelines and added @living-architecture/riviere-extract-ts to Current packages.
New package manifest
packages/riviere-extract-ts/package.json
New package.json with exports map, main/module/types fields, publish files, and dependencies on @living-architecture/riviere-extract-config and ts-morph.
Package docs
packages/riviere-extract-ts/README.md, packages/riviere-extract-ts/CLAUDE.md
Added README and CLAUDE.md describing the TypeScript extractor's purpose, architecture, usage, and testing strategy.
Source & exports
packages/riviere-extract-ts/src/extractor.ts, packages/riviere-extract-ts/src/index.ts
Added DraftComponent interface and stub extractComponents(_sourceFilePaths, _config): DraftComponent[] (returns []); root re-exports types and function.
Tests & fixtures
packages/riviere-extract-ts/src/test-fixtures.ts, packages/riviere-extract-ts/src/extractor.spec.ts
Added createMinimalConfig() test fixture and Vitest tests covering empty-input behavior and basic ts-morph Project instantiation.
TypeScript configs
packages/riviere-extract-ts/tsconfig.json, packages/riviere-extract-ts/tsconfig.lib.json, packages/riviere-extract-ts/tsconfig.spec.json
Added project references and package-level TS compiler configs for library and test builds with appropriate includes/excludes.
Test runner config
packages/riviere-extract-ts/vitest.config.mts
Added Vitest configuration with root, cacheDir, test patterns, reporters, coverage provider, and strict coverage thresholds.
Workspace & analysis updates
tsconfig.json, sonar-project.properties
Added package to root TS project references; adjusted Sonar exclusions and coverage exclusions (generalized **/index.ts exclusion and added vitest.config.mts).

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

🐰 I nibble code and plant a seed,
A TypeScript burrow, tidy breed;
Stubs and tests snug in the dust,
PNPM hops, in speed we trust,
New package hops — a joyful deed.

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: adding a new TypeScript component extractor package to the repository.

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


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

@cloudflare-workers-and-pages

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

Copy link
Copy Markdown

Deploying living-architecture with  Cloudflare Pages  Cloudflare Pages

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

View logs

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @packages/riviere-extract-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

📥 Commits

Reviewing files that changed from the base of the PR and between 28d4eb8 and 518d005.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (14)
  • CLAUDE.md
  • package.json
  • packages/riviere-extract-ts/CLAUDE.md
  • packages/riviere-extract-ts/README.md
  • packages/riviere-extract-ts/package.json
  • packages/riviere-extract-ts/src/extractor.spec.ts
  • packages/riviere-extract-ts/src/extractor.ts
  • packages/riviere-extract-ts/src/index.ts
  • packages/riviere-extract-ts/src/test-fixtures.ts
  • packages/riviere-extract-ts/tsconfig.json
  • packages/riviere-extract-ts/tsconfig.lib.json
  • packages/riviere-extract-ts/tsconfig.spec.json
  • packages/riviere-extract-ts/vitest.config.mts
  • tsconfig.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.ts
  • packages/riviere-extract-ts/src/index.ts
  • packages/riviere-extract-ts/src/extractor.spec.ts
  • packages/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.md for 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.md
  • packages/riviere-extract-ts/src/extractor.ts
  • tsconfig.json
  • packages/riviere-extract-ts/README.md
  • packages/riviere-extract-ts/src/index.ts
  • packages/riviere-extract-ts/tsconfig.spec.json
  • CLAUDE.md
  • packages/riviere-extract-ts/src/extractor.spec.ts
  • packages/riviere-extract-ts/package.json
  • packages/riviere-extract-ts/tsconfig.json
  • packages/riviere-extract-ts/vitest.config.mts
  • packages/riviere-extract-ts/tsconfig.lib.json
  • packages/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.md
  • packages/riviere-extract-ts/src/extractor.ts
  • tsconfig.json
  • packages/riviere-extract-ts/README.md
  • packages/riviere-extract-ts/src/index.ts
  • CLAUDE.md
  • packages/riviere-extract-ts/src/extractor.spec.ts
  • packages/riviere-extract-ts/package.json
  • packages/riviere-extract-ts/tsconfig.lib.json
  • packages/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.md
  • 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:

  • packages/riviere-extract-ts/CLAUDE.md
  • packages/riviere-extract-ts/src/extractor.ts
  • tsconfig.json
  • packages/riviere-extract-ts/README.md
  • packages/riviere-extract-ts/src/index.ts
  • CLAUDE.md
  • packages/riviere-extract-ts/src/extractor.spec.ts
  • packages/riviere-extract-ts/package.json
  • packages/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.md
  • packages/riviere-extract-ts/src/extractor.ts
  • tsconfig.json
  • packages/riviere-extract-ts/README.md
  • packages/riviere-extract-ts/src/index.ts
  • CLAUDE.md
  • packages/riviere-extract-ts/package.json
  • packages/riviere-extract-ts/tsconfig.json
  • packages/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.md
  • packages/riviere-extract-ts/src/extractor.ts
  • tsconfig.json
  • packages/riviere-extract-ts/README.md
  • packages/riviere-extract-ts/src/index.ts
  • CLAUDE.md
  • packages/riviere-extract-ts/package.json
  • packages/riviere-extract-ts/tsconfig.json
  • packages/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.md
  • 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: 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.md
  • tsconfig.json
  • packages/riviere-extract-ts/README.md
  • CLAUDE.md
  • packages/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.md
  • packages/riviere-extract-ts/src/extractor.ts
  • tsconfig.json
  • packages/riviere-extract-ts/README.md
  • packages/riviere-extract-ts/src/index.ts
  • CLAUDE.md
  • packages/riviere-extract-ts/src/extractor.spec.ts
  • packages/riviere-extract-ts/package.json
  • packages/riviere-extract-ts/vitest.config.mts
  • packages/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.md
  • packages/riviere-extract-ts/src/extractor.ts
  • packages/riviere-extract-ts/README.md
  • packages/riviere-extract-ts/src/index.ts
  • 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:

  • packages/riviere-extract-ts/CLAUDE.md
  • 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 `DomainOp`, `APIEndpoint`, or `EventHandler` method-level decorators to mark individual methods as components

Applied to files:

  • packages/riviere-extract-ts/CLAUDE.md
  • packages/riviere-extract-ts/src/extractor.ts
  • tsconfig.json
  • packages/riviere-extract-ts/README.md
  • packages/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.ts
  • packages/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.ts
  • tsconfig.json
  • packages/riviere-extract-ts/README.md
  • packages/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.ts
  • packages/riviere-extract-ts/src/index.ts
  • packages/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.json
  • packages/riviere-extract-ts/tsconfig.spec.json
  • CLAUDE.md
  • packages/riviere-extract-ts/tsconfig.json
  • packages/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.json
  • packages/riviere-extract-ts/tsconfig.spec.json
  • packages/riviere-extract-ts/tsconfig.json
  • packages/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.json
  • CLAUDE.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.json
  • packages/riviere-extract-ts/tsconfig.spec.json
  • packages/riviere-extract-ts/src/extractor.spec.ts
  • packages/riviere-extract-ts/tsconfig.json
  • packages/riviere-extract-ts/vitest.config.mts
  • packages/riviere-extract-ts/tsconfig.lib.json
  • packages/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.json
  • CLAUDE.md
  • packages/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.json
  • packages/riviere-extract-ts/src/extractor.spec.ts
  • packages/riviere-extract-ts/tsconfig.json
  • packages/riviere-extract-ts/vitest.config.mts
  • packages/riviere-extract-ts/tsconfig.lib.json
  • packages/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.json
  • packages/riviere-extract-ts/src/extractor.spec.ts
  • packages/riviere-extract-ts/tsconfig.json
  • packages/riviere-extract-ts/vitest.config.mts
  • packages/riviere-extract-ts/tsconfig.lib.json
  • packages/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.json
  • packages/riviere-extract-ts/src/extractor.spec.ts
  • packages/riviere-extract-ts/tsconfig.json
  • packages/riviere-extract-ts/vitest.config.mts
  • packages/riviere-extract-ts/tsconfig.lib.json
  • packages/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.json
  • packages/riviere-extract-ts/package.json
  • packages/riviere-extract-ts/tsconfig.json
  • packages/riviere-extract-ts/vitest.config.mts
  • packages/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.json
  • packages/riviere-extract-ts/src/extractor.spec.ts
  • packages/riviere-extract-ts/vitest.config.mts
  • packages/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.json
  • packages/riviere-extract-ts/tsconfig.json
  • packages/riviere-extract-ts/vitest.config.mts
  • packages/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.json
  • packages/riviere-extract-ts/src/extractor.spec.ts
  • packages/riviere-extract-ts/tsconfig.json
  • packages/riviere-extract-ts/vitest.config.mts
  • packages/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.json
  • packages/riviere-extract-ts/tsconfig.json
  • packages/riviere-extract-ts/vitest.config.mts
  • packages/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.md
  • packages/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.md
  • packages/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 rootDir to src and outDir to dist
  • Excludes all test files
  • References the dependency package riviere-extract-config

This 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 ExtractionConfig appropriate for unit tests

Based 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-config to 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-ts package 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 nx to pnpm nx commands 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-config with workspace:*
  • Configures ESM exports with proper entry points
  • Includes the custom @living-architecture/source condition for development

The ts-morph dependency version 24.0.0 is valid with no known security vulnerabilities.

tsconfig.json (1)

30-31: LGTM! Remember to run nx sync.

The project reference for the new package is correctly added.

As per conventions, ensure you run nx sync after 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-config to 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.

Comment thread packages/riviere-extract-ts/tsconfig.spec.json
NTCoding and others added 7 commits January 8, 2026 11:18
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.
…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]>
NTCoding and others added 3 commits January 8, 2026 13:51
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]>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @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

📥 Commits

Reviewing files that changed from the base of the PR and between 95a34b0 and 75d707a.

📒 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.ts and **/*-fixtures.ts from sonar.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: File packages/riviere-extract-ts/src/index.ts is correctly added to coverage exclusions—it contains only re-exports.

The file exports extractComponents and DraftComponent from ./extractor with no additional logic, aligning with the pattern used by other packages in the project.

Comment thread sonar-project.properties Outdated
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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In @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

📥 Commits

Reviewing files that changed from the base of the PR and between 49a08e5 and 77938cf.

📒 Files selected for processing (2)
  • CLAUDE.md
  • sonar-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.properties
  • 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/**/@(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-ts entry follows the established format and accurately describes the TypeScript component extractor with ts-morph AST parsing capabilities.


43-95: Systematic pnpm nx command pattern correctly applied throughout.

All nx command references have been consistently replaced with pnpm 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

Comment thread CLAUDE.md
@sonarqubecloud

sonarqubecloud Bot commented Jan 8, 2026

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant