aios-core 2.2.2 → 3.0.0
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/.aios-core/.session/current-session.json +14 -14
- package/.aios-core/cli/commands/migrate/validate.js +1 -1
- package/.aios-core/core/docs/session-update-pattern.md +17 -10
- package/.aios-core/core/elicitation/elicitation-engine.js +11 -6
- package/.aios-core/core/elicitation/session-manager.js +2 -1
- package/.aios-core/core/registry/registry-schema.json +166 -166
- package/.aios-core/core/registry/service-registry.json +6585 -6585
- package/.aios-core/core-config.yaml +66 -1
- package/.aios-core/data/agent-config-requirements.yaml +5 -5
- package/.aios-core/development/agents/devops.md +12 -0
- package/.aios-core/development/scripts/squad/README.md +112 -0
- package/.aios-core/development/scripts/squad/index.js +41 -0
- package/.aios-core/development/scripts/squad/squad-loader.js +359 -0
- package/.aios-core/development/scripts/squad/squad-validator.js +685 -0
- package/.aios-core/development/tasks/add-mcp.md +11 -5
- package/.aios-core/development/tasks/github-devops-github-pr-automation.md +240 -3
- package/.aios-core/development/tasks/search-mcp.md +309 -0
- package/.aios-core/development/tasks/setup-mcp-docker.md +11 -8
- package/.aios-core/development/tasks/squad-creator-validate.md +151 -0
- package/.aios-core/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +3 -3
- package/.aios-core/index.d.ts +7 -7
- package/.aios-core/index.js +1 -1
- package/.aios-core/infrastructure/scripts/batch-creator.js +1 -1
- package/.aios-core/infrastructure/scripts/component-generator.js +1 -1
- package/.aios-core/infrastructure/templates/coderabbit.yaml.template +279 -279
- package/.aios-core/infrastructure/templates/core-config/core-config-greenfield.tmpl.yaml +41 -0
- package/.aios-core/infrastructure/templates/github-workflows/ci.yml.template +169 -169
- package/.aios-core/infrastructure/templates/github-workflows/pr-automation.yml.template +330 -330
- package/.aios-core/infrastructure/templates/github-workflows/release.yml.template +196 -196
- package/.aios-core/infrastructure/templates/gitignore/gitignore-aios-base.tmpl +63 -63
- package/.aios-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -18
- package/.aios-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -85
- package/.aios-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -145
- package/.aios-core/infrastructure/tests/utilities-audit-results.json +500 -500
- package/.aios-core/infrastructure/tools/README.md +1 -1
- package/.aios-core/install-manifest.yaml +4 -1
- package/.aios-core/manifests/schema/manifest-schema.json +190 -190
- package/.aios-core/manifests/workers.csv +203 -203
- package/.aios-core/package.json +102 -102
- package/.aios-core/product/templates/activation-instructions-template.md +7 -7
- package/.aios-core/product/templates/adr.hbs +125 -125
- package/.aios-core/product/templates/component-react-tmpl.tsx +98 -98
- package/.aios-core/product/templates/dbdr.hbs +241 -241
- package/.aios-core/product/templates/engine/schemas/adr.schema.json +102 -102
- package/.aios-core/product/templates/engine/schemas/dbdr.schema.json +205 -205
- package/.aios-core/product/templates/engine/schemas/epic.schema.json +175 -175
- package/.aios-core/product/templates/engine/schemas/pmdr.schema.json +175 -175
- package/.aios-core/product/templates/engine/schemas/prd-v2.schema.json +300 -300
- package/.aios-core/product/templates/engine/schemas/prd.schema.json +152 -152
- package/.aios-core/product/templates/engine/schemas/story.schema.json +222 -222
- package/.aios-core/product/templates/engine/schemas/task.schema.json +154 -154
- package/.aios-core/product/templates/epic.hbs +212 -212
- package/.aios-core/product/templates/eslintrc-security.json +32 -32
- package/.aios-core/product/templates/github-actions-cd.yml +212 -212
- package/.aios-core/product/templates/github-actions-ci.yml +172 -172
- package/.aios-core/product/templates/pmdr.hbs +186 -186
- package/.aios-core/product/templates/prd-v2.0.hbs +216 -216
- package/.aios-core/product/templates/prd.hbs +201 -201
- package/.aios-core/product/templates/shock-report-tmpl.html +502 -502
- package/.aios-core/product/templates/story.hbs +263 -263
- package/.aios-core/product/templates/task.hbs +170 -170
- package/.aios-core/product/templates/tmpl-comment-on-examples.sql +158 -158
- package/.aios-core/product/templates/tmpl-migration-script.sql +91 -91
- package/.aios-core/product/templates/tmpl-rls-granular-policies.sql +104 -104
- package/.aios-core/product/templates/tmpl-rls-kiss-policy.sql +10 -10
- package/.aios-core/product/templates/tmpl-rls-roles.sql +135 -135
- package/.aios-core/product/templates/tmpl-rls-simple.sql +77 -77
- package/.aios-core/product/templates/tmpl-rls-tenant.sql +152 -152
- package/.aios-core/product/templates/tmpl-rollback-script.sql +77 -77
- package/.aios-core/product/templates/tmpl-seed-data.sql +140 -140
- package/.aios-core/product/templates/tmpl-smoke-test.sql +16 -16
- package/.aios-core/product/templates/tmpl-staging-copy-merge.sql +139 -139
- package/.aios-core/product/templates/tmpl-stored-proc.sql +140 -140
- package/.aios-core/product/templates/tmpl-trigger.sql +152 -152
- package/.aios-core/product/templates/tmpl-view-materialized.sql +133 -133
- package/.aios-core/product/templates/tmpl-view.sql +177 -177
- package/.aios-core/product/templates/token-exports-css-tmpl.css +240 -240
- package/.aios-core/quality/schemas/quality-metrics.schema.json +233 -233
- package/.aios-core/schemas/squad-schema.json +185 -0
- package/.aios-core/scripts/README.md +90 -322
- package/.aios-core/scripts/migrate-framework-docs.sh +300 -300
- package/.claude/rules/mcp-usage.md +116 -100
- package/LICENSE +48 -48
- package/README.md +3 -4
- package/bin/aios.js +2 -1
- package/package.json +1 -3
- package/packages/installer/package.json +39 -39
- package/templates/squad/LICENSE +21 -21
- package/templates/squad/README.md +37 -37
- package/templates/squad/agents/example-agent.yaml +36 -36
- package/templates/squad/package.json +19 -19
- package/templates/squad/squad.yaml +25 -25
- package/templates/squad/tasks/example-task.yaml +46 -46
- package/templates/squad/templates/example-template.md +24 -24
- package/templates/squad/tests/example-agent.test.js +53 -53
- package/templates/squad/workflows/example-workflow.yaml +54 -54
- package/tools/diagnose-npx-issue.ps1 +96 -96
- package/tools/quick-diagnose.cmd +85 -85
- package/tools/quick-diagnose.ps1 +117 -117
- package/.aios-core/core/data/agent-config-requirements.yaml +0 -368
- package/.aios-core/core/data/aios-kb.md +0 -924
- package/.aios-core/core/data/workflow-patterns.yaml +0 -267
- package/.aios-core/product/templates/1mcp-config.yaml +0 -225
- package/.aios-core/scripts/context-detector.js +0 -226
- package/.aios-core/scripts/elicitation-engine.js +0 -385
- package/.aios-core/scripts/elicitation-session-manager.js +0 -300
- package/.claude/CLAUDE.md +0 -221
|
@@ -1,98 +1,98 @@
|
|
|
1
|
-
// {{ComponentName}}.tsx
|
|
2
|
-
// Generated by Atlas (Design System Builder)
|
|
3
|
-
// Atomic level: {{atomic_level}}
|
|
4
|
-
// Utility-first Tailwind, zero hardcoded values
|
|
5
|
-
|
|
6
|
-
import * as React from 'react';
|
|
7
|
-
import { Slot } from '@radix-ui/react-slot';
|
|
8
|
-
import { cva, type VariantProps } from 'class-variance-authority';
|
|
9
|
-
import { cn } from '{{UtilityImportPath}}';
|
|
10
|
-
{{SpinnerImport}}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Variant catalogue generated from consolidated tokens.
|
|
14
|
-
* Extend with additional groups (state, density, alignment) as needed.
|
|
15
|
-
*/
|
|
16
|
-
export const {{componentName}}Variants = cva(
|
|
17
|
-
'{{baseClasses}}',
|
|
18
|
-
{
|
|
19
|
-
variants: {
|
|
20
|
-
variant: {
|
|
21
|
-
{{VariantDefinitions}}
|
|
22
|
-
},
|
|
23
|
-
size: {
|
|
24
|
-
{{SizeDefinitions}}
|
|
25
|
-
}{{AdditionalVariantGroups}}
|
|
26
|
-
},
|
|
27
|
-
compoundVariants: [
|
|
28
|
-
{{CompoundVariants}}
|
|
29
|
-
],
|
|
30
|
-
defaultVariants: {
|
|
31
|
-
variant: '{{DefaultVariant}}',
|
|
32
|
-
size: '{{DefaultSize}}'{{DefaultVariantOverrides}}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
export interface {{ComponentName}}Props
|
|
38
|
-
extends React.{{ElementAttributes}}<{{ElementTag}}>,
|
|
39
|
-
VariantProps<typeof {{componentName}}Variants> {
|
|
40
|
-
/** Render as child element instead of the default tag */
|
|
41
|
-
asChild?: boolean;
|
|
42
|
-
/** Display loading UI and disable interactions */
|
|
43
|
-
isLoading?: boolean;
|
|
44
|
-
/** Optional custom loading indicator */
|
|
45
|
-
loadingIcon?: React.ReactNode;
|
|
46
|
-
{{AdditionalProps}}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* {{ComponentDescription}}
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* ```tsx
|
|
54
|
-
* <{{ComponentName}} variant="{{DefaultVariant}}" size="{{DefaultSize}}">
|
|
55
|
-
* {{ExampleContent}}
|
|
56
|
-
* </{{ComponentName}}>
|
|
57
|
-
* ```
|
|
58
|
-
*/
|
|
59
|
-
export const {{ComponentName}} = React.forwardRef<{{ElementTag}}, {{ComponentName}}Props>(
|
|
60
|
-
(
|
|
61
|
-
{
|
|
62
|
-
asChild = false,
|
|
63
|
-
className,
|
|
64
|
-
variant = '{{DefaultVariant}}',
|
|
65
|
-
size = '{{DefaultSize}}',
|
|
66
|
-
isLoading = false,
|
|
67
|
-
loadingIcon,
|
|
68
|
-
children,
|
|
69
|
-
...props
|
|
70
|
-
},
|
|
71
|
-
ref
|
|
72
|
-
) => {
|
|
73
|
-
const Comp = asChild ? Slot : '{{HtmlElement}}';
|
|
74
|
-
|
|
75
|
-
return (
|
|
76
|
-
<Comp
|
|
77
|
-
ref={ref}
|
|
78
|
-
className={cn(
|
|
79
|
-
{{componentName}}Variants({ variant, size }),
|
|
80
|
-
isLoading && 'pointer-events-none opacity-70',
|
|
81
|
-
className
|
|
82
|
-
)}
|
|
83
|
-
data-state={isLoading ? 'loading' : props['data-state']}
|
|
84
|
-
{...props}
|
|
85
|
-
>
|
|
86
|
-
{isLoading &&
|
|
87
|
-
(loadingIcon ?? (
|
|
88
|
-
<{{SpinnerComponent}} className="mr-2 h-4 w-4 animate-spin" aria-hidden="true" />
|
|
89
|
-
))}
|
|
90
|
-
<span className="inline-flex items-center gap-1">{{ChildWrapper}}</span>
|
|
91
|
-
</Comp>
|
|
92
|
-
);
|
|
93
|
-
}
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
{{ComponentName}}.displayName = '{{ComponentName}}';
|
|
97
|
-
|
|
98
|
-
export type {{ComponentName}}Variant = VariantProps<typeof {{componentName}}Variants>;
|
|
1
|
+
// {{ComponentName}}.tsx
|
|
2
|
+
// Generated by Atlas (Design System Builder)
|
|
3
|
+
// Atomic level: {{atomic_level}}
|
|
4
|
+
// Utility-first Tailwind, zero hardcoded values
|
|
5
|
+
|
|
6
|
+
import * as React from 'react';
|
|
7
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
8
|
+
import { cva, type VariantProps } from 'class-variance-authority';
|
|
9
|
+
import { cn } from '{{UtilityImportPath}}';
|
|
10
|
+
{{SpinnerImport}}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Variant catalogue generated from consolidated tokens.
|
|
14
|
+
* Extend with additional groups (state, density, alignment) as needed.
|
|
15
|
+
*/
|
|
16
|
+
export const {{componentName}}Variants = cva(
|
|
17
|
+
'{{baseClasses}}',
|
|
18
|
+
{
|
|
19
|
+
variants: {
|
|
20
|
+
variant: {
|
|
21
|
+
{{VariantDefinitions}}
|
|
22
|
+
},
|
|
23
|
+
size: {
|
|
24
|
+
{{SizeDefinitions}}
|
|
25
|
+
}{{AdditionalVariantGroups}}
|
|
26
|
+
},
|
|
27
|
+
compoundVariants: [
|
|
28
|
+
{{CompoundVariants}}
|
|
29
|
+
],
|
|
30
|
+
defaultVariants: {
|
|
31
|
+
variant: '{{DefaultVariant}}',
|
|
32
|
+
size: '{{DefaultSize}}'{{DefaultVariantOverrides}}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
export interface {{ComponentName}}Props
|
|
38
|
+
extends React.{{ElementAttributes}}<{{ElementTag}}>,
|
|
39
|
+
VariantProps<typeof {{componentName}}Variants> {
|
|
40
|
+
/** Render as child element instead of the default tag */
|
|
41
|
+
asChild?: boolean;
|
|
42
|
+
/** Display loading UI and disable interactions */
|
|
43
|
+
isLoading?: boolean;
|
|
44
|
+
/** Optional custom loading indicator */
|
|
45
|
+
loadingIcon?: React.ReactNode;
|
|
46
|
+
{{AdditionalProps}}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* {{ComponentDescription}}
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```tsx
|
|
54
|
+
* <{{ComponentName}} variant="{{DefaultVariant}}" size="{{DefaultSize}}">
|
|
55
|
+
* {{ExampleContent}}
|
|
56
|
+
* </{{ComponentName}}>
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export const {{ComponentName}} = React.forwardRef<{{ElementTag}}, {{ComponentName}}Props>(
|
|
60
|
+
(
|
|
61
|
+
{
|
|
62
|
+
asChild = false,
|
|
63
|
+
className,
|
|
64
|
+
variant = '{{DefaultVariant}}',
|
|
65
|
+
size = '{{DefaultSize}}',
|
|
66
|
+
isLoading = false,
|
|
67
|
+
loadingIcon,
|
|
68
|
+
children,
|
|
69
|
+
...props
|
|
70
|
+
},
|
|
71
|
+
ref
|
|
72
|
+
) => {
|
|
73
|
+
const Comp = asChild ? Slot : '{{HtmlElement}}';
|
|
74
|
+
|
|
75
|
+
return (
|
|
76
|
+
<Comp
|
|
77
|
+
ref={ref}
|
|
78
|
+
className={cn(
|
|
79
|
+
{{componentName}}Variants({ variant, size }),
|
|
80
|
+
isLoading && 'pointer-events-none opacity-70',
|
|
81
|
+
className
|
|
82
|
+
)}
|
|
83
|
+
data-state={isLoading ? 'loading' : props['data-state']}
|
|
84
|
+
{...props}
|
|
85
|
+
>
|
|
86
|
+
{isLoading &&
|
|
87
|
+
(loadingIcon ?? (
|
|
88
|
+
<{{SpinnerComponent}} className="mr-2 h-4 w-4 animate-spin" aria-hidden="true" />
|
|
89
|
+
))}
|
|
90
|
+
<span className="inline-flex items-center gap-1">{{ChildWrapper}}</span>
|
|
91
|
+
</Comp>
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
{{ComponentName}}.displayName = '{{ComponentName}}';
|
|
97
|
+
|
|
98
|
+
export type {{ComponentName}}Variant = VariantProps<typeof {{componentName}}Variants>;
|
|
@@ -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:** AIOS 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:** AIOS Template Engine v2.0
|
|
241
|
+
**Template Version:** dbdr-1.0
|