aiox-core 5.0.0 → 5.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.aiox-core/data/entity-registry.yaml +5297 -1814
- package/.aiox-core/data/registry-update-log.jsonl +2 -0
- package/.aiox-core/development/templates/service-template/README.md.hbs +158 -158
- package/.aiox-core/development/templates/service-template/__tests__/index.test.ts.hbs +237 -237
- package/.aiox-core/development/templates/service-template/client.ts.hbs +403 -403
- package/.aiox-core/development/templates/service-template/errors.ts.hbs +182 -182
- package/.aiox-core/development/templates/service-template/index.ts.hbs +120 -120
- package/.aiox-core/development/templates/service-template/package.json.hbs +87 -87
- package/.aiox-core/development/templates/service-template/types.ts.hbs +145 -145
- package/.aiox-core/development/templates/squad-template/LICENSE +21 -21
- package/.aiox-core/infrastructure/scripts/tool-resolver.js +4 -4
- package/.aiox-core/infrastructure/templates/aiox-sync.yaml.template +182 -182
- package/.aiox-core/infrastructure/templates/coderabbit.yaml.template +279 -279
- package/.aiox-core/infrastructure/templates/github-workflows/ci.yml.template +169 -169
- package/.aiox-core/infrastructure/templates/github-workflows/pr-automation.yml.template +330 -330
- package/.aiox-core/infrastructure/templates/github-workflows/release.yml.template +196 -196
- package/.aiox-core/infrastructure/templates/gitignore/gitignore-aiox-base.tmpl +63 -63
- package/.aiox-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -18
- package/.aiox-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -85
- package/.aiox-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -145
- package/.aiox-core/install-manifest.yaml +58 -58
- package/.aiox-core/local-config.yaml.template +71 -71
- package/.aiox-core/monitor/hooks/lib/__init__.py +1 -1
- package/.aiox-core/monitor/hooks/lib/enrich.py +58 -58
- package/.aiox-core/monitor/hooks/lib/send_event.py +47 -47
- package/.aiox-core/monitor/hooks/notification.py +29 -29
- package/.aiox-core/monitor/hooks/post_tool_use.py +45 -45
- package/.aiox-core/monitor/hooks/pre_compact.py +29 -29
- package/.aiox-core/monitor/hooks/pre_tool_use.py +40 -40
- package/.aiox-core/monitor/hooks/stop.py +29 -29
- package/.aiox-core/monitor/hooks/subagent_stop.py +29 -29
- package/.aiox-core/monitor/hooks/user_prompt_submit.py +38 -38
- package/.aiox-core/product/templates/adr.hbs +125 -125
- package/.aiox-core/product/templates/dbdr.hbs +241 -241
- package/.aiox-core/product/templates/engine/elicitation.js +2 -3
- package/.aiox-core/product/templates/epic.hbs +212 -212
- package/.aiox-core/product/templates/pmdr.hbs +186 -186
- package/.aiox-core/product/templates/prd-v2.0.hbs +216 -216
- package/.aiox-core/product/templates/prd.hbs +201 -201
- package/.aiox-core/product/templates/story.hbs +263 -263
- package/.aiox-core/product/templates/task.hbs +170 -170
- package/.aiox-core/product/templates/tmpl-comment-on-examples.sql +158 -158
- package/.aiox-core/product/templates/tmpl-migration-script.sql +91 -91
- package/.aiox-core/product/templates/tmpl-rls-granular-policies.sql +104 -104
- package/.aiox-core/product/templates/tmpl-rls-kiss-policy.sql +10 -10
- package/.aiox-core/product/templates/tmpl-rls-roles.sql +135 -135
- package/.aiox-core/product/templates/tmpl-rls-simple.sql +77 -77
- package/.aiox-core/product/templates/tmpl-rls-tenant.sql +152 -152
- package/.aiox-core/product/templates/tmpl-rollback-script.sql +77 -77
- package/.aiox-core/product/templates/tmpl-seed-data.sql +140 -140
- package/.aiox-core/product/templates/tmpl-smoke-test.sql +16 -16
- package/.aiox-core/product/templates/tmpl-staging-copy-merge.sql +139 -139
- package/.aiox-core/product/templates/tmpl-stored-proc.sql +140 -140
- package/.aiox-core/product/templates/tmpl-trigger.sql +152 -152
- package/.aiox-core/product/templates/tmpl-view-materialized.sql +133 -133
- package/.aiox-core/product/templates/tmpl-view.sql +177 -177
- package/.aiox-core/scripts/pm.sh +0 -0
- package/.claude/hooks/code-intel-pretool.cjs +107 -0
- package/.claude/hooks/enforce-architecture-first.py +196 -196
- package/.claude/hooks/mind-clone-governance.py +192 -192
- package/.claude/hooks/read-protection.py +151 -151
- package/.claude/hooks/slug-validation.py +176 -176
- package/.claude/hooks/sql-governance.py +182 -182
- package/.claude/hooks/write-path-validation.py +194 -194
- package/LICENSE +33 -33
- package/bin/aiox-graph.js +0 -0
- package/bin/aiox-minimal.js +0 -0
- package/bin/aiox.js +0 -0
- package/docs/guides/aios-workflows/README.md +247 -0
- package/docs/guides/aios-workflows/bob-orchestrator-workflow.md +1536 -0
- package/package.json +1 -1
- package/packages/aiox-install/bin/aiox-install.js +0 -0
- package/packages/aiox-install/bin/edmcp.js +0 -0
- package/packages/aiox-pro-cli/bin/aiox-pro.js +0 -0
- package/packages/installer/src/wizard/pro-setup.js +210 -123
- package/pro/README.md +66 -0
- package/pro/license/degradation.js +220 -0
- package/pro/license/errors.js +450 -0
- package/pro/license/feature-gate.js +354 -0
- package/pro/license/index.js +181 -0
- package/pro/license/license-api.js +679 -0
- package/pro/license/license-cache.js +523 -0
- package/pro/license/license-crypto.js +303 -0
- package/scripts/check-markdown-links.py +352 -352
- package/scripts/dashboard-parallel-dev.sh +0 -0
- package/scripts/dashboard-parallel-phase3.sh +0 -0
- package/scripts/dashboard-parallel-phase4.sh +0 -0
- package/scripts/glue/README.md +355 -0
- package/scripts/glue/compose-agent-prompt.cjs +362 -0
- package/scripts/install-monitor-hooks.sh +0 -0
- package/.aiox-core/lib/build.json +0 -1
|
@@ -1,241 +1,241 @@
|
|
|
1
|
-
---
|
|
2
|
-
template_id: dbdr
|
|
3
|
-
template_name: Database Decision Record
|
|
4
|
-
version: 1.0
|
|
5
|
-
variables:
|
|
6
|
-
- name: number
|
|
7
|
-
type: number
|
|
8
|
-
required: true
|
|
9
|
-
auto: next_dbdr_number
|
|
10
|
-
- name: title
|
|
11
|
-
type: string
|
|
12
|
-
required: true
|
|
13
|
-
prompt: "Title of the database decision:"
|
|
14
|
-
- name: status
|
|
15
|
-
type: choice
|
|
16
|
-
required: true
|
|
17
|
-
choices: [Proposed, Approved, Implemented, Rolled Back]
|
|
18
|
-
default: Proposed
|
|
19
|
-
- name: dbType
|
|
20
|
-
type: choice
|
|
21
|
-
required: true
|
|
22
|
-
choices: [PostgreSQL, MySQL, MongoDB, SQLite, Supabase, Other]
|
|
23
|
-
prompt: "Which database?"
|
|
24
|
-
- name: owner
|
|
25
|
-
type: string
|
|
26
|
-
required: true
|
|
27
|
-
prompt: "Who is the decision owner?"
|
|
28
|
-
- name: context
|
|
29
|
-
type: text
|
|
30
|
-
required: true
|
|
31
|
-
prompt: "What is the context and data problem?"
|
|
32
|
-
- name: decision
|
|
33
|
-
type: text
|
|
34
|
-
required: true
|
|
35
|
-
prompt: "What is the decision being made?"
|
|
36
|
-
- name: migrationStrategy
|
|
37
|
-
type: text
|
|
38
|
-
required: true
|
|
39
|
-
prompt: "What is the migration strategy?"
|
|
40
|
-
- name: rollbackPlan
|
|
41
|
-
type: text
|
|
42
|
-
required: true
|
|
43
|
-
prompt: "What is the rollback plan?"
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
# DBDR {{padNumber number 3}}: {{title}}
|
|
47
|
-
|
|
48
|
-
**Status:** {{status}}
|
|
49
|
-
**Date:** {{formatDate now "YYYY-MM-DD"}}
|
|
50
|
-
**Owner:** {{owner}}
|
|
51
|
-
**Database:** {{dbType}}
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## Context
|
|
56
|
-
|
|
57
|
-
{{#if currentState}}
|
|
58
|
-
### Current State
|
|
59
|
-
{{currentState}}
|
|
60
|
-
{{/if}}
|
|
61
|
-
|
|
62
|
-
### Problem Statement
|
|
63
|
-
{{context}}
|
|
64
|
-
|
|
65
|
-
{{#if dataVolume}}
|
|
66
|
-
### Data Volume Considerations
|
|
67
|
-
- **Current Size:** {{dataVolume.current}}
|
|
68
|
-
- **Projected Growth:** {{dataVolume.projected}}
|
|
69
|
-
- **Retention Policy:** {{dataVolume.retention}}
|
|
70
|
-
{{/if}}
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## Decision
|
|
75
|
-
|
|
76
|
-
{{decision}}
|
|
77
|
-
|
|
78
|
-
{{#if rationale}}
|
|
79
|
-
### Rationale
|
|
80
|
-
{{rationale}}
|
|
81
|
-
{{/if}}
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## Schema Changes
|
|
86
|
-
|
|
87
|
-
{{#if schemaChanges}}
|
|
88
|
-
### Tables Affected
|
|
89
|
-
|
|
90
|
-
| Table | Change Type | Description |
|
|
91
|
-
|-------|-------------|-------------|
|
|
92
|
-
{{#each schemaChanges}}
|
|
93
|
-
| `{{this.table}}` | {{this.changeType}} | {{this.description}} |
|
|
94
|
-
{{/each}}
|
|
95
|
-
|
|
96
|
-
### SQL Migrations
|
|
97
|
-
|
|
98
|
-
```sql
|
|
99
|
-
{{#each schemaChanges}}
|
|
100
|
-
-- {{this.table}}: {{this.changeType}}
|
|
101
|
-
{{this.sql}}
|
|
102
|
-
|
|
103
|
-
{{/each}}
|
|
104
|
-
```
|
|
105
|
-
{{else}}
|
|
106
|
-
_No schema changes required._
|
|
107
|
-
{{/if}}
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## Migration Strategy
|
|
112
|
-
|
|
113
|
-
### Approach
|
|
114
|
-
{{migrationStrategy}}
|
|
115
|
-
|
|
116
|
-
{{#if migrationPhases}}
|
|
117
|
-
### Phases
|
|
118
|
-
|
|
119
|
-
{{#each migrationPhases}}
|
|
120
|
-
1. **{{this.phase}}** ({{this.duration}})
|
|
121
|
-
- {{this.description}}
|
|
122
|
-
- Validation: {{this.validation}}
|
|
123
|
-
{{/each}}
|
|
124
|
-
{{/if}}
|
|
125
|
-
|
|
126
|
-
{{#if dataMigrationScripts}}
|
|
127
|
-
### Data Migration Scripts
|
|
128
|
-
|
|
129
|
-
```sql
|
|
130
|
-
{{dataMigrationScripts}}
|
|
131
|
-
```
|
|
132
|
-
{{/if}}
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## Performance Impact
|
|
137
|
-
|
|
138
|
-
{{#if performanceMetrics}}
|
|
139
|
-
### Expected Impact
|
|
140
|
-
|
|
141
|
-
| Metric | Before | After | Acceptable? |
|
|
142
|
-
|--------|--------|-------|-------------|
|
|
143
|
-
{{#each performanceMetrics}}
|
|
144
|
-
| {{this.metric}} | {{this.before}} | {{this.after}} | {{this.acceptable}} |
|
|
145
|
-
{{/each}}
|
|
146
|
-
{{/if}}
|
|
147
|
-
|
|
148
|
-
{{#if indexes}}
|
|
149
|
-
### Indexing Strategy
|
|
150
|
-
|
|
151
|
-
{{#each indexes}}
|
|
152
|
-
- `{{this.name}}` on `{{this.table}}({{this.columns}})` - {{this.reason}}
|
|
153
|
-
{{/each}}
|
|
154
|
-
{{else}}
|
|
155
|
-
_No new indexes required._
|
|
156
|
-
{{/if}}
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
## Rollback Plan
|
|
161
|
-
|
|
162
|
-
### Rollback Strategy
|
|
163
|
-
{{rollbackPlan}}
|
|
164
|
-
|
|
165
|
-
{{#if rollbackScripts}}
|
|
166
|
-
### Rollback Scripts
|
|
167
|
-
|
|
168
|
-
```sql
|
|
169
|
-
{{rollbackScripts}}
|
|
170
|
-
```
|
|
171
|
-
{{/if}}
|
|
172
|
-
|
|
173
|
-
{{#if rollbackTriggers}}
|
|
174
|
-
### Rollback Triggers
|
|
175
|
-
|
|
176
|
-
{{#each rollbackTriggers}}
|
|
177
|
-
- **{{this.condition}}**: {{this.action}}
|
|
178
|
-
{{/each}}
|
|
179
|
-
{{/if}}
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## Testing
|
|
184
|
-
|
|
185
|
-
{{#if preMigrationTests}}
|
|
186
|
-
### Pre-Migration Testing
|
|
187
|
-
{{#each preMigrationTests}}
|
|
188
|
-
- [ ] {{this}}
|
|
189
|
-
{{/each}}
|
|
190
|
-
{{/if}}
|
|
191
|
-
|
|
192
|
-
{{#if postMigrationValidation}}
|
|
193
|
-
### Post-Migration Validation
|
|
194
|
-
{{#each postMigrationValidation}}
|
|
195
|
-
- [ ] {{this}}
|
|
196
|
-
{{/each}}
|
|
197
|
-
{{/if}}
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
## Consequences
|
|
202
|
-
|
|
203
|
-
{{#if positiveConsequences}}
|
|
204
|
-
### Positive
|
|
205
|
-
{{#each positiveConsequences}}
|
|
206
|
-
- ✅ {{this}}
|
|
207
|
-
{{/each}}
|
|
208
|
-
{{/if}}
|
|
209
|
-
|
|
210
|
-
{{#if negativeConsequences}}
|
|
211
|
-
### Negative (Trade-offs)
|
|
212
|
-
{{#each negativeConsequences}}
|
|
213
|
-
- ⚠️ {{this}}
|
|
214
|
-
{{/each}}
|
|
215
|
-
{{else}}
|
|
216
|
-
_No significant trade-offs identified._
|
|
217
|
-
{{/if}}
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
## Related Decisions
|
|
222
|
-
|
|
223
|
-
{{#if relatedDBDRs}}
|
|
224
|
-
{{#each relatedDBDRs}}
|
|
225
|
-
- [DBDR {{this.number}}](./dbdr-{{padNumber this.number 3}}.md): {{this.title}}
|
|
226
|
-
{{/each}}
|
|
227
|
-
{{else}}
|
|
228
|
-
_No related decisions._
|
|
229
|
-
{{/if}}
|
|
230
|
-
|
|
231
|
-
{{#if relatedADRs}}
|
|
232
|
-
### Related ADRs
|
|
233
|
-
{{#each relatedADRs}}
|
|
234
|
-
- [ADR {{this.number}}](../adr/adr-{{padNumber this.number 3}}.md): {{this.title}}
|
|
235
|
-
{{/each}}
|
|
236
|
-
{{/if}}
|
|
237
|
-
|
|
238
|
-
---
|
|
239
|
-
|
|
240
|
-
**Generated by:** AIOX Template Engine v2.0
|
|
241
|
-
**Template Version:** dbdr-1.0
|
|
1
|
+
---
|
|
2
|
+
template_id: dbdr
|
|
3
|
+
template_name: Database Decision Record
|
|
4
|
+
version: 1.0
|
|
5
|
+
variables:
|
|
6
|
+
- name: number
|
|
7
|
+
type: number
|
|
8
|
+
required: true
|
|
9
|
+
auto: next_dbdr_number
|
|
10
|
+
- name: title
|
|
11
|
+
type: string
|
|
12
|
+
required: true
|
|
13
|
+
prompt: "Title of the database decision:"
|
|
14
|
+
- name: status
|
|
15
|
+
type: choice
|
|
16
|
+
required: true
|
|
17
|
+
choices: [Proposed, Approved, Implemented, Rolled Back]
|
|
18
|
+
default: Proposed
|
|
19
|
+
- name: dbType
|
|
20
|
+
type: choice
|
|
21
|
+
required: true
|
|
22
|
+
choices: [PostgreSQL, MySQL, MongoDB, SQLite, Supabase, Other]
|
|
23
|
+
prompt: "Which database?"
|
|
24
|
+
- name: owner
|
|
25
|
+
type: string
|
|
26
|
+
required: true
|
|
27
|
+
prompt: "Who is the decision owner?"
|
|
28
|
+
- name: context
|
|
29
|
+
type: text
|
|
30
|
+
required: true
|
|
31
|
+
prompt: "What is the context and data problem?"
|
|
32
|
+
- name: decision
|
|
33
|
+
type: text
|
|
34
|
+
required: true
|
|
35
|
+
prompt: "What is the decision being made?"
|
|
36
|
+
- name: migrationStrategy
|
|
37
|
+
type: text
|
|
38
|
+
required: true
|
|
39
|
+
prompt: "What is the migration strategy?"
|
|
40
|
+
- name: rollbackPlan
|
|
41
|
+
type: text
|
|
42
|
+
required: true
|
|
43
|
+
prompt: "What is the rollback plan?"
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
# DBDR {{padNumber number 3}}: {{title}}
|
|
47
|
+
|
|
48
|
+
**Status:** {{status}}
|
|
49
|
+
**Date:** {{formatDate now "YYYY-MM-DD"}}
|
|
50
|
+
**Owner:** {{owner}}
|
|
51
|
+
**Database:** {{dbType}}
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Context
|
|
56
|
+
|
|
57
|
+
{{#if currentState}}
|
|
58
|
+
### Current State
|
|
59
|
+
{{currentState}}
|
|
60
|
+
{{/if}}
|
|
61
|
+
|
|
62
|
+
### Problem Statement
|
|
63
|
+
{{context}}
|
|
64
|
+
|
|
65
|
+
{{#if dataVolume}}
|
|
66
|
+
### Data Volume Considerations
|
|
67
|
+
- **Current Size:** {{dataVolume.current}}
|
|
68
|
+
- **Projected Growth:** {{dataVolume.projected}}
|
|
69
|
+
- **Retention Policy:** {{dataVolume.retention}}
|
|
70
|
+
{{/if}}
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Decision
|
|
75
|
+
|
|
76
|
+
{{decision}}
|
|
77
|
+
|
|
78
|
+
{{#if rationale}}
|
|
79
|
+
### Rationale
|
|
80
|
+
{{rationale}}
|
|
81
|
+
{{/if}}
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Schema Changes
|
|
86
|
+
|
|
87
|
+
{{#if schemaChanges}}
|
|
88
|
+
### Tables Affected
|
|
89
|
+
|
|
90
|
+
| Table | Change Type | Description |
|
|
91
|
+
|-------|-------------|-------------|
|
|
92
|
+
{{#each schemaChanges}}
|
|
93
|
+
| `{{this.table}}` | {{this.changeType}} | {{this.description}} |
|
|
94
|
+
{{/each}}
|
|
95
|
+
|
|
96
|
+
### SQL Migrations
|
|
97
|
+
|
|
98
|
+
```sql
|
|
99
|
+
{{#each schemaChanges}}
|
|
100
|
+
-- {{this.table}}: {{this.changeType}}
|
|
101
|
+
{{this.sql}}
|
|
102
|
+
|
|
103
|
+
{{/each}}
|
|
104
|
+
```
|
|
105
|
+
{{else}}
|
|
106
|
+
_No schema changes required._
|
|
107
|
+
{{/if}}
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Migration Strategy
|
|
112
|
+
|
|
113
|
+
### Approach
|
|
114
|
+
{{migrationStrategy}}
|
|
115
|
+
|
|
116
|
+
{{#if migrationPhases}}
|
|
117
|
+
### Phases
|
|
118
|
+
|
|
119
|
+
{{#each migrationPhases}}
|
|
120
|
+
1. **{{this.phase}}** ({{this.duration}})
|
|
121
|
+
- {{this.description}}
|
|
122
|
+
- Validation: {{this.validation}}
|
|
123
|
+
{{/each}}
|
|
124
|
+
{{/if}}
|
|
125
|
+
|
|
126
|
+
{{#if dataMigrationScripts}}
|
|
127
|
+
### Data Migration Scripts
|
|
128
|
+
|
|
129
|
+
```sql
|
|
130
|
+
{{dataMigrationScripts}}
|
|
131
|
+
```
|
|
132
|
+
{{/if}}
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Performance Impact
|
|
137
|
+
|
|
138
|
+
{{#if performanceMetrics}}
|
|
139
|
+
### Expected Impact
|
|
140
|
+
|
|
141
|
+
| Metric | Before | After | Acceptable? |
|
|
142
|
+
|--------|--------|-------|-------------|
|
|
143
|
+
{{#each performanceMetrics}}
|
|
144
|
+
| {{this.metric}} | {{this.before}} | {{this.after}} | {{this.acceptable}} |
|
|
145
|
+
{{/each}}
|
|
146
|
+
{{/if}}
|
|
147
|
+
|
|
148
|
+
{{#if indexes}}
|
|
149
|
+
### Indexing Strategy
|
|
150
|
+
|
|
151
|
+
{{#each indexes}}
|
|
152
|
+
- `{{this.name}}` on `{{this.table}}({{this.columns}})` - {{this.reason}}
|
|
153
|
+
{{/each}}
|
|
154
|
+
{{else}}
|
|
155
|
+
_No new indexes required._
|
|
156
|
+
{{/if}}
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Rollback Plan
|
|
161
|
+
|
|
162
|
+
### Rollback Strategy
|
|
163
|
+
{{rollbackPlan}}
|
|
164
|
+
|
|
165
|
+
{{#if rollbackScripts}}
|
|
166
|
+
### Rollback Scripts
|
|
167
|
+
|
|
168
|
+
```sql
|
|
169
|
+
{{rollbackScripts}}
|
|
170
|
+
```
|
|
171
|
+
{{/if}}
|
|
172
|
+
|
|
173
|
+
{{#if rollbackTriggers}}
|
|
174
|
+
### Rollback Triggers
|
|
175
|
+
|
|
176
|
+
{{#each rollbackTriggers}}
|
|
177
|
+
- **{{this.condition}}**: {{this.action}}
|
|
178
|
+
{{/each}}
|
|
179
|
+
{{/if}}
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Testing
|
|
184
|
+
|
|
185
|
+
{{#if preMigrationTests}}
|
|
186
|
+
### Pre-Migration Testing
|
|
187
|
+
{{#each preMigrationTests}}
|
|
188
|
+
- [ ] {{this}}
|
|
189
|
+
{{/each}}
|
|
190
|
+
{{/if}}
|
|
191
|
+
|
|
192
|
+
{{#if postMigrationValidation}}
|
|
193
|
+
### Post-Migration Validation
|
|
194
|
+
{{#each postMigrationValidation}}
|
|
195
|
+
- [ ] {{this}}
|
|
196
|
+
{{/each}}
|
|
197
|
+
{{/if}}
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Consequences
|
|
202
|
+
|
|
203
|
+
{{#if positiveConsequences}}
|
|
204
|
+
### Positive
|
|
205
|
+
{{#each positiveConsequences}}
|
|
206
|
+
- ✅ {{this}}
|
|
207
|
+
{{/each}}
|
|
208
|
+
{{/if}}
|
|
209
|
+
|
|
210
|
+
{{#if negativeConsequences}}
|
|
211
|
+
### Negative (Trade-offs)
|
|
212
|
+
{{#each negativeConsequences}}
|
|
213
|
+
- ⚠️ {{this}}
|
|
214
|
+
{{/each}}
|
|
215
|
+
{{else}}
|
|
216
|
+
_No significant trade-offs identified._
|
|
217
|
+
{{/if}}
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Related Decisions
|
|
222
|
+
|
|
223
|
+
{{#if relatedDBDRs}}
|
|
224
|
+
{{#each relatedDBDRs}}
|
|
225
|
+
- [DBDR {{this.number}}](./dbdr-{{padNumber this.number 3}}.md): {{this.title}}
|
|
226
|
+
{{/each}}
|
|
227
|
+
{{else}}
|
|
228
|
+
_No related decisions._
|
|
229
|
+
{{/if}}
|
|
230
|
+
|
|
231
|
+
{{#if relatedADRs}}
|
|
232
|
+
### Related ADRs
|
|
233
|
+
{{#each relatedADRs}}
|
|
234
|
+
- [ADR {{this.number}}](../adr/adr-{{padNumber this.number 3}}.md): {{this.title}}
|
|
235
|
+
{{/each}}
|
|
236
|
+
{{/if}}
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
**Generated by:** AIOX Template Engine v2.0
|
|
241
|
+
**Template Version:** dbdr-1.0
|
|
@@ -140,9 +140,8 @@ class VariableElicitation {
|
|
|
140
140
|
* @returns {Promise<number>} Next available number
|
|
141
141
|
*/
|
|
142
142
|
async getNextNumber(docType) {
|
|
143
|
-
const fs = require('fs').promises;
|
|
144
143
|
const path = require('path');
|
|
145
|
-
const
|
|
144
|
+
const fg = require('fast-glob');
|
|
146
145
|
|
|
147
146
|
const patterns = {
|
|
148
147
|
adr: 'docs/architecture/decisions/adr-*.md',
|
|
@@ -156,7 +155,7 @@ class VariableElicitation {
|
|
|
156
155
|
const pattern = patterns[docType] || `**/${docType}-*.md`;
|
|
157
156
|
|
|
158
157
|
try {
|
|
159
|
-
const files =
|
|
158
|
+
const files = fg.sync(pattern, { cwd: process.cwd() });
|
|
160
159
|
const numbers = files.map(f => {
|
|
161
160
|
const match = path.basename(f).match(new RegExp(`${docType}-(\\d+)`));
|
|
162
161
|
return match ? parseInt(match[1], 10) : 0;
|