77 lines
1.7 KiB
Plaintext
77 lines
1.7 KiB
Plaintext
@startuml cascading-rules
|
|
!theme plain
|
|
title Cascading Rules Configuration System
|
|
|
|
package "Repository Root" {
|
|
file ".ai-rules.yml" as root_rules #LightBlue
|
|
|
|
package "Docs/features/" {
|
|
file ".ai-rules.yml" as features_rules #LightGreen
|
|
|
|
package "FR_123/" {
|
|
file ".ai-rules.yml" as feature_rules #LightYellow
|
|
file "request.md" as request
|
|
|
|
folder "discussions/" {
|
|
file "feature.discussion.md" as discussion
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
component "config.py" as config
|
|
|
|
request --> config: Process file
|
|
config --> feature_rules: 1. Load (nearest)
|
|
config --> features_rules: 2. Load (parent)
|
|
config --> root_rules: 3. Load (root)
|
|
config --> config: 4. Deep merge\n(nearest wins)
|
|
|
|
note right of config
|
|
**Cascading Precedence:**
|
|
1. Nearest directory rules
|
|
2. Parent directory rules
|
|
3. Root rules
|
|
|
|
**Merge Strategy:**
|
|
- Nested dictionaries are merged recursively
|
|
- Arrays are replaced (not merged)
|
|
- Nearest values win on conflicts
|
|
end note
|
|
|
|
note top of feature_rules
|
|
**FR_123/.ai-rules.yml**
|
|
|
|
rules:
|
|
feature_request:
|
|
outputs:
|
|
feature_discussion:
|
|
# Override specific output config
|
|
instruction_append: |
|
|
Additional context for FR_123
|
|
end note
|
|
|
|
note top of features_rules
|
|
**Docs/features/.ai-rules.yml**
|
|
|
|
file_associations:
|
|
"request.md": "feature_request"
|
|
"feature.discussion.md": "feature_discussion_update"
|
|
|
|
rules:
|
|
feature_request:
|
|
outputs:
|
|
feature_discussion:
|
|
path: "Docs/features/{feature_id}/discussions/feature.discussion.md"
|
|
output_type: "feature_discussion_writer"
|
|
end note
|
|
|
|
note top of root_rules
|
|
**Root .ai-rules.yml**
|
|
|
|
Global rules that apply
|
|
to the entire repository
|
|
end note
|
|
|
|
@enduml
|