musubi-sdd 5.1.0 → 5.6.1
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/README.ja.md +106 -48
- package/README.md +110 -32
- package/bin/musubi-analyze.js +74 -67
- package/bin/musubi-browser.js +27 -26
- package/bin/musubi-change.js +48 -47
- package/bin/musubi-checkpoint.js +10 -7
- package/bin/musubi-convert.js +25 -25
- package/bin/musubi-costs.js +27 -10
- package/bin/musubi-gui.js +52 -46
- package/bin/musubi-init.js +1952 -10
- package/bin/musubi-orchestrate.js +327 -239
- package/bin/musubi-remember.js +69 -56
- package/bin/musubi-resolve.js +53 -45
- package/bin/musubi-trace.js +51 -22
- package/bin/musubi-validate.js +39 -30
- package/bin/musubi-workflow.js +33 -34
- package/bin/musubi.js +39 -2
- package/package.json +1 -1
- package/src/agents/agent-loop.js +94 -95
- package/src/agents/agentic/code-generator.js +119 -109
- package/src/agents/agentic/code-reviewer.js +105 -108
- package/src/agents/agentic/index.js +4 -4
- package/src/agents/browser/action-executor.js +13 -13
- package/src/agents/browser/ai-comparator.js +11 -10
- package/src/agents/browser/context-manager.js +6 -6
- package/src/agents/browser/index.js +5 -5
- package/src/agents/browser/nl-parser.js +31 -46
- package/src/agents/browser/screenshot.js +2 -2
- package/src/agents/browser/test-generator.js +6 -4
- package/src/agents/function-tool.js +71 -65
- package/src/agents/index.js +7 -7
- package/src/agents/schema-generator.js +98 -94
- package/src/analyzers/ast-extractor.js +158 -146
- package/src/analyzers/codegraph-auto-update.js +858 -0
- package/src/analyzers/complexity-analyzer.js +536 -0
- package/src/analyzers/context-optimizer.js +241 -126
- package/src/analyzers/impact-analyzer.js +1 -1
- package/src/analyzers/large-project-analyzer.js +766 -0
- package/src/analyzers/repository-map.js +77 -81
- package/src/analyzers/security-analyzer.js +19 -11
- package/src/analyzers/stuck-detector.js +19 -17
- package/src/converters/index.js +78 -57
- package/src/converters/ir/types.js +12 -12
- package/src/converters/parsers/musubi-parser.js +134 -126
- package/src/converters/parsers/openapi-parser.js +70 -53
- package/src/converters/parsers/speckit-parser.js +239 -175
- package/src/converters/writers/musubi-writer.js +123 -118
- package/src/converters/writers/speckit-writer.js +124 -113
- package/src/generators/rust-migration-generator.js +512 -0
- package/src/gui/public/index.html +1365 -1211
- package/src/gui/server.js +41 -40
- package/src/gui/services/file-watcher.js +23 -8
- package/src/gui/services/project-scanner.js +26 -20
- package/src/gui/services/replanning-service.js +27 -23
- package/src/gui/services/traceability-service.js +8 -8
- package/src/gui/services/workflow-service.js +14 -7
- package/src/index.js +151 -0
- package/src/integrations/cicd.js +90 -104
- package/src/integrations/codegraph-mcp.js +643 -0
- package/src/integrations/documentation.js +142 -103
- package/src/integrations/examples.js +95 -80
- package/src/integrations/github-client.js +17 -17
- package/src/integrations/index.js +5 -5
- package/src/integrations/mcp/index.js +21 -21
- package/src/integrations/mcp/mcp-context-provider.js +76 -78
- package/src/integrations/mcp/mcp-discovery.js +74 -72
- package/src/integrations/mcp/mcp-tool-registry.js +99 -94
- package/src/integrations/mcp-connector.js +70 -66
- package/src/integrations/platforms.js +50 -49
- package/src/integrations/tool-discovery.js +37 -31
- package/src/llm-providers/anthropic-provider.js +11 -11
- package/src/llm-providers/base-provider.js +16 -18
- package/src/llm-providers/copilot-provider.js +22 -19
- package/src/llm-providers/index.js +26 -25
- package/src/llm-providers/ollama-provider.js +11 -11
- package/src/llm-providers/openai-provider.js +12 -12
- package/src/managers/agent-memory.js +36 -24
- package/src/managers/checkpoint-manager.js +4 -8
- package/src/managers/delta-spec.js +19 -19
- package/src/managers/index.js +13 -4
- package/src/managers/memory-condenser.js +35 -45
- package/src/managers/repo-skill-manager.js +57 -31
- package/src/managers/skill-loader.js +25 -22
- package/src/managers/skill-tools.js +36 -72
- package/src/managers/workflow.js +30 -22
- package/src/monitoring/cost-tracker.js +48 -46
- package/src/monitoring/incident-manager.js +116 -106
- package/src/monitoring/index.js +144 -134
- package/src/monitoring/observability.js +75 -62
- package/src/monitoring/quality-dashboard.js +45 -41
- package/src/monitoring/release-manager.js +63 -53
- package/src/orchestration/agent-skill-binding.js +39 -47
- package/src/orchestration/error-handler.js +65 -107
- package/src/orchestration/guardrails/base-guardrail.js +26 -24
- package/src/orchestration/guardrails/guardrail-rules.js +50 -64
- package/src/orchestration/guardrails/index.js +5 -5
- package/src/orchestration/guardrails/input-guardrail.js +58 -45
- package/src/orchestration/guardrails/output-guardrail.js +104 -81
- package/src/orchestration/guardrails/safety-check.js +79 -79
- package/src/orchestration/index.js +38 -55
- package/src/orchestration/mcp-tool-adapters.js +96 -99
- package/src/orchestration/orchestration-engine.js +21 -21
- package/src/orchestration/pattern-registry.js +60 -45
- package/src/orchestration/patterns/auto.js +34 -47
- package/src/orchestration/patterns/group-chat.js +59 -65
- package/src/orchestration/patterns/handoff.js +67 -65
- package/src/orchestration/patterns/human-in-loop.js +51 -72
- package/src/orchestration/patterns/nested.js +25 -40
- package/src/orchestration/patterns/sequential.js +35 -34
- package/src/orchestration/patterns/swarm.js +63 -56
- package/src/orchestration/patterns/triage.js +150 -109
- package/src/orchestration/reasoning/index.js +9 -9
- package/src/orchestration/reasoning/planning-engine.js +143 -140
- package/src/orchestration/reasoning/reasoning-engine.js +206 -144
- package/src/orchestration/reasoning/self-correction.js +121 -128
- package/src/orchestration/replanning/adaptive-goal-modifier.js +107 -112
- package/src/orchestration/replanning/alternative-generator.js +37 -42
- package/src/orchestration/replanning/config.js +63 -59
- package/src/orchestration/replanning/goal-progress-tracker.js +98 -100
- package/src/orchestration/replanning/index.js +24 -20
- package/src/orchestration/replanning/plan-evaluator.js +49 -50
- package/src/orchestration/replanning/plan-monitor.js +32 -28
- package/src/orchestration/replanning/proactive-path-optimizer.js +175 -178
- package/src/orchestration/replanning/replan-history.js +33 -26
- package/src/orchestration/replanning/replanning-engine.js +106 -108
- package/src/orchestration/skill-executor.js +107 -109
- package/src/orchestration/skill-registry.js +85 -89
- package/src/orchestration/workflow-examples.js +228 -231
- package/src/orchestration/workflow-executor.js +65 -68
- package/src/orchestration/workflow-orchestrator.js +72 -73
- package/src/phase4-integration.js +47 -40
- package/src/phase5-integration.js +89 -30
- package/src/reporters/coverage-report.js +82 -30
- package/src/reporters/hierarchical-reporter.js +498 -0
- package/src/reporters/traceability-matrix-report.js +29 -20
- package/src/resolvers/issue-resolver.js +43 -31
- package/src/steering/advanced-validation.js +133 -124
- package/src/steering/auto-updater.js +60 -73
- package/src/steering/index.js +6 -6
- package/src/steering/quality-metrics.js +41 -35
- package/src/steering/steering-auto-update.js +83 -86
- package/src/steering/steering-validator.js +98 -106
- package/src/steering/template-constraints.js +53 -54
- package/src/templates/agents/claude-code/CLAUDE.md +32 -32
- package/src/templates/agents/claude-code/skills/agent-assistant/SKILL.md +13 -5
- package/src/templates/agents/claude-code/skills/ai-ml-engineer/mlops-guide.md +23 -23
- package/src/templates/agents/claude-code/skills/ai-ml-engineer/model-card-template.md +60 -41
- package/src/templates/agents/claude-code/skills/api-designer/api-patterns.md +27 -19
- package/src/templates/agents/claude-code/skills/api-designer/openapi-template.md +11 -7
- package/src/templates/agents/claude-code/skills/bug-hunter/SKILL.md +4 -3
- package/src/templates/agents/claude-code/skills/bug-hunter/root-cause-analysis.md +37 -15
- package/src/templates/agents/claude-code/skills/change-impact-analyzer/dependency-graph-patterns.md +36 -42
- package/src/templates/agents/claude-code/skills/change-impact-analyzer/impact-analysis-template.md +69 -60
- package/src/templates/agents/claude-code/skills/cloud-architect/aws-patterns.md +31 -38
- package/src/templates/agents/claude-code/skills/cloud-architect/azure-patterns.md +28 -23
- package/src/templates/agents/claude-code/skills/code-reviewer/SKILL.md +61 -0
- package/src/templates/agents/claude-code/skills/code-reviewer/best-practices.md +27 -0
- package/src/templates/agents/claude-code/skills/code-reviewer/review-checklist.md +29 -10
- package/src/templates/agents/claude-code/skills/code-reviewer/review-standards.md +29 -24
- package/src/templates/agents/claude-code/skills/constitution-enforcer/SKILL.md +8 -6
- package/src/templates/agents/claude-code/skills/constitution-enforcer/constitutional-articles.md +62 -26
- package/src/templates/agents/claude-code/skills/constitution-enforcer/phase-minus-one-gates.md +35 -16
- package/src/templates/agents/claude-code/skills/database-administrator/backup-recovery.md +27 -17
- package/src/templates/agents/claude-code/skills/database-administrator/tuning-guide.md +25 -20
- package/src/templates/agents/claude-code/skills/database-schema-designer/schema-patterns.md +39 -22
- package/src/templates/agents/claude-code/skills/devops-engineer/ci-cd-templates.md +25 -22
- package/src/templates/agents/claude-code/skills/issue-resolver/SKILL.md +24 -21
- package/src/templates/agents/claude-code/skills/orchestrator/SKILL.md +148 -63
- package/src/templates/agents/claude-code/skills/orchestrator/patterns.md +35 -16
- package/src/templates/agents/claude-code/skills/orchestrator/selection-matrix.md +69 -64
- package/src/templates/agents/claude-code/skills/performance-engineer/optimization-playbook.md +47 -47
- package/src/templates/agents/claude-code/skills/performance-optimizer/SKILL.md +69 -0
- package/src/templates/agents/claude-code/skills/performance-optimizer/benchmark-template.md +63 -45
- package/src/templates/agents/claude-code/skills/performance-optimizer/optimization-patterns.md +33 -35
- package/src/templates/agents/claude-code/skills/project-manager/SKILL.md +7 -6
- package/src/templates/agents/claude-code/skills/project-manager/agile-ceremonies.md +47 -28
- package/src/templates/agents/claude-code/skills/project-manager/project-templates.md +94 -78
- package/src/templates/agents/claude-code/skills/quality-assurance/SKILL.md +20 -17
- package/src/templates/agents/claude-code/skills/quality-assurance/qa-plan-template.md +63 -49
- package/src/templates/agents/claude-code/skills/release-coordinator/SKILL.md +5 -5
- package/src/templates/agents/claude-code/skills/release-coordinator/feature-flag-guide.md +30 -26
- package/src/templates/agents/claude-code/skills/release-coordinator/release-plan-template.md +67 -35
- package/src/templates/agents/claude-code/skills/requirements-analyst/ears-format.md +54 -42
- package/src/templates/agents/claude-code/skills/requirements-analyst/validation-rules.md +36 -33
- package/src/templates/agents/claude-code/skills/security-auditor/SKILL.md +77 -19
- package/src/templates/agents/claude-code/skills/security-auditor/audit-checklists.md +24 -24
- package/src/templates/agents/claude-code/skills/security-auditor/owasp-top-10.md +61 -20
- package/src/templates/agents/claude-code/skills/security-auditor/vulnerability-patterns.md +43 -11
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/incident-response-template.md +55 -25
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/observability-patterns.md +78 -68
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/slo-sli-guide.md +73 -53
- package/src/templates/agents/claude-code/skills/software-developer/solid-principles.md +83 -37
- package/src/templates/agents/claude-code/skills/software-developer/test-first-workflow.md +38 -31
- package/src/templates/agents/claude-code/skills/steering/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/steering/auto-update-rules.md +31 -0
- package/src/templates/agents/claude-code/skills/system-architect/adr-template.md +25 -7
- package/src/templates/agents/claude-code/skills/system-architect/c4-model-guide.md +74 -61
- package/src/templates/agents/claude-code/skills/technical-writer/doc-templates/documentation-templates.md +70 -52
- package/src/templates/agents/claude-code/skills/test-engineer/SKILL.md +2 -0
- package/src/templates/agents/claude-code/skills/test-engineer/ears-test-mapping.md +75 -71
- package/src/templates/agents/claude-code/skills/test-engineer/test-types.md +85 -63
- package/src/templates/agents/claude-code/skills/traceability-auditor/coverage-matrix-template.md +39 -36
- package/src/templates/agents/claude-code/skills/traceability-auditor/gap-detection-rules.md +22 -17
- package/src/templates/agents/claude-code/skills/ui-ux-designer/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/ui-ux-designer/accessibility-guidelines.md +49 -75
- package/src/templates/agents/claude-code/skills/ui-ux-designer/design-system-components.md +71 -59
- package/src/templates/agents/codex/AGENTS.md +74 -42
- package/src/templates/agents/cursor/AGENTS.md +74 -42
- package/src/templates/agents/gemini-cli/GEMINI.md +74 -42
- package/src/templates/agents/github-copilot/AGENTS.md +83 -51
- package/src/templates/agents/qwen-code/QWEN.md +74 -42
- package/src/templates/agents/windsurf/AGENTS.md +74 -42
- package/src/templates/architectures/README.md +41 -0
- package/src/templates/architectures/clean-architecture/README.md +113 -0
- package/src/templates/architectures/event-driven/README.md +162 -0
- package/src/templates/architectures/hexagonal/README.md +130 -0
- package/src/templates/index.js +6 -1
- package/src/templates/locale-manager.js +16 -16
- package/src/templates/shared/delta-spec-template.md +20 -13
- package/src/templates/shared/github-actions/musubi-issue-resolver.yml +5 -5
- package/src/templates/shared/github-actions/musubi-security-check.yml +3 -3
- package/src/templates/shared/github-actions/musubi-validate.yml +4 -4
- package/src/templates/shared/steering/structure.md +95 -0
- package/src/templates/skills/browser-agent.md +21 -16
- package/src/templates/skills/web-gui.md +8 -0
- package/src/templates/template-constraints.js +50 -53
- package/src/validators/advanced-validation.js +30 -36
- package/src/validators/constitutional-validator.js +77 -73
- package/src/validators/critic-system.js +49 -59
- package/src/validators/delta-format.js +59 -55
- package/src/validators/traceability-validator.js +7 -11
|
@@ -20,12 +20,12 @@ EXPLAIN SELECT * FROM orders WHERE user_id = 123;
|
|
|
20
20
|
|
|
21
21
|
### Common Query Plan Issues
|
|
22
22
|
|
|
23
|
-
| Issue
|
|
24
|
-
|
|
25
|
-
| Seq Scan
|
|
26
|
-
| Nested Loop | Slow joins
|
|
27
|
-
| Sort
|
|
28
|
-
| Hash Join
|
|
23
|
+
| Issue | Symptom | Solution |
|
|
24
|
+
| ----------- | ----------------- | -------------------- |
|
|
25
|
+
| Seq Scan | Full table scan | Add index |
|
|
26
|
+
| Nested Loop | Slow joins | Review join strategy |
|
|
27
|
+
| Sort | Excessive sorting | Add sorted index |
|
|
28
|
+
| Hash Join | Large hash tables | Increase work_mem |
|
|
29
29
|
|
|
30
30
|
---
|
|
31
31
|
|
|
@@ -52,12 +52,12 @@ CREATE INDEX idx_users_lower_email ON users(LOWER(email));
|
|
|
52
52
|
|
|
53
53
|
### Index Types
|
|
54
54
|
|
|
55
|
-
| Type
|
|
56
|
-
|
|
57
|
-
| B-tree | Equality, range
|
|
58
|
-
| Hash
|
|
59
|
-
| GIN
|
|
60
|
-
| GiST
|
|
55
|
+
| Type | Use Case | PostgreSQL | MySQL |
|
|
56
|
+
| ------ | ---------------- | ------------ | ----------- |
|
|
57
|
+
| B-tree | Equality, range | Default | Default |
|
|
58
|
+
| Hash | Equality only | `USING HASH` | Memory only |
|
|
59
|
+
| GIN | Full-text, JSONB | `USING GIN` | N/A |
|
|
60
|
+
| GiST | Geometric, range | `USING GIST` | N/A |
|
|
61
61
|
|
|
62
62
|
### Avoid Over-Indexing
|
|
63
63
|
|
|
@@ -103,8 +103,8 @@ reserve_pool_size = 5
|
|
|
103
103
|
const pool = new Pool({
|
|
104
104
|
host: 'localhost',
|
|
105
105
|
database: 'mydb',
|
|
106
|
-
max: 20,
|
|
107
|
-
min: 5,
|
|
106
|
+
max: 20, // Maximum connections
|
|
107
|
+
min: 5, // Minimum connections
|
|
108
108
|
idleTimeoutMillis: 30000,
|
|
109
109
|
connectionTimeoutMillis: 2000,
|
|
110
110
|
});
|
|
@@ -173,7 +173,7 @@ long_query_time = 1
|
|
|
173
173
|
-- PostgreSQL: Enable pg_stat_statements
|
|
174
174
|
CREATE EXTENSION pg_stat_statements;
|
|
175
175
|
|
|
176
|
-
SELECT
|
|
176
|
+
SELECT
|
|
177
177
|
query,
|
|
178
178
|
calls,
|
|
179
179
|
total_exec_time / 1000 AS total_seconds,
|
|
@@ -188,7 +188,7 @@ LIMIT 10;
|
|
|
188
188
|
|
|
189
189
|
```sql
|
|
190
190
|
-- PostgreSQL: Tables with sequential scans
|
|
191
|
-
SELECT
|
|
191
|
+
SELECT
|
|
192
192
|
schemaname,
|
|
193
193
|
relname,
|
|
194
194
|
seq_scan,
|
|
@@ -205,7 +205,7 @@ LIMIT 10;
|
|
|
205
205
|
|
|
206
206
|
```sql
|
|
207
207
|
-- PostgreSQL: Unused indexes
|
|
208
|
-
SELECT
|
|
208
|
+
SELECT
|
|
209
209
|
schemaname,
|
|
210
210
|
tablename,
|
|
211
211
|
indexname,
|
|
@@ -247,7 +247,7 @@ ALTER TABLE tablename SET (
|
|
|
247
247
|
ANALYZE tablename;
|
|
248
248
|
|
|
249
249
|
-- View statistics
|
|
250
|
-
SELECT
|
|
250
|
+
SELECT
|
|
251
251
|
attname,
|
|
252
252
|
n_distinct,
|
|
253
253
|
most_common_vals,
|
|
@@ -271,16 +271,17 @@ CREATE TABLE orders (
|
|
|
271
271
|
created_at TIMESTAMP
|
|
272
272
|
) PARTITION BY RANGE (created_at);
|
|
273
273
|
|
|
274
|
-
CREATE TABLE orders_2024_01
|
|
274
|
+
CREATE TABLE orders_2024_01
|
|
275
275
|
PARTITION OF orders
|
|
276
276
|
FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');
|
|
277
277
|
|
|
278
|
-
CREATE TABLE orders_2024_02
|
|
278
|
+
CREATE TABLE orders_2024_02
|
|
279
279
|
PARTITION OF orders
|
|
280
280
|
FOR VALUES FROM ('2024-02-01') TO ('2024-03-01');
|
|
281
281
|
```
|
|
282
282
|
|
|
283
283
|
### Benefits of Partitioning
|
|
284
|
+
|
|
284
285
|
- Faster queries with partition pruning
|
|
285
286
|
- Easier data archival (drop old partitions)
|
|
286
287
|
- Smaller indexes per partition
|
|
@@ -291,23 +292,27 @@ CREATE TABLE orders_2024_02
|
|
|
291
292
|
## Performance Checklist
|
|
292
293
|
|
|
293
294
|
### Query Level
|
|
295
|
+
|
|
294
296
|
- [ ] Query plan analyzed
|
|
295
297
|
- [ ] Appropriate indexes exist
|
|
296
298
|
- [ ] No unnecessary columns selected
|
|
297
299
|
- [ ] Pagination implemented
|
|
298
300
|
|
|
299
301
|
### Configuration Level
|
|
302
|
+
|
|
300
303
|
- [ ] Buffer pool sized appropriately
|
|
301
304
|
- [ ] Connection pool configured
|
|
302
305
|
- [ ] Slow query logging enabled
|
|
303
306
|
|
|
304
307
|
### Maintenance Level
|
|
308
|
+
|
|
305
309
|
- [ ] Regular VACUUM/ANALYZE
|
|
306
310
|
- [ ] Index bloat monitored
|
|
307
311
|
- [ ] Unused indexes removed
|
|
308
312
|
- [ ] Table statistics current
|
|
309
313
|
|
|
310
314
|
### Monitoring Level
|
|
315
|
+
|
|
311
316
|
- [ ] Query performance tracked
|
|
312
317
|
- [ ] Connection count monitored
|
|
313
318
|
- [ ] Disk I/O monitored
|
|
@@ -9,6 +9,7 @@ Best practices for designing database schemas.
|
|
|
9
9
|
## Naming Conventions
|
|
10
10
|
|
|
11
11
|
### Tables
|
|
12
|
+
|
|
12
13
|
```sql
|
|
13
14
|
-- Use plural, lowercase, snake_case
|
|
14
15
|
users
|
|
@@ -21,6 +22,7 @@ user_profiles
|
|
|
21
22
|
```
|
|
22
23
|
|
|
23
24
|
### Columns
|
|
25
|
+
|
|
24
26
|
```sql
|
|
25
27
|
-- Use lowercase snake_case
|
|
26
28
|
first_name
|
|
@@ -39,6 +41,7 @@ can_edit
|
|
|
39
41
|
```
|
|
40
42
|
|
|
41
43
|
### Indexes
|
|
44
|
+
|
|
42
45
|
```sql
|
|
43
46
|
-- idx_table_column
|
|
44
47
|
CREATE INDEX idx_users_email ON users(email);
|
|
@@ -50,6 +53,7 @@ CREATE INDEX idx_orders_user_id_created_at ON orders(user_id, created_at);
|
|
|
50
53
|
## Primary Keys
|
|
51
54
|
|
|
52
55
|
### Auto-increment
|
|
56
|
+
|
|
53
57
|
```sql
|
|
54
58
|
CREATE TABLE users (
|
|
55
59
|
id BIGSERIAL PRIMARY KEY,
|
|
@@ -58,6 +62,7 @@ CREATE TABLE users (
|
|
|
58
62
|
```
|
|
59
63
|
|
|
60
64
|
### UUID
|
|
65
|
+
|
|
61
66
|
```sql
|
|
62
67
|
CREATE TABLE users (
|
|
63
68
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
@@ -66,6 +71,7 @@ CREATE TABLE users (
|
|
|
66
71
|
```
|
|
67
72
|
|
|
68
73
|
### Composite Key
|
|
74
|
+
|
|
69
75
|
```sql
|
|
70
76
|
CREATE TABLE order_items (
|
|
71
77
|
order_id BIGINT,
|
|
@@ -80,6 +86,7 @@ CREATE TABLE order_items (
|
|
|
80
86
|
## Common Patterns
|
|
81
87
|
|
|
82
88
|
### Timestamps
|
|
89
|
+
|
|
83
90
|
```sql
|
|
84
91
|
CREATE TABLE users (
|
|
85
92
|
id BIGSERIAL PRIMARY KEY,
|
|
@@ -104,6 +111,7 @@ CREATE TRIGGER users_updated_at
|
|
|
104
111
|
```
|
|
105
112
|
|
|
106
113
|
### Soft Delete
|
|
114
|
+
|
|
107
115
|
```sql
|
|
108
116
|
CREATE TABLE users (
|
|
109
117
|
id BIGSERIAL PRIMARY KEY,
|
|
@@ -117,6 +125,7 @@ CREATE INDEX idx_users_active ON users(id) WHERE deleted_at IS NULL;
|
|
|
117
125
|
```
|
|
118
126
|
|
|
119
127
|
### Audit Trail
|
|
128
|
+
|
|
120
129
|
```sql
|
|
121
130
|
CREATE TABLE audit_log (
|
|
122
131
|
id BIGSERIAL PRIMARY KEY,
|
|
@@ -135,6 +144,7 @@ CREATE TABLE audit_log (
|
|
|
135
144
|
## Relationships
|
|
136
145
|
|
|
137
146
|
### One-to-Many
|
|
147
|
+
|
|
138
148
|
```sql
|
|
139
149
|
CREATE TABLE users (
|
|
140
150
|
id BIGSERIAL PRIMARY KEY,
|
|
@@ -151,6 +161,7 @@ CREATE INDEX idx_orders_user_id ON orders(user_id);
|
|
|
151
161
|
```
|
|
152
162
|
|
|
153
163
|
### Many-to-Many
|
|
164
|
+
|
|
154
165
|
```sql
|
|
155
166
|
CREATE TABLE users (
|
|
156
167
|
id BIGSERIAL PRIMARY KEY,
|
|
@@ -171,6 +182,7 @@ CREATE TABLE user_roles (
|
|
|
171
182
|
```
|
|
172
183
|
|
|
173
184
|
### Self-Referencing
|
|
185
|
+
|
|
174
186
|
```sql
|
|
175
187
|
CREATE TABLE categories (
|
|
176
188
|
id BIGSERIAL PRIMARY KEY,
|
|
@@ -187,21 +199,21 @@ CREATE INDEX idx_categories_parent ON categories(parent_id);
|
|
|
187
199
|
|
|
188
200
|
### PostgreSQL Types
|
|
189
201
|
|
|
190
|
-
| Use Case
|
|
191
|
-
|
|
192
|
-
| Auto ID
|
|
193
|
-
| UUID
|
|
194
|
-
| Short text | VARCHAR(n)
|
|
195
|
-
| Long text
|
|
196
|
-
| Integer
|
|
197
|
-
| Decimal
|
|
198
|
-
| Money
|
|
199
|
-
| Boolean
|
|
200
|
-
| Date
|
|
201
|
-
| Timestamp
|
|
202
|
-
| JSON
|
|
203
|
-
| Array
|
|
204
|
-
| Enum
|
|
202
|
+
| Use Case | Type |
|
|
203
|
+
| ---------- | ------------------------ |
|
|
204
|
+
| Auto ID | BIGSERIAL |
|
|
205
|
+
| UUID | UUID |
|
|
206
|
+
| Short text | VARCHAR(n) |
|
|
207
|
+
| Long text | TEXT |
|
|
208
|
+
| Integer | INT, BIGINT |
|
|
209
|
+
| Decimal | NUMERIC(p,s), DECIMAL |
|
|
210
|
+
| Money | NUMERIC(10,2) |
|
|
211
|
+
| Boolean | BOOLEAN |
|
|
212
|
+
| Date | DATE |
|
|
213
|
+
| Timestamp | TIMESTAMP WITH TIME ZONE |
|
|
214
|
+
| JSON | JSONB |
|
|
215
|
+
| Array | INTEGER[], TEXT[] |
|
|
216
|
+
| Enum | Custom ENUM or VARCHAR |
|
|
205
217
|
|
|
206
218
|
### Enums vs Lookup Tables
|
|
207
219
|
|
|
@@ -235,27 +247,27 @@ CREATE TABLE orders (
|
|
|
235
247
|
```sql
|
|
236
248
|
CREATE TABLE products (
|
|
237
249
|
id BIGSERIAL PRIMARY KEY,
|
|
238
|
-
|
|
250
|
+
|
|
239
251
|
-- NOT NULL
|
|
240
252
|
name VARCHAR(100) NOT NULL,
|
|
241
|
-
|
|
253
|
+
|
|
242
254
|
-- UNIQUE
|
|
243
255
|
sku VARCHAR(50) UNIQUE,
|
|
244
|
-
|
|
256
|
+
|
|
245
257
|
-- CHECK
|
|
246
258
|
price DECIMAL(10,2) CHECK (price >= 0),
|
|
247
259
|
quantity INT CHECK (quantity >= 0),
|
|
248
|
-
|
|
260
|
+
|
|
249
261
|
-- DEFAULT
|
|
250
262
|
status VARCHAR(20) DEFAULT 'draft',
|
|
251
263
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
252
|
-
|
|
264
|
+
|
|
253
265
|
-- FOREIGN KEY
|
|
254
266
|
category_id BIGINT REFERENCES categories(id)
|
|
255
267
|
);
|
|
256
268
|
|
|
257
269
|
-- Named constraints
|
|
258
|
-
ALTER TABLE products ADD CONSTRAINT chk_price_positive
|
|
270
|
+
ALTER TABLE products ADD CONSTRAINT chk_price_positive
|
|
259
271
|
CHECK (price >= 0);
|
|
260
272
|
```
|
|
261
273
|
|
|
@@ -283,7 +295,7 @@ CREATE TABLE users (
|
|
|
283
295
|
password_hash VARCHAR(255) NOT NULL,
|
|
284
296
|
name VARCHAR(100) NOT NULL,
|
|
285
297
|
status user_status DEFAULT 'active',
|
|
286
|
-
|
|
298
|
+
|
|
287
299
|
-- Timestamps
|
|
288
300
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
289
301
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
@@ -310,26 +322,31 @@ COMMENT ON COLUMN users.status IS 'Account status: active, inactive, suspended';
|
|
|
310
322
|
## Schema Checklist
|
|
311
323
|
|
|
312
324
|
### Naming
|
|
325
|
+
|
|
313
326
|
- [ ] Consistent naming convention
|
|
314
327
|
- [ ] Descriptive names
|
|
315
328
|
- [ ] No reserved words
|
|
316
329
|
|
|
317
330
|
### Structure
|
|
331
|
+
|
|
318
332
|
- [ ] Appropriate primary keys
|
|
319
333
|
- [ ] Proper data types
|
|
320
334
|
- [ ] Necessary constraints
|
|
321
335
|
|
|
322
336
|
### Performance
|
|
337
|
+
|
|
323
338
|
- [ ] Indexes on foreign keys
|
|
324
339
|
- [ ] Indexes on filtered columns
|
|
325
340
|
- [ ] Indexes on sorted columns
|
|
326
341
|
|
|
327
342
|
### Integrity
|
|
343
|
+
|
|
328
344
|
- [ ] Foreign key relationships
|
|
329
345
|
- [ ] NOT NULL where required
|
|
330
346
|
- [ ] CHECK constraints
|
|
331
347
|
|
|
332
348
|
### Audit
|
|
349
|
+
|
|
333
350
|
- [ ] Created/updated timestamps
|
|
334
351
|
- [ ] Soft delete if needed
|
|
335
352
|
- [ ] Audit trail for sensitive data
|
|
@@ -29,19 +29,19 @@ jobs:
|
|
|
29
29
|
runs-on: ubuntu-latest
|
|
30
30
|
steps:
|
|
31
31
|
- uses: actions/checkout@v4
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
- name: Setup Node.js
|
|
34
34
|
uses: actions/setup-node@v4
|
|
35
35
|
with:
|
|
36
36
|
node-version: ${{ env.NODE_VERSION }}
|
|
37
37
|
cache: 'npm'
|
|
38
|
-
|
|
38
|
+
|
|
39
39
|
- name: Install dependencies
|
|
40
40
|
run: npm ci
|
|
41
|
-
|
|
41
|
+
|
|
42
42
|
- name: Lint
|
|
43
43
|
run: npm run lint
|
|
44
|
-
|
|
44
|
+
|
|
45
45
|
- name: Type check
|
|
46
46
|
run: npm run typecheck
|
|
47
47
|
|
|
@@ -61,21 +61,21 @@ jobs:
|
|
|
61
61
|
- 5432:5432
|
|
62
62
|
steps:
|
|
63
63
|
- uses: actions/checkout@v4
|
|
64
|
-
|
|
64
|
+
|
|
65
65
|
- name: Setup Node.js
|
|
66
66
|
uses: actions/setup-node@v4
|
|
67
67
|
with:
|
|
68
68
|
node-version: ${{ env.NODE_VERSION }}
|
|
69
69
|
cache: 'npm'
|
|
70
|
-
|
|
70
|
+
|
|
71
71
|
- name: Install dependencies
|
|
72
72
|
run: npm ci
|
|
73
|
-
|
|
73
|
+
|
|
74
74
|
- name: Run tests
|
|
75
75
|
run: npm test -- --coverage
|
|
76
76
|
env:
|
|
77
77
|
DATABASE_URL: postgres://postgres:postgres@localhost:5432/test
|
|
78
|
-
|
|
78
|
+
|
|
79
79
|
- name: Upload coverage
|
|
80
80
|
uses: codecov/codecov-action@v3
|
|
81
81
|
|
|
@@ -83,10 +83,10 @@ jobs:
|
|
|
83
83
|
runs-on: ubuntu-latest
|
|
84
84
|
steps:
|
|
85
85
|
- uses: actions/checkout@v4
|
|
86
|
-
|
|
86
|
+
|
|
87
87
|
- name: Run security audit
|
|
88
88
|
run: npm audit --audit-level=high
|
|
89
|
-
|
|
89
|
+
|
|
90
90
|
- name: Run Trivy vulnerability scanner
|
|
91
91
|
uses: aquasecurity/trivy-action@master
|
|
92
92
|
with:
|
|
@@ -104,17 +104,17 @@ jobs:
|
|
|
104
104
|
image-tag: ${{ steps.meta.outputs.tags }}
|
|
105
105
|
steps:
|
|
106
106
|
- uses: actions/checkout@v4
|
|
107
|
-
|
|
107
|
+
|
|
108
108
|
- name: Set up Docker Buildx
|
|
109
109
|
uses: docker/setup-buildx-action@v3
|
|
110
|
-
|
|
110
|
+
|
|
111
111
|
- name: Log in to Container registry
|
|
112
112
|
uses: docker/login-action@v3
|
|
113
113
|
with:
|
|
114
114
|
registry: ${{ env.REGISTRY }}
|
|
115
115
|
username: ${{ github.actor }}
|
|
116
116
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
117
|
-
|
|
117
|
+
|
|
118
118
|
- name: Extract metadata
|
|
119
119
|
id: meta
|
|
120
120
|
uses: docker/metadata-action@v5
|
|
@@ -123,7 +123,7 @@ jobs:
|
|
|
123
123
|
tags: |
|
|
124
124
|
type=sha
|
|
125
125
|
type=ref,event=branch
|
|
126
|
-
|
|
126
|
+
|
|
127
127
|
- name: Build and push
|
|
128
128
|
uses: docker/build-push-action@v5
|
|
129
129
|
with:
|
|
@@ -169,8 +169,8 @@ stages:
|
|
|
169
169
|
- deploy
|
|
170
170
|
|
|
171
171
|
variables:
|
|
172
|
-
PIP_CACHE_DIR:
|
|
173
|
-
DOCKER_TLS_CERTDIR:
|
|
172
|
+
PIP_CACHE_DIR: '$CI_PROJECT_DIR/.pip-cache'
|
|
173
|
+
DOCKER_TLS_CERTDIR: '/certs'
|
|
174
174
|
|
|
175
175
|
.python-setup:
|
|
176
176
|
image: python:3.11
|
|
@@ -282,35 +282,35 @@ stages:
|
|
|
282
282
|
- task: UseDotNet@2
|
|
283
283
|
inputs:
|
|
284
284
|
version: $(dotnetVersion)
|
|
285
|
-
|
|
285
|
+
|
|
286
286
|
- task: DotNetCoreCLI@2
|
|
287
287
|
displayName: 'Restore'
|
|
288
288
|
inputs:
|
|
289
289
|
command: restore
|
|
290
|
-
|
|
290
|
+
|
|
291
291
|
- task: DotNetCoreCLI@2
|
|
292
292
|
displayName: 'Build'
|
|
293
293
|
inputs:
|
|
294
294
|
command: build
|
|
295
295
|
arguments: '--configuration $(buildConfiguration) --no-restore'
|
|
296
|
-
|
|
296
|
+
|
|
297
297
|
- task: DotNetCoreCLI@2
|
|
298
298
|
displayName: 'Test'
|
|
299
299
|
inputs:
|
|
300
300
|
command: test
|
|
301
301
|
arguments: '--configuration $(buildConfiguration) --collect:"XPlat Code Coverage"'
|
|
302
|
-
|
|
302
|
+
|
|
303
303
|
- task: PublishCodeCoverageResults@2
|
|
304
304
|
inputs:
|
|
305
305
|
codeCoverageTool: 'Cobertura'
|
|
306
306
|
summaryFileLocation: '$(Agent.TempDirectory)/**/coverage.cobertura.xml'
|
|
307
|
-
|
|
307
|
+
|
|
308
308
|
- task: DotNetCoreCLI@2
|
|
309
309
|
displayName: 'Publish'
|
|
310
310
|
inputs:
|
|
311
311
|
command: publish
|
|
312
312
|
arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)'
|
|
313
|
-
|
|
313
|
+
|
|
314
314
|
- task: PublishBuildArtifacts@1
|
|
315
315
|
inputs:
|
|
316
316
|
pathToPublish: '$(Build.ArtifactStagingDirectory)'
|
|
@@ -425,18 +425,21 @@ CMD ["python", "-m", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "
|
|
|
425
425
|
## Best Practices Checklist
|
|
426
426
|
|
|
427
427
|
### Pipeline Security
|
|
428
|
+
|
|
428
429
|
- [ ] Secrets in vault/variables (not in code)
|
|
429
430
|
- [ ] Minimal permissions for CI/CD
|
|
430
431
|
- [ ] Scan for vulnerabilities
|
|
431
432
|
- [ ] Sign artifacts/images
|
|
432
433
|
|
|
433
434
|
### Quality Gates
|
|
435
|
+
|
|
434
436
|
- [ ] Unit tests pass
|
|
435
437
|
- [ ] Code coverage threshold
|
|
436
438
|
- [ ] Linting passes
|
|
437
439
|
- [ ] Security scan passes
|
|
438
440
|
|
|
439
441
|
### Deployment
|
|
442
|
+
|
|
440
443
|
- [ ] Environment-specific configs
|
|
441
444
|
- [ ] Rollback capability
|
|
442
445
|
- [ ] Health checks
|
|
@@ -30,17 +30,14 @@ Provides automated issue analysis and resolution planning:
|
|
|
30
30
|
- **Impact Analysis**: Estimate scope, effort, and risk
|
|
31
31
|
|
|
32
32
|
**Usage Example**:
|
|
33
|
+
|
|
33
34
|
```javascript
|
|
34
|
-
const {
|
|
35
|
-
IssueResolver,
|
|
36
|
-
IssueInfo,
|
|
37
|
-
IssueType
|
|
38
|
-
} = require('musubi/src/resolvers/issue-resolver');
|
|
35
|
+
const { IssueResolver, IssueInfo, IssueType } = require('musubi/src/resolvers/issue-resolver');
|
|
39
36
|
|
|
40
37
|
// Create resolver
|
|
41
38
|
const resolver = new IssueResolver({
|
|
42
39
|
projectRoot: process.cwd(),
|
|
43
|
-
autoCreateBranch: false
|
|
40
|
+
autoCreateBranch: false,
|
|
44
41
|
});
|
|
45
42
|
|
|
46
43
|
// Create issue info from GitHub API data
|
|
@@ -62,7 +59,7 @@ The login button doesn't work on mobile devices.
|
|
|
62
59
|
3. Nothing happens
|
|
63
60
|
`,
|
|
64
61
|
labels: ['bug', 'mobile'],
|
|
65
|
-
assignees: ['developer1']
|
|
62
|
+
assignees: ['developer1'],
|
|
66
63
|
});
|
|
67
64
|
|
|
68
65
|
// Get issue type
|
|
@@ -71,8 +68,8 @@ console.log(issue.type); // 'bug'
|
|
|
71
68
|
// Resolve the issue
|
|
72
69
|
const result = await resolver.resolve(issue);
|
|
73
70
|
|
|
74
|
-
console.log(result.branchName);
|
|
75
|
-
console.log(result.requirements);
|
|
71
|
+
console.log(result.branchName); // 'fix/42-login-button-not-responding'
|
|
72
|
+
console.log(result.requirements); // ['Fix touch event handling', ...]
|
|
76
73
|
console.log(result.impactAnalysis); // { scope: 'medium', effort: 'small', ... }
|
|
77
74
|
```
|
|
78
75
|
|
|
@@ -87,7 +84,7 @@ const issue = new IssueInfo({
|
|
|
87
84
|
number: issueNumber,
|
|
88
85
|
title: issueTitle,
|
|
89
86
|
body: issueBody,
|
|
90
|
-
labels: issueLabels
|
|
87
|
+
labels: issueLabels,
|
|
91
88
|
});
|
|
92
89
|
|
|
93
90
|
// Automatic type detection
|
|
@@ -97,6 +94,7 @@ const type = issue.type; // 'bug' | 'feature' | 'documentation' | 'refactor' | '
|
|
|
97
94
|
### Step 2: Requirement Extraction
|
|
98
95
|
|
|
99
96
|
The resolver automatically extracts requirements from:
|
|
97
|
+
|
|
100
98
|
- **Checkboxes**: `- [ ] Requirement text`
|
|
101
99
|
- **Keywords**: Lines containing "should", "must", "needs to"
|
|
102
100
|
|
|
@@ -110,7 +108,7 @@ const requirements = resolver.extractRequirements(issue);
|
|
|
110
108
|
Semantic branch names based on issue type:
|
|
111
109
|
|
|
112
110
|
| Issue Type | Branch Prefix |
|
|
113
|
-
|
|
111
|
+
| ------------- | ------------- |
|
|
114
112
|
| Bug | `fix/` |
|
|
115
113
|
| Feature | `feat/` |
|
|
116
114
|
| Documentation | `docs/` |
|
|
@@ -198,12 +196,12 @@ The ImpactAnalysis class provides:
|
|
|
198
196
|
|
|
199
197
|
```javascript
|
|
200
198
|
const impact = new ImpactAnalysis({
|
|
201
|
-
scope: 'medium',
|
|
202
|
-
effort: 'small',
|
|
203
|
-
risk: 'low',
|
|
199
|
+
scope: 'medium', // 'small' | 'medium' | 'large'
|
|
200
|
+
effort: 'small', // 'trivial' | 'small' | 'medium' | 'large' | 'epic'
|
|
201
|
+
risk: 'low', // 'low' | 'medium' | 'high' | 'critical'
|
|
204
202
|
affectedAreas: ['components/LoginButton', 'utils/touchHandler'],
|
|
205
203
|
dependencies: ['react-native-gesture-handler'],
|
|
206
|
-
breakingChanges: false
|
|
204
|
+
breakingChanges: false,
|
|
207
205
|
});
|
|
208
206
|
|
|
209
207
|
console.log(impact.toMarkdown());
|
|
@@ -223,26 +221,31 @@ console.log(impact.toMarkdown());
|
|
|
223
221
|
**Status**: ✅ Completed
|
|
224
222
|
|
|
225
223
|
### Branch
|
|
224
|
+
|
|
226
225
|
`fix/42-login-button-not-responding`
|
|
227
226
|
|
|
228
227
|
### Requirements Extracted
|
|
228
|
+
|
|
229
229
|
1. Fix touch event handling
|
|
230
230
|
2. Add loading indicator
|
|
231
231
|
3. Add error handling
|
|
232
232
|
|
|
233
233
|
### Impact Analysis
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
|
237
|
-
|
|
|
238
|
-
|
|
|
239
|
-
|
|
|
234
|
+
|
|
235
|
+
| Aspect | Value |
|
|
236
|
+
| ---------------- | ------ |
|
|
237
|
+
| Scope | Medium |
|
|
238
|
+
| Effort | Small |
|
|
239
|
+
| Risk | Low |
|
|
240
|
+
| Breaking Changes | No |
|
|
240
241
|
|
|
241
242
|
### Affected Areas
|
|
243
|
+
|
|
242
244
|
- `components/LoginButton`
|
|
243
245
|
- `utils/touchHandler`
|
|
244
246
|
|
|
245
247
|
### SDD Workflow
|
|
248
|
+
|
|
246
249
|
1. ✅ Requirements documented
|
|
247
250
|
2. ⬜ Design review pending
|
|
248
251
|
3. ⬜ Task breakdown pending
|