Repository navigation
feat: create riviere-extract-config package with JSON Schema - #53
Conversation
Implements task #35 - Create riviere-extract-config package with JSON Schema. - Package structure created using NX generator - JSON Schema defines extraction DSL with module-based config - 8 predicates: hasDecorator, hasJSDoc, extendsClass, implementsInterface, nameEndsWith, nameMatches, inClassWith, and/or - AJV validation with clear error messages - TypeScript types matching schema - 100% test coverage - Package CLAUDE.md with core principles 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
Deploying living-architecture with
|
| Latest commit: |
11c96ec
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://44629ca8.living-architecture.pages.dev |
| Branch Preview URL: | https://issue-35-m1-d1-3-create-rivi.living-architecture.pages.dev |
|
Note
|
| Cohort / File(s) | Summary |
|---|---|
Package foundation packages/riviere-extract-config/package.json, packages/riviere-extract-config/project.json, packages/riviere-extract-config/README.md, packages/riviere-extract-config/CLAUDE.md |
New ESM package metadata, README and CLAUDE docs; exposes schema and validation API. |
Schema packages/riviere-extract-config/extraction-config.schema.json |
New strict JSON Schema for ExtractionConfig: modules array, per-module component rules (either notUsed or detection rule), find targets, and rich predicate types with and/or composition. |
Types packages/riviere-extract-config/src/types.ts |
New exported TypeScript types and interfaces for FindTarget, ComponentType, Predicate variants, DetectionRule, ComponentRule, Module, and ExtractionConfig. |
Validation implementation & public API packages/riviere-extract-config/src/validation.ts, packages/riviere-extract-config/src/index.ts |
AJV-based validator and helpers: isValidExtractionConfig, validateExtractionConfig, parseExtractionConfig, formatValidationErrors, mapAjvErrors; exports types and validation API. |
Test fixtures & tests packages/riviere-extract-config/src/validation-fixtures.ts, packages/riviere-extract-config/src/validation.spec.ts |
Factory helpers and extensive tests covering valid/invalid configs, complex predicate compositions, error mapping and formatting, and parse behavior. |
Build & test config packages/riviere-extract-config/tsconfig.json, .../tsconfig.lib.json, .../tsconfig.spec.json, packages/riviere-extract-config/vite.config.ts, packages/riviere-extract-config/vitest.config.mts |
TypeScript project references, library/test tsconfigs, Vite and Vitest configs (100% coverage thresholds). |
Workspace and QA updates tsconfig.json, sonar-project.properties, .coderabbit.yaml, .claude/agents/submit-pr.md, .claude/commands/complete-task.md |
Adds project reference, Sonar exclusions for two files, CodeRabbit review settings and tools, and updates PR submission / feedback workflow and Sonar debugging guidance. |
Sequence Diagram(s)
sequenceDiagram
participant Caller as Caller (consumer/test)
participant Validator as Validation module
participant Schema as extraction-config.schema.json
participant Ajv as AJV runtime
Note over Caller,Validator: parseExtractionConfig(data)
Caller->>Validator: parseExtractionConfig(data)
Validator->>Ajv: ajv.validate(schema, data)
Ajv-->>Validator: valid / errors
alt valid
Validator-->>Caller: return data (typed)
else invalid
Validator->>Validator: mapAjvErrors(errors) → formatValidationErrors
Validator-->>Caller: throw Error(formatted messages)
end
Estimated code review effort
🎯 3 (Moderate) | ⏱️ ~30 minutes
Possibly related issues
- [M1-D1.3] Create riviere-extract-config package with JSON Schema #35: Implements the extraction-config package (schema, types, validation, tests) described by the issue.
Possibly related PRs
- refactor(scripts): extract nitpick display logic into separate function #30: Related changes to PR submission workflow in
.claude/commands/complete-task.md. - chore: add CodeRabbit config for automated PR reviews #3: Related updates to repository CodeRabbit configuration (
.coderabbit.yaml).
Poem
🐇 I nibble schemas, tidy and neat,
Modules and predicates lined up to meet.
AJV checks, errors caught in a hop—
Parse, validate, and never stop! ✨
Pre-merge checks
✅ 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 summarizes the main change: creating a new package with JSON Schema validation for extraction config, which is the primary deliverable of this PR. |
📜 Recent review details
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (1)
packages/riviere-extract-config/README.md
🧰 Additional context used
🧠 Learnings (9)
📓 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: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture
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: 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
📚 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-config/README.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-config/README.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:
packages/riviere-extract-config/README.md
📚 Learning: 2026-01-02T11:58:30.905Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-schema/CLAUDE.md:0-0
Timestamp: 2026-01-02T11:58:30.905Z
Learning: Do not include riviere-schema in breaking change commits (`!` or `BREAKING CHANGE`) - this automatically bumps the major version
Applied to files:
packages/riviere-extract-config/README.md
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture
Applied to files:
packages/riviere-extract-config/README.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-config/README.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-config/README.md
📚 Learning: 2026-01-03T17:37:22.708Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/software-design.md:0-0
Timestamp: 2026-01-03T17:37:22.708Z
Learning: Applies to docs/conventions/**/*.{ts,tsx} : Use Zod for runtime validation. In TypeScript, use Zod schemas for parsing external data, API responses, and user input. Type inference from schemas keeps types and validation in sync.
Applied to files:
packages/riviere-extract-config/README.md
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: main
- GitHub Check: Cloudflare Pages
🔇 Additional comments (1)
packages/riviere-extract-config/README.md (1)
1-35: README successfully addresses previous feedback and is well-structured.The README now includes the Documentation section (lines 28–31) with links to CLAUDE.md and the JSON Schema—exactly as requested in the previous review. The file is complete with clear usage examples, design principle and schema references, and building instructions.
One minor observation: Line 10 imports
parseExtractionConfigbut the usage examples (lines 16–25) only demonstrateisValidExtractionConfigandvalidateExtractionConfig. Consider showing how to useparseExtractionConfigas well, or remove the unused import for clarity.
Comment @coderabbitai help to get the list of available commands and usage tips.
Removes unused @swc/helpers devDependency flagged by knip. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 1
Fix all issues with AI Agents 🤖
In @tsconfig.json:
- Around line 23-26: The tsconfig.json now references
"./packages/riviere-extract-config" but the corresponding Nx project.json is
missing; run `nx sync` to generate the missing project.json for the
riviere-extract-config package and ensure it matches the workspace conventions
used by other packages (riviere-builder, riviere-cli, riviere-query,
riviere-schema), then commit the generated project.json so the new project
reference in tsconfig.json is fully integrated into the Nx workspace.
🧹 Nitpick comments (11)
packages/riviere-extract-config/README.md (1)
1-7: Consider expanding the README with usage examples and purpose.The README is minimal and only includes build instructions. Since this package introduces a new public API for JSON Schema validation with 8 predicate types and AJV-based validation (per the PR objectives), consider adding:
- A brief description of the package's purpose (extraction DSL with JSON Schema validation)
- Basic usage examples
- Links to the schema or main exports
packages/riviere-extract-config/vitest.config.mts (1)
16-16: Remove redundant type assertion.The
as constassertion on line 16 is unnecessary since'v8'is already a string literal constant in this context.🔎 Proposed fix
- provider: 'v8' as const, + provider: 'v8',packages/riviere-extract-config/vite.config.ts (2)
17-17: Remove redundant type assertion.The
as constassertion on line 17 is unnecessary since'v8'is already a string literal constant in this context.🔎 Proposed fix
- provider: 'v8' as const, + provider: 'v8',
15-18: Consider adding coverage thresholds to match vitest.config.mts.The coverage configuration here is missing the
enabled,reporter, andthresholdssettings that are present invitest.config.mts. If both configs are maintained, consider keeping their coverage settings consistent to match the project's 100% coverage requirement.🔎 Proposed addition
coverage: { + enabled: true, reportsDirectory: './test-output/vitest/coverage', provider: 'v8', + reporter: ['text', 'lcov'], + thresholds: { + lines: 100, + statements: 100, + functions: 100, + branches: 100, + }, },packages/riviere-extract-config/tsconfig.spec.json (2)
5-10: Types array extends beyond minimal vitest/globals configuration.The types array includes
vitest/importMeta,vite/client,node, andvitestin addition tovitest/globals. While these may be necessary for full Vite/Vitest functionality, the learnings suggest keeping types minimal with just["vitest/globals"].Based on learnings, consider simplifying to:
"types": [ - "vitest/globals", - "vitest/importMeta", - "vite/client", - "node", - "vitest" + "vitest/globals" ],Only if testing reveals missing type definitions should additional types be added back.
27-27: Declaration files included in spec configuration.Line 27 includes
src/**/*.d.ts, which are type declaration files rather than test files. Per learnings, tsconfig.spec.json should include only test files.Consider removing if type declarations are not required for test compilation:
"src/**/*.spec.jsx", - "src/**/*.d.ts" ],packages/riviere-extract-config/src/validation.spec.ts (1)
62-62: Minor: Remove trailing space aftermodule.Trailing whitespace detected after
modulein the destructuring assignment. This pattern appears on lines 62, 73, 84, 95, 111, and 122.🔎 Fix for line 62 (apply similar fix to lines 73, 84, 95, 111, 122)
const { - config, module + config, module } = createMutableConfig()packages/riviere-extract-config/extraction-config.schema.json (1)
277-313: Consider recursion depth limit for nested predicates (optional).The recursive predicate definitions (inClassWith, and, or) allow unlimited nesting depth. While this provides maximum flexibility, extremely deep nesting could:
- Impact validation performance
- Create hard-to-debug configurations
- Potentially cause stack overflow in some scenarios
For configuration files, this is likely acceptable since they're typically human-authored and reasonably shallow. However, if configs might be generated programmatically, consider adding a practical depth limit (e.g., maxDepth: 10) in the future.
packages/riviere-extract-config/src/types.ts (3)
5-37: Consider adding JSDoc comments for better DX.The predicate interfaces form a well-designed composable structure. Consider adding JSDoc comments to document the purpose and usage of each predicate type, especially for the recursive structures (
InClassWithPredicate,AndPredicate,OrPredicate).Example documentation
+/** + * Matches code elements that have a specific decorator. + * @example { hasDecorator: { name: 'Controller', from: '@nestjs/common' } } + */ export interface HasDecoratorPredicate { hasDecorator: { name: string | string[] from?: string } } +/** + * Combines multiple predicates with logical AND. + * All predicates must match for the rule to succeed. + */ export interface AndPredicate {and: Predicate[]}
39-46: Consider whether optional fields would be more ergonomic thanNotUsed.The
NotUsedpattern enforces explicit configuration for every component type. While this provides clarity, it can be verbose when many component types are unused. Consider whether making component rules optional in theModuleinterface (lines 48-56) would improve the developer experience without sacrificing clarity.Example alternative:
export interface Module { path: string api?: DetectionRule useCase?: DetectionRule // ... etc }The current explicit approach has merit for validation and type safety, so this is purely a design consideration.
48-56: Consider usingRecordtype for more maintainable component rules.The current explicit property approach provides excellent autocomplete and type safety. However, if
ComponentTypechanges frequently, consider using aRecordtype to automatically sync with theComponentTypeunion:export interface Module { path: string } & Record<ComponentType, ComponentRule>This would automatically include all component types from the
ComponentTypeunion and reduce maintenance when adding new component types. The current explicit approach is also valid and may be preferred for clarity.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (16)
package.jsonpackages/riviere-extract-config/CLAUDE.mdpackages/riviere-extract-config/README.mdpackages/riviere-extract-config/extraction-config.schema.jsonpackages/riviere-extract-config/package.jsonpackages/riviere-extract-config/src/index.tspackages/riviere-extract-config/src/types.tspackages/riviere-extract-config/src/validation-fixtures.tspackages/riviere-extract-config/src/validation.spec.tspackages/riviere-extract-config/src/validation.tspackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/tsconfig.spec.jsonpackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/vitest.config.mtstsconfig.json
🧰 Additional context used
📓 Path-based instructions (4)
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx,js,jsx}: Do not log sensitive data (passwords, tokens, PII)
Use cross-project imports with package names (e.g.,import { X } from '@living-architecture/[pkg-name]'), not relative paths
Files:
packages/riviere-extract-config/src/validation.tspackages/riviere-extract-config/src/index.tspackages/riviere-extract-config/src/validation-fixtures.tspackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/src/types.tspackages/riviere-extract-config/src/validation.spec.ts
**/package.json
📄 CodeRabbit inference engine (CLAUDE.md)
When adding dependencies between projects, add
"@living-architecture/[pkg-name]": "workspace:*"to the consuming project's package.json
Files:
package.jsonpackages/riviere-extract-config/package.json
**/tsconfig.{json,lib.json,spec.json}
📄 CodeRabbit inference engine (CLAUDE.md)
After generating a new project, create a 3-file tsconfig structure: tsconfig.json, tsconfig.lib.json, tsconfig.spec.json
Files:
packages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/tsconfig.jsontsconfig.jsonpackages/riviere-extract-config/tsconfig.spec.json
**/*.{test,spec}.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{test,spec}.{ts,tsx,js,jsx}: Enforce 100% test coverage as mandatory and not optional
Followdocs/conventions/testing.mdwhen writing tests
Files:
packages/riviere-extract-config/src/validation.spec.ts
🧠 Learnings (32)
📓 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: 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
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: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture
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
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
📚 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-config/CLAUDE.mdpackages/riviere-extract-config/src/validation.tspackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/src/index.tspackages/riviere-extract-config/src/validation-fixtures.tspackages/riviere-extract-config/README.mdpackages/riviere-extract-config/package.jsonpackages/riviere-extract-config/extraction-config.schema.jsonpackages/riviere-extract-config/src/types.tstsconfig.jsonpackages/riviere-extract-config/src/validation.spec.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-config/CLAUDE.mdpackages/riviere-extract-config/src/validation.tspackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/src/index.tspackages/riviere-extract-config/README.mdpackages/riviere-extract-config/package.jsonpackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/extraction-config.schema.jsonpackages/riviere-extract-config/src/types.tstsconfig.json
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture
Applied to files:
packages/riviere-extract-config/CLAUDE.mdpackages/riviere-extract-config/README.mdpackages/riviere-extract-config/package.json
📚 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-config/CLAUDE.mdpackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/README.mdpackages/riviere-extract-config/package.jsonpackages/riviere-extract-config/extraction-config.schema.jsontsconfig.json
📚 Learning: 2026-01-03T17:37:22.708Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/software-design.md:0-0
Timestamp: 2026-01-03T17:37:22.708Z
Learning: Applies to docs/conventions/**/*.{ts,tsx} : Use Zod for runtime validation. In TypeScript, use Zod schemas for parsing external data, API responses, and user input. Type inference from schemas keeps types and validation in sync.
Applied to files:
packages/riviere-extract-config/CLAUDE.mdpackages/riviere-extract-config/src/validation.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: Use the Rivière CLI for building and validating schemas interactively
Applied to files:
packages/riviere-extract-config/CLAUDE.mdpackages/riviere-extract-config/README.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.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-config/CLAUDE.mdpackages/riviere-extract-config/vitest.config.mtspackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/src/validation-fixtures.tspackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/src/types.tspackages/riviere-extract-config/tsconfig.spec.jsonpackages/riviere-extract-config/src/validation.spec.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: Run nx sync after adding projects and updating tsconfig references
Applied to files:
package.jsonpackages/riviere-extract-config/tsconfig.jsontsconfig.json
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/vitest.config.ts : Add vitest.config.ts to new projects if tests are needed, with 100% coverage as the default
Applied to files:
packages/riviere-extract-config/vitest.config.mtspackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/src/validation-fixtures.tspackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/tsconfig.spec.jsonpackages/riviere-extract-config/src/validation.spec.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-config/vitest.config.mtspackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/src/validation-fixtures.tspackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/tsconfig.spec.jsonpackages/riviere-extract-config/src/validation.spec.ts
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
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)
Applied to files:
packages/riviere-extract-config/vitest.config.mtspackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/tsconfig.spec.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.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-config/vitest.config.mtspackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/tsconfig.spec.json
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/tsconfig.{json,lib.json,spec.json} : After generating a new project, create a 3-file tsconfig structure: tsconfig.json, tsconfig.lib.json, tsconfig.spec.json
Applied to files:
packages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/tsconfig.jsontsconfig.jsonpackages/riviere-extract-config/tsconfig.spec.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:
packages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/tsconfig.jsontsconfig.jsonpackages/riviere-extract-config/tsconfig.spec.json
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Follow `docs/conventions/testing.md` when writing tests
Applied to files:
packages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/tsconfig.spec.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-config/src/validation-fixtures.tspackages/riviere-extract-config/tsconfig.spec.jsonpackages/riviere-extract-config/src/validation.spec.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/**/*.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-config/src/validation-fixtures.tspackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/tsconfig.spec.jsonpackages/riviere-extract-config/src/validation.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/**/*-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-config/src/validation-fixtures.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-config/src/validation-fixtures.tspackages/riviere-extract-config/src/validation.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 violated domain constraints: uniqueness violations, missing relationships, ordering violations, range breaches, state inconsistencies, format mismatches, and temporal ordering
Applied to files:
packages/riviere-extract-config/src/validation-fixtures.tspackages/riviere-extract-config/src/validation.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 null and undefined: null input, undefined input, missing optional properties, and explicit undefined vs missing keys
Applied to files:
packages/riviere-extract-config/src/validation-fixtures.tspackages/riviere-extract-config/src/validation.spec.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-config/README.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:
packages/riviere-extract-config/package.jsontsconfig.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:
packages/riviere-extract-config/package.json
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
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-config/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/**/*.ts : Import from other projects using package names (living-architecture/[pkg-name]) instead of relative paths
Applied to files:
packages/riviere-extract-config/package.jsontsconfig.json
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: After modifying tsconfig references or adding dependencies between projects, run `nx sync` to update TypeScript project references
Applied to files:
packages/riviere-extract-config/tsconfig.jsontsconfig.json
📚 Learning: 2026-01-05T13:01:42.216Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/workflow/code-review.md:0-0
Timestamp: 2026-01-05T13:01:42.216Z
Learning: Applies to docs/workflow/**/*.{ts,tsx,js,jsx} : Check for `/* v8 ignore next -- preserve */` coverage skip directives. These should only be used for unreachable code necessary to satisfy the compiler. Extract code or write tests to mock behavior instead when possible.
Applied to files:
packages/riviere-extract-config/src/types.ts
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
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:
tsconfig.json
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Enforce 100% test coverage as mandatory and not optional
Applied to files:
packages/riviere-extract-config/tsconfig.spec.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/**/*.spec.{ts,tsx,js,jsx} : Test domain-specific edge cases: email formats, URLs with protocols/ports, international phone formats, addresses with Unicode, currency rounding, and percentage boundaries
Applied to files:
packages/riviere-extract-config/src/validation.spec.ts
🧬 Code graph analysis (2)
packages/riviere-extract-config/src/validation-fixtures.ts (1)
packages/riviere-extract-config/src/types.ts (2)
Module(48-56)ExtractionConfig(58-61)
packages/riviere-extract-config/src/validation.spec.ts (3)
packages/riviere-extract-config/src/validation.ts (5)
isValidExtractionConfig(11-13)validateExtractionConfig(40-53)formatValidationErrors(55-60)parseExtractionConfig(62-68)mapAjvErrors(30-38)packages/riviere-extract-config/src/validation-fixtures.ts (6)
createMinimalConfig(39-41)createFullConfig(55-89)createMutableConfig(43-53)createMinimalModule(27-37)createModuleWithoutPath(5-14)createModuleWithoutApi(16-25)packages/riviere-extract-config/src/types.ts (1)
ExtractionConfig(58-61)
🪛 LanguageTool
packages/riviere-extract-config/CLAUDE.md
[grammar] ~9-~9: Ensure spelling is correct
Context: ...mponent types per module (api, useCase, domainOp, event, eventHandler, ui) - Detection r...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
⏰ 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 (13)
package.json (1)
87-87: Verify the purpose of the empty dependencies object.An empty
dependenciesobject has been added to the root package.json. Since this is a private monorepo root, this won't affect publishing, but it's worth confirming whether this is intentional or an artifact from tooling.packages/riviere-extract-config/package.json (1)
26-29: No security concerns — versions ajv@^8.17.1 and ajv-formats@^3.0.1 are current and secure.Both packages are at their latest available versions with no known security vulnerabilities or CVEs.
packages/riviere-extract-config/vitest.config.mts (1)
1-26: No changes needed. Bothvite.config.tsandvitest.config.mtscoexist intentionally across all packages in the monorepo (riviere-builder, riviere-cli, riviere-extract-config, riviere-query, riviere-schema). This is the established pattern:vitest.config.mtscontains the test-specific and coverage configuration and takes precedence for test runs, whilevite.config.tsprovides the base Vite setup. This dual-config structure aligns with the monorepo conventions documented inCLAUDE.mdanddocs/conventions/codebase-structure.md.packages/riviere-extract-config/tsconfig.json (1)
1-13: LGTM! Correct 3-file tsconfig structure.The base tsconfig correctly extends the workspace base configuration and references both library and spec configurations, following the required project structure.
packages/riviere-extract-config/tsconfig.lib.json (1)
1-28: LGTM! Library configuration follows conventions perfectly.The library tsconfig correctly:
- Sets
rootDirto"src"andoutDirto"dist"- Excludes all test files (.test., .spec.)
- Excludes test configuration files
- Includes only source TypeScript files
This aligns perfectly with the learnings for tsconfig.lib.json structure.
Based on learnings.
packages/riviere-extract-config/src/index.ts (1)
1-10: LGTM! Clean public API surface.The barrel export pattern clearly defines the package's public API, exposing types and validation utilities. The separation of type exports (line 1) and named validation exports (lines 2-10) provides a well-organized interface.
packages/riviere-extract-config/CLAUDE.md (1)
1-18: LGTM! Documentation clearly describes the package purpose and principles.The static analysis warning about "domainOp" on line 9 is a false positive—this is an intentional domain-specific term (domain operation) used consistently throughout the codebase.
packages/riviere-extract-config/src/validation.spec.ts (1)
18-385: Excellent test coverage across all validation scenarios.The test suite comprehensively covers:
- Valid configs: minimal, full, multiple modules, all predicate types, nested predicates
- Invalid configs: edge cases for empty arrays, missing required fields, invalid values, constraints violations
- Error handling: null/undefined inputs, error formatting, error mapping
- Parsing behavior: success and failure paths with detailed error messages
This aligns with the 100% coverage requirement and testing best practices per coding guidelines.
packages/riviere-extract-config/src/validation-fixtures.ts (1)
1-89: LGTM! Fixtures follow best practices for test data management.The fixture functions provide:
- Sensible defaults for minimal valid configurations
- Rich examples for comprehensive testing (createFullConfig)
- Mutable configs for property-specific test variations
- Partial configs for testing validation failures
This approach reduces test duplication and follows the pattern from learnings about creating dedicated fixture files.
packages/riviere-extract-config/extraction-config.schema.json (1)
1-315: Well-structured JSON Schema with comprehensive validation rules.The schema effectively defines:
- Strict module structure with all 6 required component types
- Clear separation between
notUsedmarker anddetectionRule- 8 predicate types with proper validation constraints
- Recursive predicates (inClassWith, and, or) for flexible composition
additionalProperties: falsethroughout to catch configuration typosThe use of
const: truefornotUsed(line 79) correctly preventsnotUsed: false, ensuring the field is only used as an explicit marker.packages/riviere-extract-config/src/validation.ts (1)
1-68: No changes needed. The implementation follows the established architectural pattern for Rivière validation packages.The use of AJV + JSON Schema is consistent with
packages/riviere-schema/src/validation.tsand appears to be an intentional design choice for validation library packages. The Zod requirement from project guidelines applies only todocs/conventions/**/*.{ts,tsx}, not to files inpackages/. This file is outside the scope of that requirement.Likely an incorrect or invalid review comment.
packages/riviere-extract-config/src/types.ts (2)
1-3: LGTM: Clean union type definitions.The string literal unions for
FindTargetandComponentTypeare clear and type-safe.
58-61: LGTM: Clean top-level configuration interface.The
ExtractionConfiginterface is well-structured with an optional$schemareference for JSON Schema tooling and a requiredmodulesarray.
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
package.json (1)
85-86: Clarify the purpose of the empty dependencies object.An empty
"dependencies": {}object has been added to the root package.json. Since this is a private monorepo root and the object is empty, it doesn't serve a functional purpose currently. Was this added by tooling (e.g.,nx syncor package manager normalization) or in preparation for future dependencies?</review_comment_end -->
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (1)
package.json
🧰 Additional context used
📓 Path-based instructions (1)
**/package.json
📄 CodeRabbit inference engine (CLAUDE.md)
When adding dependencies between projects, add
"@living-architecture/[pkg-name]": "workspace:*"to the consuming project's package.json
Files:
package.json
🧠 Learnings (4)
📓 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: 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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture
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: 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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/package.json : When adding dependencies between projects, add `"living-architecture/[pkg-name]": "workspace:*"` to the consuming project's package.json
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
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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
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
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
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:
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/**/package.json : When importing from another project, explicitly add living-architecture/[pkg-name] with workspace:* to package.json dependencies
Applied to files:
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: Run nx sync after adding projects and updating tsconfig references
Applied to files:
package.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: main
- GitHub Check: Cloudflare Pages
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 1
Fix all issues with AI Agents 🤖
In @.claude/agents/submit-pr.md:
- Line 15: Replace the unhyphenated phrase "10 minute timeout" with the compound
adjective "10-minute timeout" in the README/instructions text (locate the line
containing the string `Run ./scripts/submit-pr.sh --title "<title>" --body
"<body>" (use 10 minute timeout - script waits for CI)` and update it to use the
hyphenated form to correctly form the compound adjective before "timeout").
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
.claude/agents/submit-pr.md
🧰 Additional context used
🧠 Learnings (1)
📓 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: 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: 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
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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/package.json : When adding dependencies between projects, add `"living-architecture/[pkg-name]": "workspace:*"` to the consuming project's package.json
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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture
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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
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
🪛 LanguageTool
.claude/agents/submit-pr.md
[grammar] ~15-~15: Use a hyphen to join words.
Context: ...title "<title>" --body ""` (use 10 minute timeout - script waits for CI) 5....
(QB_NEW_EN_HYPHEN)
⏰ 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
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
- gitleaks for secrets detection - semgrep for vulnerability scanning - actionlint for GitHub Actions validation - linked_issue warning for task workflow - sequence_diagrams for visual flow 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 1
Fix all issues with AI Agents 🤖
In @.coderabbit.yaml:
- Around line 15-16: The config uses an unsupported property name `linked_issue`
under `pre_merge_checks`; replace it with the correct property
`issue_assessment` so the schema recognizes the check. Update the
`.coderabbit.yaml` entry by renaming `linked_issue:` to `issue_assessment:` and
preserve any nested values under that key so the existing behavior is retained.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (2)
.coderabbit.yamlsonar-project.properties
🧰 Additional context used
🧠 Learnings (8)
📓 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: 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: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture
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
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: 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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/package.json : When adding dependencies between projects, add `"living-architecture/[pkg-name]": "workspace:*"` to the consuming project's package.json
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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/vitest.config.ts : Add vitest.config.ts to new projects if tests are needed, with 100% coverage as the default
📚 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:42.216Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/workflow/code-review.md:0-0
Timestamp: 2026-01-05T13:01:42.216Z
Learning: Applies to docs/workflow/**/*.{ts,tsx,js,jsx} : Check for `/* v8 ignore next -- preserve */` coverage skip directives. These should only be used for unreachable code necessary to satisfy the compiler. Extract code or write tests to mock behavior instead when possible.
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-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:
sonar-project.properties
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Enforce 100% test coverage as mandatory and not optional
Applied to files:
sonar-project.properties
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/vitest.config.ts : Add vitest.config.ts to new projects if tests are needed, with 100% coverage as the default
Applied to files:
sonar-project.properties
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Follow `docs/conventions/testing.md` when writing tests
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). (2)
- GitHub Check: main
- GitHub Check: Cloudflare Pages
🔇 Additional comments (4)
.coderabbit.yaml (3)
7-7: LGTM! Assertive profile aligns with enhanced review objectives.The assertive profile is correctly configured and will provide more comprehensive feedback during code reviews.
9-9: LGTM! Sequence diagrams enhance architectural visibility.Enabling sequence diagrams will provide visual flow documentation in PR walkthroughs, which aligns well with the flow-based architecture approach.
18-24: LGTM! Security and quality tooling properly configured.The tools section correctly enables three valuable static analysis tools:
- Gitleaks for secret scanning
- Semgrep for security vulnerability detection
- actionlint for GitHub Actions workflow validation
These additions strengthen the repository's security posture and CI/CD quality checks.
sonar-project.properties (1)
10-10: Exclusions are justified.The excluded files contain no testable runtime code.
types.tsis a pure TypeScript type definition file, andindex.tsis a bare re-export file that re-exports everything from./typesand selected exports from./validation.All public API functions (
isValidExtractionConfig,validateExtractionConfig,parseExtractionConfig,formatValidationErrors,mapAjvErrors) are fully tested invalidation.spec.ts. The barrel file itself has no logic to test, making the exclusion a standard and appropriate practice in TypeScript monorepos. The 100% coverage requirement is satisfied—what matters is that all testable code is covered, which it is.
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 1
Fix all issues with AI Agents 🤖
In @.claude/commands/complete-task.md:
- Around line 94-96: Update the SonarCloud curl guidance to (1) show how to
obtain the PR number (e.g., mention using the GitHub CLI: gh pr view --json
number -q .number or checking the PR URL) so readers know what to substitute for
<PR_NUMBER>, and (2) replace the hard-coded project key
NTCoding_living-architecture with a placeholder like <PROJECT_KEY> so the
command is reusable; keep the existing note that metricKeys=new_coverage returns
a single measure so .measures[0].value is safe.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (3)
.claude/commands/complete-task.md.coderabbit.yamlpackages/riviere-extract-config/vitest.config.mts
🧰 Additional context used
🧠 Learnings (6)
📓 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} : 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: 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/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: 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
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: 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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/package.json : When adding dependencies between projects, add `"living-architecture/[pkg-name]": "workspace:*"` to the consuming project's package.json
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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture
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
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/vitest.config.ts : Add vitest.config.ts to new projects if tests are needed, with 100% coverage as the default
Applied to files:
packages/riviere-extract-config/vitest.config.mts
📚 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-config/vitest.config.mts
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
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)
Applied to files:
packages/riviere-extract-config/vitest.config.mts
📚 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-config/vitest.config.mts
📚 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-config/vitest.config.mts
⏰ 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)
.coderabbit.yaml (1)
7-24: LGTM! Configuration changes align with schema and best practices.The configuration updates are valid:
- Assertive profile will yield more comprehensive feedback
- Sequence diagrams enabled for better visualization
- Pre-merge checks appropriately configured with docstrings off and issue assessment on warning mode
- Security and linting tools (Gitleaks, Semgrep, actionlint) properly enabled
packages/riviere-extract-config/vitest.config.mts (1)
1-29: LGTM! Well-configured Vitest setup with proper SonarCloud integration.The configuration correctly:
- Sets 100% coverage thresholds as required by project conventions
- Configures the lcov reporter with
projectRoot: repoRootfor repo-relative paths, addressing SonarCloud requirements- Uses appropriate test environment (
node) for a configuration validation package- Follows package naming conventions (
@living-architecture/riviere-extract-config)Based on learnings, this aligns with project standards for Vitest configuration.
.claude/commands/complete-task.md (1)
99-102: Root cause criteria align well with PR context.The three root cause categories (null paths, 0.0 coverage, type-only exclusions) are clearly articulated and directly align with the lcov path configuration and coverage exclusions introduced in this PR. This section effectively connects debugging steps to actionable resolution strategies.
[optional_note]
The guidance to exclude type-only files (interfaces, types) is particularly timely given that this PR defines exclusions forpackages/riviere-extract-config/src/types.tsandpackages/riviere-extract-config/src/index.tsin the coverage configuration.
Encodes the principle: "nitpicks contain valuable information and should not be ignored." Changes: - Add step 5 "Resolve nitpicks" requiring each nitpick to be either fixed or documented with reason for not fixing - Update workflow diagram to show nitpick handling flow - Add structured success message format with pipeline status, nitpick resolution details, and PR URL 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
…ring PR ready Root cause fixes: 1. Process now checks reviewDecision status - CHANGES_REQUESTED means not mergeable 2. Must address ALL CodeRabbit feedback (comments + nitpicks) before success 3. Success message includes CodeRabbit status and "ready to merge" Also fixes CodeRabbit issues: - Add missing project.json for riviere-extract-config - Fix hyphenation: "10 minute" → "10-minute" - Add PR number hint to SonarCloud debugging Principles encoded: - CHANGES_REQUESTED means not mergeable - Nitpicks contain valuable information and should not be ignored 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 2
Fix all issues with AI Agents 🤖
In @.claude/agents/submit-pr.md:
- Line 14: Update Step 3 around the text "Derive PR title (must be conventional
commit format)" to include a concise guideline and examples for conventional
commits: state the accepted pattern (e.g., type(scope): short description), list
common types (feat, fix, chore, docs, refactor, test, perf), show two examples
like "feat(auth): add OAuth2 login" and "fix(api): handle null response", and
optionally add a short link to the spec; ensure the wording is brief and placed
immediately after the existing Step 3 instruction so the derived title follows
this format.
In @packages/riviere-extract-config/project.json:
- Around line 1-3: Update the "name" field in project.json from
"@living-architecture/riviere-extract-config" to "riviere-extract-config" to
match workspace convention; leave the scoped name in package.json as-is for npm
publishing and ensure the project.json "name" exactly matches other workspace
project.json files (e.g., "riviere-extract-config").
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (3)
.claude/agents/submit-pr.md.claude/commands/complete-task.mdpackages/riviere-extract-config/project.json
🧰 Additional context used
🧠 Learnings (12)
📓 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} : 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: 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/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
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: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture
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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/package.json : When adding dependencies between projects, add `"living-architecture/[pkg-name]": "workspace:*"` to the consuming project's package.json
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
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: 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
📚 Learning: 2026-01-05T13:01:42.216Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/workflow/code-review.md:0-0
Timestamp: 2026-01-05T13:01:42.216Z
Learning: After addressing code review issues, complete the task by following docs/workflow/task-workflow.md → Completing Tasks.
Applied to files:
.claude/commands/complete-task.md
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Follow the task workflow steps exactly in `docs/workflow/task-workflow.md` before making any changes or committing code
Applied to files:
.claude/commands/complete-task.md
📚 Learning: 2026-01-05T13:01:42.216Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/workflow/code-review.md:0-0
Timestamp: 2026-01-05T13:01:42.216Z
Learning: Applies to docs/workflow/**/*.{ts,tsx,js,jsx} : Check for `/* v8 ignore next -- preserve */` coverage skip directives. These should only be used for unreachable code necessary to satisfy the compiler. Extract code or write tests to mock behavior instead when possible.
Applied to files:
.claude/commands/complete-task.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:
packages/riviere-extract-config/project.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 : When importing from another project, explicitly add living-architecture/[pkg-name] with workspace:* to package.json dependencies
Applied to files:
packages/riviere-extract-config/project.json
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
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-config/project.json
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/tsconfig.{json,lib.json,spec.json} : After generating a new project, create a 3-file tsconfig structure: tsconfig.json, tsconfig.lib.json, tsconfig.spec.json
Applied to files:
packages/riviere-extract-config/project.json
📚 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-config/project.json
📚 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-config/project.json
📚 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-config/project.json
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture
Applied to files:
packages/riviere-extract-config/project.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: main
- GitHub Check: Cloudflare Pages
🔇 Additional comments (3)
.claude/agents/submit-pr.md (1)
14-16: The script already accepts the--titleand--bodyparameters. No action needed.Likely an incorrect or invalid review comment.
.claude/commands/complete-task.md (2)
88-98: Clarify the order of operations for PR number retrieval.Line 89 retrieves the PR number, but it's used in the conditional logic that starts at line 91. Consider restructuring this section so the PR number is fetched once at the top of step 5, then reused throughout, making the flow more logical.
🔎 Proposed restructuring
5. **Resolve CodeRabbit feedback** (principles: CHANGES_REQUESTED means not mergeable; nitpicks contain valuable information): + - Get PR number: `gh pr view --json number -q .number` + - Check reviewDecision: `gh pr view --json reviewDecision -q .reviewDecision` - - Get PR number: `gh pr view --json number -q .number` - - Check reviewDecision: `gh pr view --json reviewDecision -q .reviewDecision` - If CHANGES_REQUESTED:This keeps the PR number fetch at the logical start of the section rather than nested within conditional logic.
⛔ Skipped due to learnings
Learnt from: CR Repo: NTCoding/living-architecture PR: 0 File: docs/workflow/code-review.md:0-0 Timestamp: 2026-01-05T13:01:42.216Z Learning: After addressing code review issues, complete the task by following docs/workflow/task-workflow.md → Completing Tasks.
117-130: SonarCloud API parameters confirmed as correct.The API endpoint and all query parameters (
component,pullRequest,metricKeys,strategy,ps) are valid according to SonarCloud API documentation. The metric keynew_coverage(Coverage on new code) is also correct. Thestrategy=leavesvalue filters results to leaf nodes (files), and the jq filter logic properly selects components with null or zero coverage values.
- Fix project.json name to match workspace convention (riviere-extract-config) - Add conventional commit format example to submit-pr.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai full review |
✅ Actions performedFull review triggered. |
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Fix all issues with AI Agents
In @package.json:
- Line 86: The root package.json contains an unnecessary empty "dependencies"
field; remove the "dependencies": {} entry from the root package.json so the
monorepo relies on each package's own package.json for dependencies (ensure only
the empty object is removed and the surrounding JSON remains valid).
In @packages/riviere-extract-config/README.md:
- Around line 1-7: Update the README to include a short purpose/description for
riviere-extract-config, a minimal usage example showing the public API (e.g.,
import { validate, parse } from '@living-architecture/riviere-extract-config'
and a sample validate call), links to CLAUDE.md and the JSON schema
(extraction-config.schema.json), and a brief schema/reference section; keep the
existing build instructions but prepend these docs so consumers can understand
and use validate/parse without opening source files.
In @packages/riviere-extract-config/vite.config.ts:
- Around line 8-19: This file duplicates Vitest settings: remove the entire
test: { ... } block from vite.config.ts so vitest.config.mts remains the single
source of truth; if you must keep test config in vite.config.ts instead, add the
same coverage.thresholds object (lines for statements, branches, functions,
lines = 100) inside the test.coverage property to match vitest.config.mts and
ensure 100% coverage enforcement.
In @packages/riviere-extract-config/vitest.config.mts:
- Line 20: The reporter config uses an overly verbose explicit tuple assertion;
change the expression `reporter: ['text', ['lcov', { projectRoot: repoRoot }]]
as ['text', ['lcov', { projectRoot: string }]]` to a simpler, inference-friendly
form (e.g., use `as const` on the literal or extract the tuple into a properly
typed constant) so TypeScript can infer the correct readonly tuple type without
hard-coding the shape; update the `reporter` assignment in the vitest config
accordingly (referencing the `reporter` property in this file and the literal
array value shown).
📜 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 (21)
.claude/agents/submit-pr.md.claude/commands/complete-task.md.coderabbit.yamlpackage.jsonpackages/riviere-extract-config/CLAUDE.mdpackages/riviere-extract-config/README.mdpackages/riviere-extract-config/extraction-config.schema.jsonpackages/riviere-extract-config/package.jsonpackages/riviere-extract-config/project.jsonpackages/riviere-extract-config/src/index.tspackages/riviere-extract-config/src/types.tspackages/riviere-extract-config/src/validation-fixtures.tspackages/riviere-extract-config/src/validation.spec.tspackages/riviere-extract-config/src/validation.tspackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/tsconfig.spec.jsonpackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/vitest.config.mtssonar-project.propertiestsconfig.json
🧰 Additional context used
📓 Path-based instructions (4)
**/tsconfig.{json,lib.json,spec.json}
📄 CodeRabbit inference engine (CLAUDE.md)
After generating a new project, create a 3-file tsconfig structure: tsconfig.json, tsconfig.lib.json, tsconfig.spec.json
Files:
packages/riviere-extract-config/tsconfig.spec.jsontsconfig.jsonpackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/tsconfig.json
**/*.{test,spec}.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{test,spec}.{ts,tsx,js,jsx}: Enforce 100% test coverage as mandatory and not optional
Followdocs/conventions/testing.mdwhen writing tests
Files:
packages/riviere-extract-config/src/validation.spec.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx,js,jsx}: Do not log sensitive data (passwords, tokens, PII)
Use cross-project imports with package names (e.g.,import { X } from '@living-architecture/[pkg-name]'), not relative paths
Files:
packages/riviere-extract-config/src/validation.spec.tspackages/riviere-extract-config/src/index.tspackages/riviere-extract-config/src/validation.tspackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/src/validation-fixtures.tspackages/riviere-extract-config/src/types.ts
**/package.json
📄 CodeRabbit inference engine (CLAUDE.md)
When adding dependencies between projects, add
"@living-architecture/[pkg-name]": "workspace:*"to the consuming project's package.json
Files:
packages/riviere-extract-config/package.jsonpackage.json
🧠 Learnings (37)
📓 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: 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: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture
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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/package.json : When adding dependencies between projects, add `"living-architecture/[pkg-name]": "workspace:*"` to the consuming project's package.json
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
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
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: 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
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/vitest.config.ts : Add vitest.config.ts to new projects if tests are needed, with 100% coverage as the default
Applied to files:
packages/riviere-extract-config/vitest.config.mtspackages/riviere-extract-config/tsconfig.spec.jsonpackages/riviere-extract-config/src/validation.spec.tssonar-project.propertiespackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/src/validation-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-config/vitest.config.mtspackages/riviere-extract-config/tsconfig.spec.jsonpackages/riviere-extract-config/src/validation.spec.tssonar-project.propertiespackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/src/validation-fixtures.ts
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
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)
Applied to files:
packages/riviere-extract-config/vitest.config.mtspackages/riviere-extract-config/tsconfig.spec.jsontsconfig.jsonpackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/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.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-config/vitest.config.mtspackages/riviere-extract-config/tsconfig.spec.jsonpackages/riviere-extract-config/src/validation.spec.tssonar-project.propertiespackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/src/validation-fixtures.tspackages/riviere-extract-config/CLAUDE.mdpackages/riviere-extract-config/src/types.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-config/vitest.config.mtspackages/riviere-extract-config/tsconfig.spec.jsonsonar-project.propertiespackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/tsconfig.json
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/tsconfig.{json,lib.json,spec.json} : After generating a new project, create a 3-file tsconfig structure: tsconfig.json, tsconfig.lib.json, tsconfig.spec.json
Applied to files:
packages/riviere-extract-config/tsconfig.spec.jsontsconfig.jsonpackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/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:
packages/riviere-extract-config/tsconfig.spec.jsontsconfig.jsonpackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/tsconfig.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-config/tsconfig.spec.jsonpackages/riviere-extract-config/src/validation-fixtures.ts
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Follow `docs/conventions/testing.md` when writing tests
Applied to files:
packages/riviere-extract-config/tsconfig.spec.jsonsonar-project.propertiespackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/vite.config.tspackages/riviere-extract-config/tsconfig.json
📚 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-config/tsconfig.spec.jsontsconfig.jsonpackages/riviere-extract-config/project.jsonpackages/riviere-extract-config/src/validation.spec.tspackages/riviere-extract-config/src/index.tspackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/src/validation.tspackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/package.jsonpackages/riviere-extract-config/extraction-config.schema.jsonpackages/riviere-extract-config/src/validation-fixtures.tspackages/riviere-extract-config/CLAUDE.mdpackages/riviere-extract-config/README.mdpackages/riviere-extract-config/src/types.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/**/*.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-config/tsconfig.spec.jsonpackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/src/validation-fixtures.ts
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Enforce 100% test coverage as mandatory and not optional
Applied to files:
packages/riviere-extract-config/tsconfig.spec.jsonpackages/riviere-extract-config/src/validation.spec.tssonar-project.properties
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: After modifying tsconfig references or adding dependencies between projects, run `nx sync` to update TypeScript project references
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: Run nx sync after adding projects and updating tsconfig references
Applied to files:
tsconfig.jsonpackages/riviere-extract-config/tsconfig.jsonpackage.json
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
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:
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/**/*.ts : Import from other projects using package names (living-architecture/[pkg-name]) instead of relative paths
Applied to files:
tsconfig.jsonpackages/riviere-extract-config/project.jsonpackages/riviere-extract-config/package.json
📚 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:
tsconfig.jsonpackages/riviere-extract-config/project.jsonpackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/src/validation.tspackages/riviere-extract-config/package.jsonpackages/riviere-extract-config/extraction-config.schema.jsonpackages/riviere-extract-config/CLAUDE.mdpackages/riviere-extract-config/README.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:
tsconfig.jsonpackages/riviere-extract-config/project.jsonpackages/riviere-extract-config/package.jsonpackage.json
📚 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:
tsconfig.jsonpackages/riviere-extract-config/project.jsonpackages/riviere-extract-config/src/validation.spec.tspackages/riviere-extract-config/src/index.tspackages/riviere-extract-config/tsconfig.lib.jsonpackages/riviere-extract-config/src/validation.tspackages/riviere-extract-config/tsconfig.jsonpackages/riviere-extract-config/package.jsonpackages/riviere-extract-config/extraction-config.schema.jsonpackages/riviere-extract-config/src/validation-fixtures.tspackages/riviere-extract-config/CLAUDE.mdpackages/riviere-extract-config/README.mdpackages/riviere-extract-config/src/types.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 : Verify and update package.json name to living-architecture/[project-name] after project generation
Applied to files:
tsconfig.jsonpackages/riviere-extract-config/project.jsonpackages/riviere-extract-config/package.json
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
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:
tsconfig.jsonpackages/riviere-extract-config/project.jsonpackages/riviere-extract-config/package.jsonpackage.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 : Use domain language in package names, not technical jargon (e.g., living-architecture/order-processing instead of living-architecture/order-utils)
Applied to files:
packages/riviere-extract-config/project.json
📚 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:
packages/riviere-extract-config/project.jsonpackages/riviere-extract-config/CLAUDE.mdpackages/riviere-extract-config/README.md
📚 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 violated domain constraints: uniqueness violations, missing relationships, ordering violations, range breaches, state inconsistencies, format mismatches, and temporal ordering
Applied to files:
packages/riviere-extract-config/src/validation.spec.tspackages/riviere-extract-config/src/validation-fixtures.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-config/src/validation.spec.tspackages/riviere-extract-config/src/validation-fixtures.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 domain-specific edge cases: email formats, URLs with protocols/ports, international phone formats, addresses with Unicode, currency rounding, and percentage boundaries
Applied to files:
packages/riviere-extract-config/src/validation.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 null and undefined: null input, undefined input, missing optional properties, and explicit undefined vs missing keys
Applied to files:
packages/riviere-extract-config/src/validation.spec.ts
📚 Learning: 2026-01-05T13:01:42.216Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/workflow/code-review.md:0-0
Timestamp: 2026-01-05T13:01:42.216Z
Learning: After addressing code review issues, complete the task by following docs/workflow/task-workflow.md → Completing Tasks.
Applied to files:
.claude/commands/complete-task.md
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Follow the task workflow steps exactly in `docs/workflow/task-workflow.md` before making any changes or committing code
Applied to files:
.claude/commands/complete-task.md
📚 Learning: 2026-01-05T13:01:42.216Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/workflow/code-review.md:0-0
Timestamp: 2026-01-05T13:01:42.216Z
Learning: Applies to docs/workflow/**/*.{ts,tsx,js,jsx} : Check for `/* v8 ignore next -- preserve */` coverage skip directives. These should only be used for unreachable code necessary to satisfy the compiler. Extract code or write tests to mock behavior instead when possible.
Applied to files:
.claude/commands/complete-task.mdsonar-project.propertiespackages/riviere-extract-config/src/types.ts
📚 Learning: 2026-01-03T17:37:22.708Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/software-design.md:0-0
Timestamp: 2026-01-03T17:37:22.708Z
Learning: Applies to docs/conventions/**/*.{ts,tsx} : Use Zod for runtime validation. In TypeScript, use Zod schemas for parsing external data, API responses, and user input. Type inference from schemas keeps types and validation in sync.
Applied to files:
packages/riviere-extract-config/src/validation.tspackages/riviere-extract-config/CLAUDE.md
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture
Applied to files:
packages/riviere-extract-config/package.jsonpackages/riviere-extract-config/CLAUDE.mdpackages/riviere-extract-config/README.md
📚 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-config/src/validation-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-config/CLAUDE.md
📚 Learning: 2026-01-02T11:58:34.018Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-02T11:58:34.018Z
Learning: Read and follow all instructions in CLAUDE.md
Applied to files:
packages/riviere-extract-config/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:
packages/riviere-extract-config/README.md
🧬 Code graph analysis (3)
packages/riviere-extract-config/src/validation.spec.ts (3)
packages/riviere-extract-config/src/validation.ts (5)
isValidExtractionConfig(11-13)validateExtractionConfig(40-53)formatValidationErrors(55-60)parseExtractionConfig(62-68)mapAjvErrors(30-38)packages/riviere-extract-config/src/validation-fixtures.ts (6)
createMinimalConfig(39-41)createFullConfig(55-89)createMutableConfig(43-53)createMinimalModule(27-37)createModuleWithoutPath(5-14)createModuleWithoutApi(16-25)packages/riviere-extract-config/src/types.ts (1)
ExtractionConfig(58-61)
packages/riviere-extract-config/src/validation.ts (3)
packages/riviere-builder/src/builder.ts (1)
validate(765-767)packages/riviere-extract-config/src/index.ts (7)
isValidExtractionConfig(3-3)ValidationError(8-8)ValidationResult(9-9)mapAjvErrors(7-7)validateExtractionConfig(4-4)formatValidationErrors(6-6)parseExtractionConfig(5-5)packages/riviere-extract-config/src/types.ts (1)
ExtractionConfig(58-61)
packages/riviere-extract-config/src/validation-fixtures.ts (1)
packages/riviere-extract-config/src/types.ts (2)
Module(48-56)ExtractionConfig(58-61)
🪛 LanguageTool
packages/riviere-extract-config/CLAUDE.md
[grammar] ~9-~9: Ensure spelling is correct
Context: ...mponent types per module (api, useCase, domainOp, event, eventHandler, ui) - Detection r...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
⏰ 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 (18)
packages/riviere-extract-config/project.json (1)
1-3: LGTM! Project name follows workspace convention.The project name correctly uses the simple naming format without the
@living-architecture/prefix, consistent with other project.json files in the workspace.packages/riviere-extract-config/tsconfig.json (1)
1-13: LGTM! Correctly implements 3-file tsconfig structure.The configuration properly extends the base config and references the lib and spec configs, following the workspace convention for project TypeScript setup.
As per coding guidelines, this matches the required 3-file tsconfig structure (tsconfig.json, tsconfig.lib.json, tsconfig.spec.json).
sonar-project.properties (1)
10-10: Exclusions fortypes.tsandindex.tsare justified.
types.tscontains only type definitions with no executable code.index.tsis a barrel re-export file forwarding exports from./typesand./validation—no testable logic resides in the file itself. Both meet the project requirement for coverage exclusions (type definitions and barrel re-exports with no testable logic). The actual logic invalidation.tsshould be tested directly..coderabbit.yaml (1)
7-24: LGTM! Well-configured CodeRabbit settings.The configuration changes are all valid and enhance the review process:
- Assertive profile will provide more thorough feedback
- Sequence diagrams add valuable context to reviews
- Pre-merge checks appropriately configured (docstrings off, issue assessment as warning)
- Security and workflow tooling (Gitleaks, Semgrep, Actionlint) properly enabled
.claude/agents/submit-pr.md (1)
14-16: LGTM! Previous review feedback addressed.The updated steps now include:
- Clear conventional commit format guidance with example
- Properly hyphenated "10-minute timeout"
- Explicit parameters for the submission script
The documentation is clear and actionable.
packages/riviere-extract-config/CLAUDE.md (1)
1-18: LGTM! Clear and well-structured documentation.The CLAUDE.md file effectively documents the extraction config DSL with:
- Clear purpose statement
- Comprehensive validation scope
- Well-defined guiding principles emphasizing schema-first design and fail-fast validation
Note: The LanguageTool hint about "domainOp" is a false positive—it's a technical term (domain operation) specific to this DSL.
packages/riviere-extract-config/tsconfig.lib.json (1)
1-28: LGTM! TypeScript configuration follows conventions.The library configuration is properly set up:
- Correct rootDir/outDir structure (src → dist)
- Comprehensive test file exclusions
- Appropriate Node.js types
- Extends base configuration correctly
As per coding guidelines, this follows the required 3-file tsconfig structure for packages.
packages/riviere-extract-config/tsconfig.spec.json (1)
1-34: LGTM! Test configuration is properly structured.The tsconfig.spec.json correctly extends the base configuration, includes all test files and Vitest/Vite config files, and references the library configuration. The types array appropriately includes Vitest globals and related type definitions needed for the test environment.
packages/riviere-extract-config/vitest.config.mts (1)
16-27: LGTM! Coverage configuration enforces 100% thresholds.The coverage configuration correctly enforces 100% thresholds for all metrics (lines, statements, functions, branches) as per project conventions.
packages/riviere-extract-config/src/index.ts (1)
1-10: LGTM! Public API surface is well-structured.The entry point properly re-exports both types and validation functions, creating a clean public API for consumers. The use of relative paths for internal module imports is correct.
packages/riviere-extract-config/package.json (2)
1-30: LGTM! Package configuration is well-structured.The package.json correctly defines the package name following workspace conventions, includes a proper exports map with source/types/import conditions, and appropriately lists the distribution files.
26-29: The specified versions ofajv(^8.17.1) andajv-formats(^3.0.1) are already at their latest releases and have no known security vulnerabilities. No action needed.packages/riviere-extract-config/src/validation.spec.ts (1)
1-385: Excellent test coverage across all validation functions.The test suite is comprehensive and well-structured, covering:
- Valid scenarios with minimal, full, and multi-module configurations
- All eight predicate types (hasDecorator, hasJSDoc, extendsClass, implementsInterface, nameEndsWith, nameMatches, inClassWith, and/or)
- Nested and composite predicates
- Edge cases: null, undefined, empty arrays, missing/empty required fields
- Error formatting and mapping
- Parse function with success and failure paths
This achieves the required 100% test coverage and follows testing conventions for edge cases and domain constraints.
packages/riviere-extract-config/src/validation-fixtures.ts (1)
1-89: Well-designed fixture utilities following best practices.The fixture builders provide excellent test data patterns:
createMinimalModule/Configfor valid baseline scenarioscreateModuleWithout*variants for testing missing required fieldscreateMutableConfigreturns both config and module reference, enabling tests to modify properties in placecreateFullConfigdemonstrates all predicate types with realistic examplesThis follows the learning to use fixture builder functions that provide defaults with override capability, reducing test duplication.
packages/riviere-extract-config/src/validation.ts (2)
1-68: Clean validation implementation with robust error handling.The implementation is well-structured:
- Type guard pattern with
isValidExtractionConfigprovides type narrowing- Error mapping normalizes Ajv errors into consistent
ValidationErrorformat- Fallback messages for edge cases (empty errors array, missing messages)
parseExtractionConfigthrows with formatted, actionable error messagesThe use of Ajv aligns with the PR's stated deliverable of "AJV-based validation producing clear, actionable error messages."
4-4: Import assertion syntax is fully supported—no action needed.The project's TypeScript version (5.9.2) and Node.js version (22, enforced in CI) exceed the minimum requirements for import assertion support. The compiler configuration (target: es2023, module: ESNext, moduleResolution: bundler) fully supports this syntax.
packages/riviere-extract-config/extraction-config.schema.json (1)
1-315: Comprehensive and well-structured JSON Schema for extraction DSL.The schema design is excellent:
- Eight predicate types with clear semantics (hasDecorator, hasJSDoc, extendsClass, implementsInterface, nameEndsWith, nameMatches, inClassWith, and/or)
- Recursive predicates (
inClassWith,and,or) properly reference#/$defs/predicate- Strict validation with
additionalProperties: falseprevents typos and invalid properties- Minimum length/item constraints prevent empty values (e.g.,
minLength: 1,minItems: 2for and/or)notUsed: { const: true }ensures only valid marker values- Clear descriptions aid IDE autocomplete and developer understanding
- Schema aligns perfectly with TypeScript types in
types.tspackages/riviere-extract-config/src/types.ts (1)
1-61: TypeScript types perfectly mirror the JSON Schema.The type definitions are clean and idiomatic:
- Union types (
FindTarget,ComponentType,Predicate,ComponentRule) match schema enums and oneOf structures- Predicate interfaces align with their corresponding schema definitions
- Recursive types (
InClassWithPredicate,AndPredicate,OrPredicate) properly reference thePredicateunionNotUseduses literal typetruematching the schema'sconst: trueModuleandExtractionConfigstructures match schema requirements exactlyThis strong alignment between schema and types ensures type safety for consumers and enables IDE autocomplete based on the validation rules.
- Remove duplicate test config from vite.config.ts (authoritative config in vitest.config.mts) - Remove empty dependencies object from root package.json - Add usage examples to riviere-extract-config README 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Fix all issues with AI Agents
In @packages/riviere-extract-config/README.md:
- Around line 1-30: Add a "Documentation" section to
packages/riviere-extract-config/README.md immediately after the Usage examples
and before the existing "Building" heading; create a second-level heading "##
Documentation" and include two bullet links: one to CLAUDE.md with a short label
like "Design principles and schema overview" and one to
extraction-config.schema.json labeled "JSON Schema reference" so reviewers can
find the design doc and schema.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (2)
packages/riviere-extract-config/README.mdpackages/riviere-extract-config/vite.config.ts
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (CLAUDE.md)
**/*.{ts,tsx,js,jsx}: Do not log sensitive data (passwords, tokens, PII)
Use cross-project imports with package names (e.g.,import { X } from '@living-architecture/[pkg-name]'), not relative paths
Files:
packages/riviere-extract-config/vite.config.ts
🧠 Learnings (18)
📓 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} : 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: 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/**/{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: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture
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
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/software-design.md:0-0
Timestamp: 2026-01-03T17:37:22.708Z
Learning: Applies to docs/conventions/**/*.{ts,tsx} : Use Zod for runtime validation. In TypeScript, use Zod schemas for parsing external data, API responses, and user input. Type inference from schemas keeps types and validation in sync.
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/vitest.config.ts : Add vitest.config.ts to new projects if tests are needed, with 100% coverage as the default
Applied to files:
packages/riviere-extract-config/vite.config.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-config/vite.config.ts
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
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)
Applied to files:
packages/riviere-extract-config/vite.config.ts
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Enforce 100% test coverage as mandatory and not optional
Applied to files:
packages/riviere-extract-config/vite.config.ts
📚 Learning: 2026-01-05T13:01:42.216Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/workflow/code-review.md:0-0
Timestamp: 2026-01-05T13:01:42.216Z
Learning: Applies to docs/workflow/**/*.{ts,tsx,js,jsx} : Check for `/* v8 ignore next -- preserve */` coverage skip directives. These should only be used for unreachable code necessary to satisfy the compiler. Extract code or write tests to mock behavior instead when possible.
Applied to files:
packages/riviere-extract-config/vite.config.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.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-config/vite.config.ts
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Follow `docs/conventions/testing.md` when writing tests
Applied to files:
packages/riviere-extract-config/vite.config.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 violated domain constraints: uniqueness violations, missing relationships, ordering violations, range breaches, state inconsistencies, format mismatches, and temporal ordering
Applied to files:
packages/riviere-extract-config/vite.config.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-config/vite.config.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/**/*-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-config/vite.config.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-config/README.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-config/README.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:
packages/riviere-extract-config/README.md
📚 Learning: 2026-01-02T11:58:30.905Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: packages/riviere-schema/CLAUDE.md:0-0
Timestamp: 2026-01-02T11:58:30.905Z
Learning: Do not include riviere-schema in breaking change commits (`!` or `BREAKING CHANGE`) - this automatically bumps the major version
Applied to files:
packages/riviere-extract-config/README.md
📚 Learning: 2026-01-04T18:35:42.314Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-01-04T18:35:42.314Z
Learning: Extract software architecture from code as living documentation using Riviere schema for flow-based (not structural) architecture
Applied to files:
packages/riviere-extract-config/README.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-config/README.md
📚 Learning: 2026-01-03T17:37:22.708Z
Learnt from: CR
Repo: NTCoding/living-architecture PR: 0
File: docs/conventions/software-design.md:0-0
Timestamp: 2026-01-03T17:37:22.708Z
Learning: Applies to docs/conventions/**/*.{ts,tsx} : Use Zod for runtime validation. In TypeScript, use Zod schemas for parsing external data, API responses, and user input. Type inference from schemas keeps types and validation in sync.
Applied to files:
packages/riviere-extract-config/README.md
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: Cloudflare Pages
- GitHub Check: main
🔇 Additional comments (2)
packages/riviere-extract-config/vite.config.ts (2)
1-1: LGTM!The import statement is correct and uses the standard Vite configuration API.
3-7: LGTM! Previous duplication issue resolved.The configuration is now minimal and appropriate. The test configuration has been correctly removed, delegating that responsibility to vitest.config.mts as the single source of truth. The remaining Vite settings (root, cacheDir, plugins) are properly configured for an NX monorepo package.
… schema Addresses CodeRabbit feedback to provide references to design principles and schema documentation. NOT FIXING: vitest.config.mts type assertion simplification (nitpick) - removing the explicit type assertion breaks TypeScript typecheck because vitest's CoverageReporter type requires the exact tuple shape and neither inference nor `as const` produces a compatible type. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
|



Summary
Implements task #35: Create the
@living-architecture/riviere-extract-configpackage with JSON Schema validation for the extraction DSL.hasDecorator,hasJSDoc,extendsClass,implementsInterface,nameEndsWith,nameMatches,inClassWith, and logical operators (and/or)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.