sumulige-claude 1.5.1 → 1.5.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/.claude/hooks/hook-registry.json +0 -15
- package/.claude/rules/coding-style.md +18 -7
- package/.claude/rules/hooks.md +15 -4
- package/.claude/rules/performance.md +15 -5
- package/.claude/rules/security.md +140 -4
- package/.claude/rules/testing.md +138 -9
- package/.claude/rules/web-design-standard.md +16 -5
- package/.claude/skills/algorithmic-art/metadata.yaml +28 -0
- package/.claude/skills/api-tester/SKILL.md +61 -0
- package/.claude/skills/api-tester/examples/basic.md +3 -0
- package/.claude/skills/api-tester/metadata.yaml +30 -0
- package/.claude/skills/api-tester/templates/default.md +3 -0
- package/.claude/skills/brand-guidelines/metadata.yaml +26 -0
- package/.claude/skills/canvas-design/metadata.yaml +27 -0
- package/.claude/skills/code-reviewer-123/SKILL.md +61 -0
- package/.claude/skills/code-reviewer-123/examples/basic.md +3 -0
- package/.claude/skills/code-reviewer-123/metadata.yaml +30 -0
- package/.claude/skills/code-reviewer-123/templates/default.md +3 -0
- package/.claude/skills/doc-coauthoring/metadata.yaml +27 -0
- package/.claude/skills/docx/metadata.yaml +30 -0
- package/.claude/skills/frontend-design/metadata.yaml +28 -0
- package/.claude/skills/internal-comms/metadata.yaml +28 -0
- package/.claude/skills/mcp-builder/metadata.yaml +26 -0
- package/.claude/skills/my-skill/SKILL.md +61 -0
- package/.claude/skills/my-skill/examples/basic.md +3 -0
- package/.claude/skills/my-skill/metadata.yaml +30 -0
- package/.claude/skills/my-skill/templates/default.md +3 -0
- package/.claude/skills/pdf/metadata.yaml +29 -0
- package/.claude/skills/pptx/metadata.yaml +29 -0
- package/.claude/skills/react-best-practices/metadata.yaml +26 -0
- package/.claude/skills/react-node-practices/SKILL.md +409 -0
- package/.claude/skills/react-node-practices/metadata.yaml +56 -0
- package/.claude/skills/skill-creator/metadata.yaml +25 -0
- package/.claude/skills/slack-gif-creator/metadata.yaml +28 -0
- package/.claude/skills/test-skill-name/SKILL.md +61 -0
- package/.claude/skills/test-skill-name/examples/basic.md +3 -0
- package/.claude/skills/test-skill-name/metadata.yaml +30 -0
- package/.claude/skills/test-skill-name/templates/default.md +3 -0
- package/.claude/skills/test-workflow/metadata.yaml +32 -0
- package/.claude/skills/theme-factory/metadata.yaml +26 -0
- package/.claude/skills/threejs-fundamentals/metadata.yaml +27 -0
- package/.claude/skills/web-artifacts-builder/metadata.yaml +30 -0
- package/.claude/skills/web-design-guidelines/metadata.yaml +26 -0
- package/.claude/skills/webapp-testing/metadata.yaml +26 -0
- package/.claude/skills/xlsx/metadata.yaml +29 -0
- package/LICENSE +21 -0
- package/cli.js +1 -1
- package/package.json +25 -3
- package/.claude/.kickoff-hint.txt +0 -52
- package/.claude/.sumulige-claude-version +0 -1
- package/.claude/.version +0 -1
- package/.claude/AGENTS.md +0 -42
- package/.claude/ANCHORS.md +0 -40
- package/.claude/CLAUDE.md +0 -138
- package/.claude/MEMORY.md +0 -69
- package/.claude/PROJECT_LOG.md +0 -101
- package/.claude/THINKING_CHAIN_GUIDE.md +0 -287
- package/.claude/USAGE.md +0 -175
- package/.claude/boris-optimizations.md +0 -167
- package/.claude/handoffs/INDEX.md +0 -21
- package/.claude/handoffs/LATEST.md +0 -76
- package/.claude/handoffs/handoff_2026-01-22T13-07-04-757Z.md +0 -76
- package/.claude/quality-gate.json +0 -82
- package/.claude/rag/skill-index.json +0 -135
- package/.claude/settings.json +0 -99
- package/.claude/settings.local.json +0 -175
- package/.claude/templates/PROJECT_KICKOFF.md +0 -89
- package/.claude/templates/PROJECT_PROPOSAL.md +0 -227
- package/.claude/templates/TASK_PLAN.md +0 -121
- package/.claude/templates/hooks/README.md +0 -302
- package/.claude/templates/hooks/hook.sh.template +0 -94
- package/.claude/templates/hooks/user-prompt-submit.cjs.template +0 -116
- package/.claude/templates/hooks/user-response-submit.cjs.template +0 -94
- package/.claude/templates/hooks/validate.js +0 -173
- package/.claude/templates/tasks/develop.md +0 -69
- package/.claude/templates/tasks/research.md +0 -64
- package/.claude/templates/tasks/test.md +0 -96
- package/.claude/thinking-routes/.last-sync +0 -1
- package/.claude/thinking-routes/QUICKREF.md +0 -98
- package/.claude/workflow/document-scanner.js +0 -426
- package/.claude/workflow/knowledge-engine.js +0 -941
- package/.claude/workflow/notebooklm/browser.js +0 -1028
- package/.claude/workflow/phases/phase1-research.js +0 -578
- package/.claude/workflow/phases/phase1-research.ts +0 -465
- package/.claude/workflow/phases/phase2-approve.js +0 -722
- package/.claude/workflow/phases/phase3-plan.js +0 -1200
- package/.claude/workflow/phases/phase4-develop.js +0 -894
- package/.claude/workflow/search-cache.js +0 -230
- package/.claude/workflow/templates/approval.md +0 -315
- package/.claude/workflow/templates/development.md +0 -377
- package/.claude/workflow/templates/planning.md +0 -328
- package/.claude/workflow/templates/research.md +0 -250
- package/.claude/workflow/types.js +0 -37
- package/.claude/workflow/web-search.js +0 -278
- package/.claude-plugin/marketplace.json +0 -71
- package/.github/workflows/sync-skills.yml +0 -74
- package/.versionrc +0 -25
- package/AGENTS.md +0 -580
- package/CHANGELOG.md +0 -481
- package/CLAUDE-template.md +0 -114
- package/DEV_TOOLS_GUIDE.md +0 -190
- package/PROJECT_STRUCTURE.md +0 -266
- package/Q&A.md +0 -325
- package/config/defaults.json +0 -34
- package/config/official-skills.json +0 -183
- package/config/quality-gate.json +0 -67
- package/config/skill-categories.json +0 -40
- package/config/version-manifest.json +0 -85
- package/demos/power-3d-scatter.html +0 -683
- package/development/cache/web-search/search_1193d605f8eb364651fc2f2041b58a31.json +0 -36
- package/development/cache/web-search/search_3798bf06960edc125f744a1abb5b72c5.json +0 -36
- package/development/cache/web-search/search_37c7d4843a53f0d83f1122a6f908a2a3.json +0 -36
- package/development/cache/web-search/search_44166fa0153709ee168485a22aa0ab40.json +0 -36
- package/development/cache/web-search/search_4deaebb1f77e86a8ca066dc5a49c59fd.json +0 -36
- package/development/cache/web-search/search_94da91789466070a7f545612e73c7372.json +0 -36
- package/development/cache/web-search/search_dd5de8491b8b803a3cb01339cd210fb0.json +0 -36
- package/development/knowledge-base/.index.clean.json +0 -1
- package/development/knowledge-base/.index.json +0 -486
- package/development/knowledge-base/test-best-practices.md +0 -29
- package/development/projects/proj_mkh1pazz_ixmt1/phase1/feasibility-report.md +0 -160
- package/development/projects/proj_mkh4jvnb_z7rwf/phase1/feasibility-report.md +0 -160
- package/development/projects/proj_mkh4jxkd_ewz5a/phase1/feasibility-report.md +0 -160
- package/development/projects/proj_mkh4k84n_ni73k/phase1/feasibility-report.md +0 -160
- package/development/projects/proj_mkh4wfyd_u9w88/phase1/feasibility-report.md +0 -160
- package/development/projects/proj_mkh4wsbo_iahvf/development/projects/proj_mkh4xbpg_4na5w/phase1/feasibility-report.md +0 -160
- package/development/projects/proj_mkh4wsbo_iahvf/phase1/feasibility-report.md +0 -160
- package/development/projects/proj_mkh4xulg_1ka8x/phase1/feasibility-report.md +0 -160
- package/development/projects/proj_mkh4xwhj_gch8j/phase1/feasibility-report.md +0 -160
- package/development/projects/proj_mkh4y2qk_9lm8z/phase1/feasibility-report.md +0 -160
- package/development/projects/proj_mkh4y2qk_9lm8z/phase2/requirements.md +0 -226
- package/development/projects/proj_mkh4y2qk_9lm8z/phase3/PRD.md +0 -345
- package/development/projects/proj_mkh4y2qk_9lm8z/phase3/TASK_PLAN.md +0 -284
- package/development/projects/proj_mkh4y2qk_9lm8z/phase3/prototype/README.md +0 -14
- package/development/projects/proj_mkh4y2qk_9lm8z/phase4/DEVELOPMENT_LOG.md +0 -35
- package/development/projects/proj_mkh4y2qk_9lm8z/phase4/TASKS.md +0 -34
- package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/.env.example +0 -5
- package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/README.md +0 -60
- package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/package.json +0 -25
- package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/src/index.js +0 -70
- package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/src/routes/index.js +0 -48
- package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/tests/health.test.js +0 -20
- package/development/projects/proj_mkh4y2qk_9lm8z/phase4/source/tests/jest.config.js +0 -21
- package/development/projects/proj_mkh7veqg_3lypc/phase1/feasibility-report.md +0 -160
- package/development/projects/proj_mkh7veqg_3lypc/phase2/requirements.md +0 -226
- package/development/projects/proj_mkh7veqg_3lypc/phase3/PRD.md +0 -345
- package/development/projects/proj_mkh7veqg_3lypc/phase3/TASK_PLAN.md +0 -284
- package/development/projects/proj_mkh7veqg_3lypc/phase3/prototype/README.md +0 -14
- package/development/projects/proj_mkh8k8fo_rmqn5/phase1/feasibility-report.md +0 -160
- package/development/projects/proj_mkh8xyhy_1vshq/phase1/feasibility-report.md +0 -178
- package/development/projects/proj_mkh8zddd_dhamf/phase1/feasibility-report.md +0 -377
- package/development/projects/proj_mkh8zddd_dhamf/phase2/requirements.md +0 -442
- package/development/projects/proj_mkh8zddd_dhamf/phase3/api-design.md +0 -800
- package/development/projects/proj_mkh8zddd_dhamf/phase3/architecture.md +0 -625
- package/development/projects/proj_mkh8zddd_dhamf/phase3/data-model.md +0 -830
- package/development/projects/proj_mkh8zddd_dhamf/phase3/risks.md +0 -957
- package/development/projects/proj_mkh8zddd_dhamf/phase3/wbs.md +0 -381
- package/development/todos/.state.json +0 -19
- package/development/todos/INDEX.md +0 -63
- package/development/todos/active/_README.md +0 -49
- package/development/todos/archived/_README.md +0 -11
- package/development/todos/backlog/_README.md +0 -11
- package/development/todos/backlog/mcp-integration.md +0 -35
- package/development/todos/completed/_README.md +0 -11
- package/development/todos/completed/boris-optimizations.md +0 -39
- package/development/todos/completed/develop/local-knowledge-index.md +0 -85
- package/development/todos/completed/develop/todo-system.md +0 -47
- package/development/todos/completed/develop/web-search-integration.md +0 -83
- package/development/todos/completed/test/phase1-e2e-test.md +0 -103
- package/docs/DEVELOPMENT.md +0 -461
- package/docs/MARKETPLACE.md +0 -352
- package/docs/RELEASE.md +0 -93
- package/jest.config.js +0 -63
- package/lib/commands.js +0 -3588
- package/lib/config-manager.js +0 -441
- package/lib/config-schema.js +0 -408
- package/lib/config-validator.js +0 -330
- package/lib/config.js +0 -122
- package/lib/errors.js +0 -305
- package/lib/incremental-sync.js +0 -274
- package/lib/marketplace.js +0 -487
- package/lib/migrations.js +0 -154
- package/lib/permission-audit.js +0 -255
- package/lib/quality-gate.js +0 -431
- package/lib/quality-rules.js +0 -373
- package/lib/utils.js +0 -150
- package/lib/version-check.js +0 -169
- package/lib/version-manifest.js +0 -171
- package/project-paradigm.md +0 -313
- package/prompts/how-to-find.md +0 -163
- package/prompts/linus-architect.md +0 -71
- package/prompts/software-architect.md +0 -173
- package/prompts/web-designer.md +0 -249
- package/scripts/fix-hooks.mjs +0 -97
- package/scripts/sync-external.mjs +0 -298
- package/scripts/sync-to-home.sh +0 -108
- package/scripts/update-registry.mjs +0 -325
- package/sources.yaml +0 -83
- package/tests/README.md +0 -263
- package/tests/commands.test.js +0 -1086
- package/tests/config-manager.test.js +0 -677
- package/tests/config-schema.test.js +0 -425
- package/tests/config-validator.test.js +0 -436
- package/tests/config.test.js +0 -100
- package/tests/errors.test.js +0 -477
- package/tests/manual/phase1-e2e.sh +0 -389
- package/tests/manual/phase2-test-cases.md +0 -311
- package/tests/manual/phase3-test-cases.md +0 -309
- package/tests/manual/phase4-test-cases.md +0 -414
- package/tests/manual/test-cases.md +0 -417
- package/tests/marketplace.test.js +0 -420
- package/tests/migrations.test.js +0 -187
- package/tests/quality-gate.test.js +0 -679
- package/tests/quality-rules.test.js +0 -619
- package/tests/sync-external.test.js +0 -214
- package/tests/update-registry.test.js +0 -251
- package/tests/utils.test.js +0 -171
- package/tests/version-check.test.js +0 -75
- package/tests/web-search.test.js +0 -392
- package/thinkinglens-silent.md +0 -138
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Search Result Cache
|
|
3
|
-
*
|
|
4
|
-
* Caches web search results to avoid redundant API calls
|
|
5
|
-
* and improve performance for repeated queries.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
const fs = require('fs');
|
|
9
|
-
const path = require('path');
|
|
10
|
-
const crypto = require('crypto');
|
|
11
|
-
|
|
12
|
-
// ============================================================================
|
|
13
|
-
// Configuration
|
|
14
|
-
// ============================================================================
|
|
15
|
-
|
|
16
|
-
const CACHE_DIR = path.join(process.cwd(), 'development/cache/web-search');
|
|
17
|
-
const CACHE_TTL = 24 * 60 * 60 * 1000; // 24 hours in milliseconds
|
|
18
|
-
|
|
19
|
-
// ============================================================================
|
|
20
|
-
// Search Cache Class
|
|
21
|
-
// ============================================================================
|
|
22
|
-
|
|
23
|
-
class SearchCache {
|
|
24
|
-
/**
|
|
25
|
-
* Ensure cache directory exists
|
|
26
|
-
*/
|
|
27
|
-
static ensureCacheDir() {
|
|
28
|
-
if (!fs.existsSync(CACHE_DIR)) {
|
|
29
|
-
fs.mkdirSync(CACHE_DIR, { recursive: true });
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Generate cache key from query
|
|
35
|
-
*/
|
|
36
|
-
static getCacheKey(query) {
|
|
37
|
-
const hash = crypto
|
|
38
|
-
.createHash('md5')
|
|
39
|
-
.update(query.toLowerCase().trim())
|
|
40
|
-
.digest('hex');
|
|
41
|
-
return `search_${hash}.json`;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Get cache file path for a query
|
|
46
|
-
*/
|
|
47
|
-
static getCachePath(query) {
|
|
48
|
-
this.ensureCacheDir();
|
|
49
|
-
const key = this.getCacheKey(query);
|
|
50
|
-
return path.join(CACHE_DIR, key);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Check if cached result is still valid
|
|
55
|
-
*/
|
|
56
|
-
static isValid(cachedResult) {
|
|
57
|
-
if (!cachedResult || !cachedResult.timestamp) return false;
|
|
58
|
-
const age = Date.now() - cachedResult.timestamp;
|
|
59
|
-
return age < CACHE_TTL;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Get cached results for a query
|
|
64
|
-
*/
|
|
65
|
-
static get(query) {
|
|
66
|
-
const cachePath = this.getCachePath(query);
|
|
67
|
-
|
|
68
|
-
if (!fs.existsSync(cachePath)) {
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
try {
|
|
73
|
-
const content = fs.readFileSync(cachePath, 'utf-8');
|
|
74
|
-
const cached = JSON.parse(content);
|
|
75
|
-
|
|
76
|
-
if (!this.isValid(cached)) {
|
|
77
|
-
// Cache expired, remove it
|
|
78
|
-
fs.unlinkSync(cachePath);
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return cached.results;
|
|
83
|
-
} catch (error) {
|
|
84
|
-
// Invalid cache file, remove it
|
|
85
|
-
try {
|
|
86
|
-
fs.unlinkSync(cachePath);
|
|
87
|
-
} catch (e) {}
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Set cache results for a query
|
|
94
|
-
*/
|
|
95
|
-
static set(query, results) {
|
|
96
|
-
const cachePath = this.getCachePath(query);
|
|
97
|
-
|
|
98
|
-
try {
|
|
99
|
-
const cacheData = {
|
|
100
|
-
query,
|
|
101
|
-
results,
|
|
102
|
-
timestamp: Date.now()
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
fs.writeFileSync(
|
|
106
|
-
cachePath,
|
|
107
|
-
JSON.stringify(cacheData, null, 2),
|
|
108
|
-
'utf-8'
|
|
109
|
-
);
|
|
110
|
-
} catch (error) {
|
|
111
|
-
// Fail silently if cache write fails
|
|
112
|
-
console.warn(`Failed to write cache: ${error.message}`);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Clear all cache
|
|
118
|
-
*/
|
|
119
|
-
static clear() {
|
|
120
|
-
this.ensureCacheDir();
|
|
121
|
-
|
|
122
|
-
if (!fs.existsSync(CACHE_DIR)) {
|
|
123
|
-
return 0;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const files = fs.readdirSync(CACHE_DIR);
|
|
127
|
-
let cleared = 0;
|
|
128
|
-
|
|
129
|
-
for (const file of files) {
|
|
130
|
-
if (file.endsWith('.json')) {
|
|
131
|
-
try {
|
|
132
|
-
fs.unlinkSync(path.join(CACHE_DIR, file));
|
|
133
|
-
cleared++;
|
|
134
|
-
} catch (error) {
|
|
135
|
-
// Skip files that can't be deleted
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
return cleared;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Clean expired cache entries
|
|
145
|
-
*/
|
|
146
|
-
static clean() {
|
|
147
|
-
this.ensureCacheDir();
|
|
148
|
-
|
|
149
|
-
if (!fs.existsSync(CACHE_DIR)) {
|
|
150
|
-
return 0;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
const files = fs.readdirSync(CACHE_DIR);
|
|
154
|
-
let cleaned = 0;
|
|
155
|
-
|
|
156
|
-
for (const file of files) {
|
|
157
|
-
if (file.endsWith('.json')) {
|
|
158
|
-
const filePath = path.join(CACHE_DIR, file);
|
|
159
|
-
try {
|
|
160
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
161
|
-
const cached = JSON.parse(content);
|
|
162
|
-
|
|
163
|
-
if (!this.isValid(cached)) {
|
|
164
|
-
fs.unlinkSync(filePath);
|
|
165
|
-
cleaned++;
|
|
166
|
-
}
|
|
167
|
-
} catch (error) {
|
|
168
|
-
// Remove invalid cache files
|
|
169
|
-
try {
|
|
170
|
-
fs.unlinkSync(filePath);
|
|
171
|
-
cleaned++;
|
|
172
|
-
} catch (e) {}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
return cleaned;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Get cache statistics
|
|
182
|
-
*/
|
|
183
|
-
static getStats() {
|
|
184
|
-
this.ensureCacheDir();
|
|
185
|
-
|
|
186
|
-
if (!fs.existsSync(CACHE_DIR)) {
|
|
187
|
-
return { totalEntries: 0, validEntries: 0, totalSize: 0 };
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
const files = fs.readdirSync(CACHE_DIR);
|
|
191
|
-
let validEntries = 0;
|
|
192
|
-
let totalSize = 0;
|
|
193
|
-
|
|
194
|
-
for (const file of files) {
|
|
195
|
-
if (file.endsWith('.json')) {
|
|
196
|
-
const filePath = path.join(CACHE_DIR, file);
|
|
197
|
-
try {
|
|
198
|
-
const stats = fs.statSync(filePath);
|
|
199
|
-
totalSize += stats.size;
|
|
200
|
-
|
|
201
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
202
|
-
const cached = JSON.parse(content);
|
|
203
|
-
|
|
204
|
-
if (this.isValid(cached)) {
|
|
205
|
-
validEntries++;
|
|
206
|
-
}
|
|
207
|
-
} catch (error) {
|
|
208
|
-
// Skip invalid files
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
return {
|
|
214
|
-
totalEntries: files.length,
|
|
215
|
-
validEntries,
|
|
216
|
-
totalSize,
|
|
217
|
-
cacheDir: CACHE_DIR
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// ============================================================================
|
|
223
|
-
// Exports
|
|
224
|
-
// ============================================================================
|
|
225
|
-
|
|
226
|
-
module.exports = {
|
|
227
|
-
SearchCache,
|
|
228
|
-
CACHE_DIR,
|
|
229
|
-
CACHE_TTL
|
|
230
|
-
};
|
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
# Phase 2 Approval Prompt Template
|
|
2
|
-
|
|
3
|
-
> **Role**: Requirements Analyst & Facilitator
|
|
4
|
-
> **Goal**: Transform feasibility analysis into clear, executable requirements
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## System Context
|
|
9
|
-
|
|
10
|
-
You are the **Phase 2 Approval Engine** for a 5-phase AI-assisted development workflow. Your role is to:
|
|
11
|
-
|
|
12
|
-
1. **Review** the Phase 1 feasibility analysis thoroughly
|
|
13
|
-
2. **Clarify** any ambiguities through targeted questions
|
|
14
|
-
3. **Facilitate** consensus between stakeholders
|
|
15
|
-
4. **Define** clear, testable requirements
|
|
16
|
-
|
|
17
|
-
**Key Principle**: You bridge the gap between "what's possible" (Phase 1) and "what to build" (Phase 3). Requirements must be unambiguous and testable.
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## Input Format
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
PHASE 1 FEASIBILITY REPORT: {{phase1ReportPath}}
|
|
25
|
-
|
|
26
|
-
CONTENT:
|
|
27
|
-
{{phase1ReportContent}}
|
|
28
|
-
|
|
29
|
-
ADDITIONAL CONTEXT:
|
|
30
|
-
{{userContext}}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
---
|
|
34
|
-
|
|
35
|
-
## Approval Process
|
|
36
|
-
|
|
37
|
-
### Step 1: Review Feasibility Analysis (15 minutes)
|
|
38
|
-
|
|
39
|
-
Read and analyze the Phase 1 report:
|
|
40
|
-
|
|
41
|
-
1. **Understand the core problem** being solved
|
|
42
|
-
2. **Review recommended tech stack** and rationale
|
|
43
|
-
3. **Assess identified risks** and mitigation strategies
|
|
44
|
-
4. **Note any assumptions** that need validation
|
|
45
|
-
|
|
46
|
-
Key questions to consider:
|
|
47
|
-
- Is the problem statement clear?
|
|
48
|
-
- Are the recommended technologies justified?
|
|
49
|
-
- Are the time estimates realistic?
|
|
50
|
-
- What risks need more detail?
|
|
51
|
-
|
|
52
|
-
Output format:
|
|
53
|
-
```markdown
|
|
54
|
-
## Feasibility Review
|
|
55
|
-
|
|
56
|
-
### Problem Understanding
|
|
57
|
-
[Summarize the problem in your own words]
|
|
58
|
-
|
|
59
|
-
### Tech Stack Assessment
|
|
60
|
-
[Comment on the recommended technology choices]
|
|
61
|
-
|
|
62
|
-
### Risk Analysis
|
|
63
|
-
[Highlight any risks that need attention]
|
|
64
|
-
|
|
65
|
-
### Areas Needing Clarification
|
|
66
|
-
[Identify what's unclear or needs more detail]
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
### Step 2: Generate Clarification Questions (30 minutes)
|
|
72
|
-
|
|
73
|
-
Based on the feasibility review, generate targeted questions:
|
|
74
|
-
|
|
75
|
-
#### Scope Questions
|
|
76
|
-
- What is the MVP scope?
|
|
77
|
-
- What features are essential vs. nice-to-have?
|
|
78
|
-
- What is explicitly out of scope?
|
|
79
|
-
|
|
80
|
-
#### Technical Questions
|
|
81
|
-
- Are there integration points with existing systems?
|
|
82
|
-
- Are there technical constraints not considered?
|
|
83
|
-
- Does the team have the required skills?
|
|
84
|
-
|
|
85
|
-
#### Success Questions
|
|
86
|
-
- How will success be measured?
|
|
87
|
-
- What are the key performance indicators?
|
|
88
|
-
- What does "done" look like?
|
|
89
|
-
|
|
90
|
-
#### Constraint Questions
|
|
91
|
-
- Are there deadline constraints?
|
|
92
|
-
- Are there budget/resource limitations?
|
|
93
|
-
- Are there regulatory/compliance requirements?
|
|
94
|
-
|
|
95
|
-
Output format:
|
|
96
|
-
```markdown
|
|
97
|
-
## Clarification Questions
|
|
98
|
-
|
|
99
|
-
### Scope & Priorities
|
|
100
|
-
1. **MVP Scope**: [Question]
|
|
101
|
-
- Why this matters: [Rationale]
|
|
102
|
-
- Suggested answer: [Proposed response]
|
|
103
|
-
|
|
104
|
-
### Technical Decisions
|
|
105
|
-
2. **[Question]**: [Details]
|
|
106
|
-
- Why this matters: [Rationale]
|
|
107
|
-
- Suggested answer: [Proposed response]
|
|
108
|
-
|
|
109
|
-
[Continue for each category...]
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
### Step 3: Define Functional Requirements (45 minutes)
|
|
115
|
-
|
|
116
|
-
For each requirement, provide:
|
|
117
|
-
|
|
118
|
-
**Requirement Template**:
|
|
119
|
-
```markdown
|
|
120
|
-
### FR-XXX: [Title]
|
|
121
|
-
|
|
122
|
-
**Description**: [What the system should do - clear and unambiguous]
|
|
123
|
-
|
|
124
|
-
**User Story**: As a [user type], I want [action], so that [benefit]
|
|
125
|
-
|
|
126
|
-
**Priority**: Must Have / Should Have / Could Have / Won't Have
|
|
127
|
-
|
|
128
|
-
**Acceptance Criteria**:
|
|
129
|
-
- Given [context], when [action], then [outcome]
|
|
130
|
-
- Given [context], when [action], then [outcome]
|
|
131
|
-
- Given [context], when [action], then [outcome]
|
|
132
|
-
|
|
133
|
-
**Dependencies**: [Other requirements this depends on]
|
|
134
|
-
|
|
135
|
-
**Notes**: [Any additional context]
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
**Best Practices**:
|
|
139
|
-
- Each requirement should be independently testable
|
|
140
|
-
- Use "Given-When-Then" format for acceptance criteria
|
|
141
|
-
- Assign unique IDs (FR-001, FR-002, etc.)
|
|
142
|
-
- Specify priority using MoSCoW method
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
### Step 4: Define Non-Functional Requirements (30 minutes)
|
|
147
|
-
|
|
148
|
-
Cover these categories:
|
|
149
|
-
|
|
150
|
-
#### Performance
|
|
151
|
-
- Response times (e.g., API < 200ms p95)
|
|
152
|
-
- Throughput (e.g., 1000 concurrent users)
|
|
153
|
-
- Resource limits
|
|
154
|
-
|
|
155
|
-
#### Security
|
|
156
|
-
- Authentication method (JWT, OAuth, etc.)
|
|
157
|
-
- Authorization model (RBAC, ABAC, etc.)
|
|
158
|
-
- Data protection requirements
|
|
159
|
-
|
|
160
|
-
#### Reliability
|
|
161
|
-
- Uptime target (e.g., 99.9%)
|
|
162
|
-
- Failure handling strategy
|
|
163
|
-
- Backup/recovery requirements
|
|
164
|
-
|
|
165
|
-
#### Maintainability
|
|
166
|
-
- Code quality standards
|
|
167
|
-
- Test coverage requirements
|
|
168
|
-
- Documentation requirements
|
|
169
|
-
|
|
170
|
-
#### Compatibility
|
|
171
|
-
- Browser/platform support
|
|
172
|
-
- API versioning strategy
|
|
173
|
-
- Backward compatibility needs
|
|
174
|
-
|
|
175
|
-
Output format:
|
|
176
|
-
```markdown
|
|
177
|
-
## Non-Functional Requirements
|
|
178
|
-
|
|
179
|
-
### Performance
|
|
180
|
-
| Metric | Target | How to Measure |
|
|
181
|
-
|--------|--------|----------------|
|
|
182
|
-
| API Response Time | < 200ms p95 | Load testing |
|
|
183
|
-
|
|
184
|
-
### Security
|
|
185
|
-
- Authentication: JWT tokens with 24h expiry
|
|
186
|
-
- Authorization: Role-based access control (Admin, User, Guest)
|
|
187
|
-
- Data: TLS 1.3 for transit, AES-256 for rest
|
|
188
|
-
|
|
189
|
-
[Continue for other categories...]
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
---
|
|
193
|
-
|
|
194
|
-
### Step 5: Define Success Metrics (15 minutes)
|
|
195
|
-
|
|
196
|
-
Define quantifiable metrics across three dimensions:
|
|
197
|
-
|
|
198
|
-
#### User Engagement
|
|
199
|
-
- DAU/MAU (Daily/Monthly Active Users)
|
|
200
|
-
- Session duration
|
|
201
|
-
- Feature adoption rate
|
|
202
|
-
|
|
203
|
-
#### Technical Performance
|
|
204
|
-
- Page load times
|
|
205
|
-
- Error rates
|
|
206
|
-
- API latency
|
|
207
|
-
|
|
208
|
-
#### Business Outcomes
|
|
209
|
-
- Conversion rates
|
|
210
|
-
- Customer satisfaction (NPS)
|
|
211
|
-
- Revenue impact
|
|
212
|
-
|
|
213
|
-
Output format:
|
|
214
|
-
```markdown
|
|
215
|
-
## Success Metrics
|
|
216
|
-
|
|
217
|
-
### User Engagement
|
|
218
|
-
| Metric | Target | Measurement |
|
|
219
|
-
|--------|--------|-------------|
|
|
220
|
-
| Daily Active Users | 1000 by day 30 | Analytics |
|
|
221
|
-
|
|
222
|
-
### Technical Performance
|
|
223
|
-
| Metric | Target | Measurement |
|
|
224
|
-
|--------|--------|-------------|
|
|
225
|
-
| API P95 Latency | < 200ms | Monitoring |
|
|
226
|
-
|
|
227
|
-
### Business Outcomes
|
|
228
|
-
| Metric | Target | Measurement |
|
|
229
|
-
|--------|--------|-------------|
|
|
230
|
-
| NPS Score | > 50 | Quarterly Survey |
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
---
|
|
234
|
-
|
|
235
|
-
### Step 6: Identify Edge Cases (15 minutes)
|
|
236
|
-
|
|
237
|
-
Think about:
|
|
238
|
-
- Empty states (no data)
|
|
239
|
-
- Error conditions (API failures, network issues)
|
|
240
|
-
- Boundary conditions (max/min values)
|
|
241
|
-
- Concurrent operations
|
|
242
|
-
- Invalid user input
|
|
243
|
-
|
|
244
|
-
Output format:
|
|
245
|
-
```markdown
|
|
246
|
-
## Edge Cases & Constraints
|
|
247
|
-
|
|
248
|
-
### Edge Cases
|
|
249
|
-
| Scenario | Handling Strategy |
|
|
250
|
-
|----------|-------------------|
|
|
251
|
-
| Empty data state | Show friendly onboarding |
|
|
252
|
-
| API timeout | Retry with exponential backoff |
|
|
253
|
-
| Invalid input | Real-time validation with helpful messages |
|
|
254
|
-
|
|
255
|
-
### Constraints
|
|
256
|
-
- **Technical**: [Known technical limitations]
|
|
257
|
-
- **Business**: [Business rule constraints]
|
|
258
|
-
- **Legal**: [Compliance requirements]
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
---
|
|
262
|
-
|
|
263
|
-
## Quality Checklist
|
|
264
|
-
|
|
265
|
-
Before finalizing, ensure:
|
|
266
|
-
|
|
267
|
-
- [ ] Each requirement has a unique ID (FR-XXX)
|
|
268
|
-
- [ ] Each requirement has testable acceptance criteria
|
|
269
|
-
- [ ] Priorities are assigned using MoSCoW method
|
|
270
|
-
- [ ] Non-functional requirements cover all 5 categories
|
|
271
|
-
- [ ] Success metrics are quantifiable
|
|
272
|
-
- [ ] Edge cases are identified with handling strategies
|
|
273
|
-
- [ ] Assumptions and dependencies are documented
|
|
274
|
-
- [ ] Out-of-scope items are explicitly listed
|
|
275
|
-
|
|
276
|
-
---
|
|
277
|
-
|
|
278
|
-
## Validation Criteria
|
|
279
|
-
|
|
280
|
-
The requirements document will be validated against:
|
|
281
|
-
|
|
282
|
-
| Check | Description |
|
|
283
|
-
|-------|-------------|
|
|
284
|
-
| Clear Requirements | Each requirement is unambiguous |
|
|
285
|
-
| Acceptance Criteria | Every requirement has testable criteria |
|
|
286
|
-
| Tech Rationale | Technology choices are justified |
|
|
287
|
-
| Success Metrics | Quantifiable metrics are defined |
|
|
288
|
-
| Edge Cases | Boundary conditions are identified |
|
|
289
|
-
|
|
290
|
-
**Passing Score**: ≥ 80% with zero blockers
|
|
291
|
-
|
|
292
|
-
---
|
|
293
|
-
|
|
294
|
-
## Output Format
|
|
295
|
-
|
|
296
|
-
Final output should be saved as `requirements.md` in:
|
|
297
|
-
```
|
|
298
|
-
development/projects/{projectId}/phase2/requirements.md
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
---
|
|
302
|
-
|
|
303
|
-
## Example Output
|
|
304
|
-
|
|
305
|
-
See `development/projects/examples/phase2/requirements.md` for a complete example.
|
|
306
|
-
|
|
307
|
-
---
|
|
308
|
-
|
|
309
|
-
## Notes for AI
|
|
310
|
-
|
|
311
|
-
- **Be specific**: Vague requirements lead to implementation problems
|
|
312
|
-
- **Think testable**: If you can't test it, it's not a good requirement
|
|
313
|
-
- **Consider constraints**: Every real project has limitations
|
|
314
|
-
- **Involve stakeholders**: Requirements reflect consensus, not assumptions
|
|
315
|
-
- **Look ahead**: Phase 3 will need detailed requirements - provide enough detail
|