@sallmarta/eye-hate-agent 1.0.2 → 1.0.3
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.md +38 -310
- package/bin/eha.js +203 -118
- package/docs/templates/project-docs-template/foundation/architecture.md +79 -0
- package/docs/templates/project-docs-template/foundation/changelog.md +53 -0
- package/docs/templates/project-docs-template/foundation/feature-inventory.md +46 -0
- package/docs/templates/project-docs-template/foundation/phases.md +60 -0
- package/docs/templates/project-docs-template/foundation/prd.md +69 -0
- package/docs/templates/project-docs-template/foundation/status.md +57 -0
- package/docs/templates/project-docs-template/foundation/workflow.md +59 -0
- package/docs/templates/project-docs-template/getting-started.md +52 -0
- package/docs/{vibes → templates}/project-docs-template/index.md +12 -12
- package/docs/templates/project-docs-template/operations/ci-cd.md +56 -0
- package/docs/templates/project-docs-template/operations/compliance.md +46 -0
- package/docs/templates/project-docs-template/operations/governance.md +46 -0
- package/docs/templates/project-docs-template/operations/observability.md +53 -0
- package/docs/templates/project-docs-template/operations/production-runbook.md +62 -0
- package/docs/templates/project-docs-template/operations/security.md +49 -0
- package/docs/templates/project-docs-template/technical/api-contract.md +49 -0
- package/docs/templates/project-docs-template/technical/database.md +59 -0
- package/docs/templates/project-docs-template/technical/error-handling.md +54 -0
- package/docs/templates/project-docs-template/technical/internationalization.md +46 -0
- package/docs/templates/project-docs-template/technical/testing.md +57 -0
- package/docs/templates/project-docs-template/technical/ui-ux.md +68 -0
- package/docs/{vibes → templates}/project-docs-template/technical-guidelines/index.md +3 -3
- package/docs/{vibes → templates}/reusable-prompts/00-project-docs-bootstrap.md +2 -4
- package/docs/{vibes → templates}/reusable-prompts/00-project-docs-parity.md +3 -5
- package/docs/{vibes → templates}/reusable-prompts/00-project-docs-refresh.md +2 -4
- package/docs/{vibes → templates}/reusable-prompts/02-sdd-discuss.md +2 -2
- package/{.agents/rules/agent.md → docs/templates/rules/agent-rules.md} +6 -11
- package/docs/templates/skills/architecture/db-schema-design/SKILL.md +14 -0
- package/docs/{vibes/skills → templates/skills/auditing}/full-verification/SKILL.md +1 -1
- package/docs/{vibes/skills → templates/skills/auditing}/parity/SKILL.md +2 -2
- package/docs/templates/skills/engineering/refactor-specialist/SKILL.md +13 -0
- package/docs/{vibes/skills → templates/skills/engineering}/test-authoring/SKILL.md +177 -1
- package/docs/templates/skills/engineering/ui-ux-implementation/SKILL.md +13 -0
- package/docs/templates/skills/operations/ci-cd-authoring/SKILL.md +13 -0
- package/docs/templates/skills/operations/observability-setup/SKILL.md +13 -0
- package/package.json +4 -6
- package/src/engine/index.js +7 -12
- package/src/engine/install.js +67 -163
- package/src/engine/runtime-adapters.js +263 -50
- package/src/engine/skill-registry.js +67 -0
- package/src/engine/state.js +29 -7
- package/src/engine/workflow-registry.js +14 -23
- package/.claude/commands/eha/README.md +0 -3
- package/.claude/commands/eha/eha-bootstrap.md +0 -9
- package/.claude/commands/eha/eha-discuss.md +0 -9
- package/.claude/commands/eha/eha-execute.md +0 -9
- package/.claude/commands/eha/eha-parity.md +0 -9
- package/.claude/commands/eha/eha-refresh.md +0 -9
- package/.claude/commands/eha/eha-verify.md +0 -9
- package/.claude/rules/agent-rules.md +0 -64
- package/.github/instructions/agent-rules.instructions.md +0 -63
- package/.github/instructions/eha-workflows.instructions.md +0 -21
- package/docs/eyehateagent-contract.md +0 -475
- package/docs/eyehateagent-maintenance.md +0 -103
- package/docs/project-docs/changelog.md +0 -299
- package/docs/project-docs/foundation/architecture.md +0 -117
- package/docs/project-docs/foundation/status.md +0 -32
- package/docs/project-docs/foundation/workflow.md +0 -63
- package/docs/project-docs/index.md +0 -20
- package/docs/project-docs/testing.md +0 -73
- package/docs/vibes/project-docs-template/foundation/architecture.md +0 -79
- package/docs/vibes/project-docs-template/foundation/changelog.md +0 -53
- package/docs/vibes/project-docs-template/foundation/feature-inventory.md +0 -46
- package/docs/vibes/project-docs-template/foundation/phases.md +0 -60
- package/docs/vibes/project-docs-template/foundation/prd.md +0 -69
- package/docs/vibes/project-docs-template/foundation/status.md +0 -57
- package/docs/vibes/project-docs-template/foundation/workflow.md +0 -59
- package/docs/vibes/project-docs-template/getting-started.md +0 -52
- package/docs/vibes/project-docs-template/operations/ci-cd.md +0 -56
- package/docs/vibes/project-docs-template/operations/compliance.md +0 -46
- package/docs/vibes/project-docs-template/operations/governance.md +0 -46
- package/docs/vibes/project-docs-template/operations/observability.md +0 -53
- package/docs/vibes/project-docs-template/operations/production-runbook.md +0 -62
- package/docs/vibes/project-docs-template/operations/security.md +0 -49
- package/docs/vibes/project-docs-template/technical/api-contract.md +0 -49
- package/docs/vibes/project-docs-template/technical/database.md +0 -59
- package/docs/vibes/project-docs-template/technical/error-handling.md +0 -54
- package/docs/vibes/project-docs-template/technical/internationalization.md +0 -46
- package/docs/vibes/project-docs-template/technical/testing.md +0 -57
- package/docs/vibes/project-docs-template/technical/ui-ux.md +0 -68
- package/docs/vibes/skills/project-elevation/SKILL.md +0 -157
- package/docs/vibes/skills/test-authoring/references/patterns.md +0 -116
- package/docs/vibes/skills/test-authoring/references/test-types.md +0 -52
- /package/docs/{vibes → templates}/reusable-prompts/01-sdd-execute.md +0 -0
- /package/docs/{vibes/skills → templates/skills/architecture}/api-design/SKILL.md +0 -0
- /package/docs/{vibes/skills/analysis → templates/skills/architecture/system-analysis}/SKILL.md +0 -0
- /package/docs/{vibes/skills/code-audit → templates/skills/auditing/security-audit}/SKILL.md +0 -0
package/bin/eha.js
CHANGED
|
@@ -1,163 +1,248 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
3
5
|
const { program } = require('commander');
|
|
4
6
|
const chalk = require('chalk');
|
|
7
|
+
const readline = require('node:readline/promises');
|
|
5
8
|
const {
|
|
6
|
-
|
|
9
|
+
SUPPORTED_AGENT_IDS,
|
|
7
10
|
doctor,
|
|
8
11
|
findRepoRoot,
|
|
9
|
-
|
|
10
|
-
installRuntimes,
|
|
12
|
+
initProject,
|
|
11
13
|
listSupportedRuntimes,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
listWorkflows,
|
|
15
|
+
readConfig,
|
|
16
|
+
readProjectManifest,
|
|
17
|
+
removeProject,
|
|
14
18
|
} = require('../src/engine');
|
|
15
19
|
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
const pkg = require('../package.json');
|
|
21
|
+
|
|
22
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
23
|
+
|
|
24
|
+
async function promptAgentChoice(currentAgent) {
|
|
25
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
26
|
+
try {
|
|
27
|
+
const defaultLabel = currentAgent || SUPPORTED_AGENT_IDS[0];
|
|
28
|
+
const answer = await rl.question(
|
|
29
|
+
`Which agent? [${SUPPORTED_AGENT_IDS.join('/')}] (default: ${defaultLabel}): `,
|
|
30
|
+
);
|
|
31
|
+
const normalized = answer.trim().toLowerCase();
|
|
32
|
+
return normalized || defaultLabel;
|
|
33
|
+
} finally {
|
|
34
|
+
rl.close();
|
|
35
|
+
}
|
|
18
36
|
}
|
|
19
37
|
|
|
20
|
-
function
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (result.installedRuntimes.length === 0) {
|
|
29
|
-
console.log(chalk.yellow('No runtimes are currently installed.'));
|
|
30
|
-
return;
|
|
38
|
+
async function promptOverwriteOrDiscard(message) {
|
|
39
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
40
|
+
try {
|
|
41
|
+
const answer = await rl.question(`${message} [O]verwrite / [D]iscard (default: D): `);
|
|
42
|
+
return answer.trim().toLowerCase() === 'o';
|
|
43
|
+
} finally {
|
|
44
|
+
rl.close();
|
|
31
45
|
}
|
|
46
|
+
}
|
|
32
47
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
48
|
+
async function promptConfirm(message, defaultYes = false) {
|
|
49
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
50
|
+
try {
|
|
51
|
+
const hint = defaultYes ? '[Y/n]' : '[y/N]';
|
|
52
|
+
const answer = await rl.question(`${message} ${hint}: `);
|
|
53
|
+
const normalized = answer.trim().toLowerCase();
|
|
54
|
+
if (!normalized) return defaultYes;
|
|
55
|
+
return normalized === 'y';
|
|
56
|
+
} finally {
|
|
57
|
+
rl.close();
|
|
36
58
|
}
|
|
37
59
|
}
|
|
38
60
|
|
|
39
|
-
function
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
61
|
+
function resolveRootDir() {
|
|
62
|
+
try {
|
|
63
|
+
return findRepoRoot(process.cwd());
|
|
64
|
+
} catch {
|
|
65
|
+
console.error(
|
|
66
|
+
chalk.red('No project root found.') +
|
|
67
|
+
' Run ' +
|
|
68
|
+
chalk.cyan('npm init -y') +
|
|
69
|
+
' or ' +
|
|
70
|
+
chalk.cyan('git init') +
|
|
71
|
+
' first.',
|
|
72
|
+
);
|
|
73
|
+
process.exit(1);
|
|
46
74
|
}
|
|
47
75
|
}
|
|
48
76
|
|
|
49
|
-
function
|
|
50
|
-
console.log(
|
|
51
|
-
console.log(
|
|
52
|
-
console.log(`
|
|
53
|
-
|
|
54
|
-
|
|
77
|
+
function printInitSummary(result) {
|
|
78
|
+
console.log('');
|
|
79
|
+
console.log(chalk.green('✓ EHA is ready.'));
|
|
80
|
+
console.log(` Agent : ${chalk.cyan(result.agentId)}`);
|
|
81
|
+
console.log(` Files : ${result.fileCount} file(s) generated`);
|
|
82
|
+
for (const f of result.files) {
|
|
83
|
+
console.log(` ${chalk.gray(f)}`);
|
|
55
84
|
}
|
|
56
|
-
|
|
57
|
-
|
|
85
|
+
console.log('');
|
|
86
|
+
|
|
87
|
+
if (result.agentId === 'claude') {
|
|
88
|
+
console.log('Open Claude in this project and run ' + chalk.cyan('/eha-bootstrap') + ' to get started.');
|
|
89
|
+
} else if (result.agentId === 'copilot') {
|
|
90
|
+
console.log(
|
|
91
|
+
'Open GitHub Copilot agent mode and attach ' +
|
|
92
|
+
chalk.cyan('#eha-bootstrap.prompt.md') +
|
|
93
|
+
' to get started.',
|
|
94
|
+
);
|
|
58
95
|
}
|
|
96
|
+
console.log('');
|
|
59
97
|
}
|
|
60
98
|
|
|
61
|
-
function
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
99
|
+
function printDoctorSummary(result) {
|
|
100
|
+
console.log('');
|
|
101
|
+
console.log(chalk.blue('EHA doctor'));
|
|
102
|
+
console.log(` Root : ${result.rootDir}`);
|
|
103
|
+
console.log(` Config : ${result.paths.configPath}`);
|
|
104
|
+
console.log(` Agent : ${result.agentId ? chalk.cyan(result.agentId) : chalk.yellow('not set — run eha init')}`);
|
|
105
|
+
console.log('');
|
|
106
|
+
|
|
107
|
+
if (!result.isInitialized) {
|
|
108
|
+
console.log(chalk.yellow('EHA is not initialized in this project. Run eha init to set it up.'));
|
|
109
|
+
console.log('');
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const allPresent = result.generatedFiles.every((f) => f.exists);
|
|
114
|
+
if (allPresent) {
|
|
115
|
+
console.log(chalk.green('All generated files are present:'));
|
|
116
|
+
} else {
|
|
117
|
+
console.log(chalk.yellow('Some generated files are missing (re-run eha init to restore):'));
|
|
118
|
+
}
|
|
119
|
+
for (const f of result.generatedFiles) {
|
|
120
|
+
const icon = f.exists ? chalk.green('✓') : chalk.red('✗');
|
|
121
|
+
console.log(` ${icon} ${f.relativePath}`);
|
|
122
|
+
}
|
|
123
|
+
console.log('');
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// ─── Wizard (shared by bare invocation and `eha init`) ────────────────────────
|
|
127
|
+
|
|
128
|
+
async function runInitWizard(agentIdArg) {
|
|
129
|
+
const rootDir = resolveRootDir();
|
|
130
|
+
const config = readConfig(rootDir);
|
|
131
|
+
|
|
132
|
+
let agentId = agentIdArg ? String(agentIdArg).trim().toLowerCase() : null;
|
|
133
|
+
|
|
134
|
+
if (!agentId) {
|
|
135
|
+
if (config.agent) {
|
|
136
|
+
const manifest = readProjectManifest(rootDir);
|
|
137
|
+
if (manifest.packageVersion !== pkg.version && process.stdin.isTTY && process.stdout.isTTY) {
|
|
138
|
+
const regenerate = await promptConfirm(
|
|
139
|
+
`EHA files were generated by v${manifest.packageVersion ?? 'unknown'}, current is v${pkg.version}. Regenerate?`,
|
|
140
|
+
true,
|
|
141
|
+
);
|
|
142
|
+
if (!regenerate) {
|
|
143
|
+
console.log('Skipped.');
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const result = initProject({ rootDir, agentId: config.agent });
|
|
147
|
+
printInitSummary(result);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (process.stdin.isTTY && process.stdout.isTTY) {
|
|
151
|
+
const overwrite = await promptOverwriteOrDiscard(
|
|
152
|
+
`EHA already set up (agent: ${chalk.cyan(config.agent)}).`,
|
|
153
|
+
);
|
|
154
|
+
if (!overwrite) {
|
|
155
|
+
console.log('Discarded.');
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (process.stdin.isTTY && process.stdout.isTTY) {
|
|
162
|
+
agentId = await promptAgentChoice(config.agent);
|
|
163
|
+
} else {
|
|
164
|
+
agentId = config.agent || SUPPORTED_AGENT_IDS[0];
|
|
165
|
+
}
|
|
166
|
+
} else if (config.agent && config.agent !== agentId) {
|
|
167
|
+
if (process.stdin.isTTY && process.stdout.isTTY) {
|
|
168
|
+
const overwrite = await promptOverwriteOrDiscard(
|
|
169
|
+
`EHA already set up (agent: ${chalk.cyan(config.agent)}). Switch to ${chalk.cyan(agentId)}?`,
|
|
170
|
+
);
|
|
171
|
+
if (!overwrite) {
|
|
172
|
+
console.log('Discarded.');
|
|
79
173
|
return;
|
|
80
174
|
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (!SUPPORTED_AGENT_IDS.includes(agentId)) {
|
|
179
|
+
console.error(
|
|
180
|
+
chalk.red(`Unsupported agent: ${agentId}.`) +
|
|
181
|
+
` Choose one of: ${SUPPORTED_AGENT_IDS.join(', ')}.`,
|
|
182
|
+
);
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
81
185
|
|
|
82
|
-
|
|
83
|
-
|
|
186
|
+
const result = initProject({ rootDir, agentId });
|
|
187
|
+
printInitSummary(result);
|
|
84
188
|
}
|
|
85
189
|
|
|
86
|
-
|
|
87
|
-
.name('eha')
|
|
88
|
-
.description('Eye Hate Agent (EHA) engine and installer')
|
|
89
|
-
.version('1.0.0');
|
|
190
|
+
// ─── CLI definition ────────────────────────────────────────────────────────────
|
|
90
191
|
|
|
91
|
-
program
|
|
92
|
-
.command('install [runtimes...]')
|
|
93
|
-
.description('Generate repo-local runtime surfaces for EHA')
|
|
94
|
-
.action((runtimes) => {
|
|
95
|
-
const rootDir = findRepoRoot(process.cwd());
|
|
96
|
-
const result = installRuntimes({
|
|
97
|
-
rootDir,
|
|
98
|
-
runtimes: runtimes && runtimes.length > 0 ? runtimes : DEFAULT_RUNTIME_IDS,
|
|
99
|
-
});
|
|
100
|
-
printInstallSummary('install', result);
|
|
101
|
-
});
|
|
192
|
+
program.name('eha').description('Eye Hate Agent (EHA) — AI workflow toolkit').version(pkg.version);
|
|
102
193
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
const rootDir = findRepoRoot(process.cwd());
|
|
108
|
-
const result = uninstallRuntimes({
|
|
109
|
-
rootDir,
|
|
110
|
-
runtimes: runtimes && runtimes.length > 0 ? runtimes : DEFAULT_RUNTIME_IDS,
|
|
111
|
-
});
|
|
112
|
-
printInstallSummary('uninstall', result);
|
|
113
|
-
});
|
|
194
|
+
// Bare `eha` / `eyehateagent` with no subcommand runs the init wizard.
|
|
195
|
+
program.action(async () => {
|
|
196
|
+
await runInitWizard(null);
|
|
197
|
+
});
|
|
114
198
|
|
|
115
199
|
program
|
|
116
|
-
.command('
|
|
117
|
-
.description(
|
|
118
|
-
.action(() => {
|
|
119
|
-
|
|
120
|
-
printDoctorSummary(doctor({ rootDir }));
|
|
200
|
+
.command('init [agent]')
|
|
201
|
+
.description(`Set up EHA in this project. Agent: ${SUPPORTED_AGENT_IDS.join(' | ')}`)
|
|
202
|
+
.action(async (agentArg) => {
|
|
203
|
+
await runInitWizard(agentArg || null);
|
|
121
204
|
});
|
|
122
205
|
|
|
123
|
-
installWorkflowCommand('bootstrap');
|
|
124
|
-
installWorkflowCommand('refresh');
|
|
125
|
-
installWorkflowCommand('parity');
|
|
126
|
-
installWorkflowCommand('discuss');
|
|
127
|
-
installWorkflowCommand('execute');
|
|
128
|
-
installWorkflowCommand('verify');
|
|
129
|
-
|
|
130
206
|
program
|
|
131
|
-
.command('
|
|
132
|
-
.description('
|
|
133
|
-
.
|
|
134
|
-
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
workflowId: 'bootstrap',
|
|
140
|
-
contextText,
|
|
141
|
-
invokedAs: 'init',
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
if (options.print) {
|
|
145
|
-
process.stdout.write(result.promptContent);
|
|
207
|
+
.command('remove')
|
|
208
|
+
.description('Remove EHA-generated files and config from this project')
|
|
209
|
+
.action(async () => {
|
|
210
|
+
const rootDir = resolveRootDir();
|
|
211
|
+
const config = readConfig(rootDir);
|
|
212
|
+
|
|
213
|
+
if (!config.agent) {
|
|
214
|
+
console.log(chalk.yellow('EHA is not initialized here. Nothing to remove.'));
|
|
146
215
|
return;
|
|
147
216
|
}
|
|
148
217
|
|
|
149
|
-
|
|
218
|
+
if (process.stdin.isTTY && process.stdout.isTTY) {
|
|
219
|
+
const confirmed = await promptConfirm(
|
|
220
|
+
`Remove EHA (agent: ${chalk.cyan(config.agent)}) from this project?`,
|
|
221
|
+
);
|
|
222
|
+
if (!confirmed) {
|
|
223
|
+
console.log('Aborted.');
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
const result = removeProject({ rootDir });
|
|
229
|
+
console.log('');
|
|
230
|
+
console.log(chalk.green('✓ EHA removed.'));
|
|
231
|
+
for (const f of result.removedFiles) {
|
|
232
|
+
console.log(` ${chalk.gray(f)}`);
|
|
233
|
+
}
|
|
234
|
+
console.log('');
|
|
150
235
|
});
|
|
151
236
|
|
|
152
237
|
program
|
|
153
|
-
.command('
|
|
154
|
-
.description('
|
|
238
|
+
.command('doctor')
|
|
239
|
+
.description('Show EHA status: config, agent, and generated files')
|
|
155
240
|
.action(() => {
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
for (const runtime of runtimes) {
|
|
159
|
-
console.log(`- ${runtime.id}: ${runtime.supportTier} - ${runtime.description}`);
|
|
160
|
-
}
|
|
241
|
+
const rootDir = resolveRootDir();
|
|
242
|
+
printDoctorSummary(doctor({ rootDir }));
|
|
161
243
|
});
|
|
162
244
|
|
|
163
|
-
program.
|
|
245
|
+
program.parseAsync(process.argv).catch((error) => {
|
|
246
|
+
console.error(chalk.red(error.message));
|
|
247
|
+
process.exitCode = 1;
|
|
248
|
+
});
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Architecture
|
|
2
|
+
|
|
3
|
+
Last update: YYYY-MM-DD
|
|
4
|
+
|
|
5
|
+
Status: [Proposed | Draft | Live | Deprecated | Archived]
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Description
|
|
10
|
+
Briefly describe the purpose of this document and what it contains.
|
|
11
|
+
|
|
12
|
+
## 2. Important
|
|
13
|
+
Notes of important findings or critical constraints. Can be empty.
|
|
14
|
+
|
|
15
|
+
## 3. Table of Contents
|
|
16
|
+
[Generate a hyperlinked table of contents here containing ALL headings in this file (1 through N). Use standard markdown links, e.g., - [1. Description](#1-description)]
|
|
17
|
+
|
|
18
|
+
## 4. Scope
|
|
19
|
+
The boundaries of what this document covers.
|
|
20
|
+
|
|
21
|
+
## 5. Goals
|
|
22
|
+
What we aim to achieve with this specific document.
|
|
23
|
+
|
|
24
|
+
## 6. Non Goals
|
|
25
|
+
What is explicitly excluded from the scope of this document.
|
|
26
|
+
|
|
27
|
+
## 7. Tech Stack Overview
|
|
28
|
+
| Area | Choice | Notes |
|
|
29
|
+
| --- | --- | --- |
|
|
30
|
+
| Application or service | TBD | |
|
|
31
|
+
| Runtime or platform | TBD | |
|
|
32
|
+
| Storage | TBD | |
|
|
33
|
+
| External integrations | TBD | |
|
|
34
|
+
|
|
35
|
+
## 8. Architecture Pattern
|
|
36
|
+
Describe architecture design pattern, system topology, component boundaries, and foundational control flow.
|
|
37
|
+
|
|
38
|
+
## 9. System Flow
|
|
39
|
+
General overview of how the system work from start to end. Diagram or flowchart visual are preferred. Use mermaid.
|
|
40
|
+
|
|
41
|
+
```mermaid
|
|
42
|
+
graph TD
|
|
43
|
+
A[Start] --> B{Decision}
|
|
44
|
+
B -- Yes --> C[Result 1]
|
|
45
|
+
B -- No --> D[Result 2]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 10. Data Flow
|
|
49
|
+
General overview of inter-feature data flow, mapped against architectural patterns and system flow. Diagram or flowchart visual are preferred. Use mermaid.
|
|
50
|
+
|
|
51
|
+
```mermaid
|
|
52
|
+
sequenceDiagram
|
|
53
|
+
participant User
|
|
54
|
+
participant System
|
|
55
|
+
User->>System: Data Request
|
|
56
|
+
System-->>User: Data Response
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 11. Tools Integration
|
|
60
|
+
Such as hardware or software or external api and relevant tools. Can be empty.
|
|
61
|
+
|
|
62
|
+
| Integration | Purpose | Kind | Notes |
|
|
63
|
+
| --- | --- | --- | --- |
|
|
64
|
+
| TBD | TBD | TBD | *Software/Hardware/APIs/Other* |
|
|
65
|
+
|
|
66
|
+
## 12. Global Parameters and Constraints
|
|
67
|
+
Detail the system's global restrictions, such as performance requirements, caching policies, and error-handling mechanisms (e.g., "Supports offline execution for core features" or "Memory footprint restricted to 50MB").
|
|
68
|
+
|
|
69
|
+
## 13. Architecture Decision Records (ADRs)
|
|
70
|
+
A collection of ADRs documenting the rationale behind technical decision (e.g., "Choosing React over Vue for state management flexibility" or "Adopting Domain-Driven Design to leverage bounded contexts").
|
|
71
|
+
|
|
72
|
+
## 14. Success Metrics
|
|
73
|
+
How we measure if the goals of this document are achieved.
|
|
74
|
+
|
|
75
|
+
## 15. Related Documents
|
|
76
|
+
[Link to related document](path) - Short brief note about why it's related (e.g., [Guidelines](path) - technical implementation rules).
|
|
77
|
+
|
|
78
|
+
## 16. Open Questions
|
|
79
|
+
Unresolved architectural questions or assumptions. Can be empty.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# System Name Changelog
|
|
2
|
+
|
|
3
|
+
Last update: YYYY-MM-DD
|
|
4
|
+
|
|
5
|
+
Status: [Proposed | Draft | Live | Deprecated | Archived]
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Description
|
|
10
|
+
Briefly describe the purpose of this document and what it contains.
|
|
11
|
+
|
|
12
|
+
## 2. Important
|
|
13
|
+
Notes of important findings or critical constraints. Can be empty.
|
|
14
|
+
|
|
15
|
+
## 3. Table of Contents
|
|
16
|
+
[Generate a hyperlinked table of contents here containing ALL headings in this file (1 through N). Use standard markdown links, e.g., - [1. Description](#1-description)]
|
|
17
|
+
|
|
18
|
+
## 4. Scope
|
|
19
|
+
The boundaries of what this document covers.
|
|
20
|
+
|
|
21
|
+
## 5. Goals
|
|
22
|
+
What we aim to achieve with this specific document.
|
|
23
|
+
|
|
24
|
+
## 6. Non Goals
|
|
25
|
+
What is explicitly excluded from the scope of this document.
|
|
26
|
+
|
|
27
|
+
## 7. [Unreleased]
|
|
28
|
+
### 7.1. Added
|
|
29
|
+
TBD
|
|
30
|
+
|
|
31
|
+
### 7.2. Changed
|
|
32
|
+
TBD
|
|
33
|
+
|
|
34
|
+
### 7.3. Deprecated
|
|
35
|
+
TBD
|
|
36
|
+
|
|
37
|
+
### 7.4. Removed
|
|
38
|
+
TBD
|
|
39
|
+
|
|
40
|
+
### 7.5. Fixed
|
|
41
|
+
TBD
|
|
42
|
+
|
|
43
|
+
### 7.6. Security
|
|
44
|
+
TBD
|
|
45
|
+
|
|
46
|
+
## 8. Success Metrics
|
|
47
|
+
How we measure if the goals of this document are achieved.
|
|
48
|
+
|
|
49
|
+
## 9. Related Documents
|
|
50
|
+
[Link to related document](path) - Short brief note about why it's related.
|
|
51
|
+
|
|
52
|
+
## 10. Open Questions
|
|
53
|
+
Any unresolved questions or assumptions. Can be empty.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Feature Inventory
|
|
2
|
+
|
|
3
|
+
Last update: YYYY-MM-DD
|
|
4
|
+
|
|
5
|
+
Status: [Proposed | Draft | Live | Deprecated | Archived]
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Description
|
|
10
|
+
Briefly describe the purpose of this document and what it contains.
|
|
11
|
+
|
|
12
|
+
## 2. Important
|
|
13
|
+
Notes of important findings or critical constraints. Can be empty.
|
|
14
|
+
|
|
15
|
+
## 3. Table of Contents
|
|
16
|
+
[Generate a hyperlinked table of contents here containing ALL headings in this file (1 through N). Use standard markdown links, e.g., - [1. Description](#1-description)]
|
|
17
|
+
|
|
18
|
+
## 4. Scope
|
|
19
|
+
The boundaries of what this document covers.
|
|
20
|
+
|
|
21
|
+
## 5. Goals
|
|
22
|
+
What we aim to achieve with this specific document.
|
|
23
|
+
|
|
24
|
+
## 6. Non Goals
|
|
25
|
+
What is explicitly excluded from the scope of this document.
|
|
26
|
+
|
|
27
|
+
## 7. Feature Summary
|
|
28
|
+
High-level overview of the active feature set.
|
|
29
|
+
|
|
30
|
+
## 8. Core Functions (Epic-level)
|
|
31
|
+
Major active functional blocks mapping directly to code.
|
|
32
|
+
|
|
33
|
+
## 9. Sub-Functions (Task-level)
|
|
34
|
+
Granular interactions and capabilities currently live.
|
|
35
|
+
|
|
36
|
+
## 10. Deprecated / Removed Features
|
|
37
|
+
Historical record of retired capabilities.
|
|
38
|
+
|
|
39
|
+
## 11. Success Metrics
|
|
40
|
+
How we measure if the goals of this document are achieved.
|
|
41
|
+
|
|
42
|
+
## 12. Related Documents
|
|
43
|
+
[Link to related document](path) - Short brief note about why it's related.
|
|
44
|
+
|
|
45
|
+
## 13. Open Questions
|
|
46
|
+
Any unresolved questions or assumptions. Can be empty.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Phases
|
|
2
|
+
|
|
3
|
+
Last update: YYYY-MM-DD
|
|
4
|
+
|
|
5
|
+
Status: [Proposed | Draft | Live | Deprecated | Archived]
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Description
|
|
10
|
+
Briefly describe the purpose of this document and what it contains.
|
|
11
|
+
|
|
12
|
+
## 2. Important
|
|
13
|
+
Notes of important findings or critical constraints. Can be empty.
|
|
14
|
+
|
|
15
|
+
## 3. Table of Contents
|
|
16
|
+
[Generate a hyperlinked table of contents here containing ALL headings in this file (1 through N). Use standard markdown links, e.g., - [1. Description](#1-description)]
|
|
17
|
+
|
|
18
|
+
## 4. Scope
|
|
19
|
+
The boundaries of what this document covers.
|
|
20
|
+
|
|
21
|
+
## 5. Goals
|
|
22
|
+
What we aim to achieve with this specific document.
|
|
23
|
+
|
|
24
|
+
## 6. Non Goals
|
|
25
|
+
What is explicitly excluded from the scope of this document.
|
|
26
|
+
|
|
27
|
+
## 7. Overall Project Timeline
|
|
28
|
+
High-level estimate and major milestones. Visual timelines are preferred. Use mermaid.
|
|
29
|
+
|
|
30
|
+
```mermaid
|
|
31
|
+
gantt
|
|
32
|
+
title Project Timeline
|
|
33
|
+
dateFormat YYYY-MM-DD
|
|
34
|
+
section Phase 1
|
|
35
|
+
Milestone 1 : 2024-01-01, 30d
|
|
36
|
+
section Phase 2
|
|
37
|
+
Milestone 2 : 2024-02-01, 30d
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## 8. Phase Registry
|
|
41
|
+
Links to individual markdown files in the `phases/` directory.
|
|
42
|
+
|
|
43
|
+
## 9. Sprint Tracker
|
|
44
|
+
### 9.1. Current Sprint (Date Range)
|
|
45
|
+
TBD
|
|
46
|
+
|
|
47
|
+
### 9.2. Active Tasks
|
|
48
|
+
TBD
|
|
49
|
+
|
|
50
|
+
### 9.3. Blockers
|
|
51
|
+
TBD
|
|
52
|
+
|
|
53
|
+
## 10. Success Metrics
|
|
54
|
+
How we measure if the goals of this document are achieved.
|
|
55
|
+
|
|
56
|
+
## 11. Related Documents
|
|
57
|
+
[Link to related document](path) - Short brief note about why it's related.
|
|
58
|
+
|
|
59
|
+
## 12. Open Questions
|
|
60
|
+
Any unresolved questions or assumptions. Can be empty.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Product Requirements Document (PRD)
|
|
2
|
+
|
|
3
|
+
Last update: YYYY-MM-DD
|
|
4
|
+
|
|
5
|
+
Status: [Proposed | Draft | Live | Deprecated | Archived]
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Description
|
|
10
|
+
Summarize the product, system, or major epic requirement set at a high level.
|
|
11
|
+
|
|
12
|
+
## 2. Important
|
|
13
|
+
Notes of important findings or critical constraints. Can be empty.
|
|
14
|
+
|
|
15
|
+
## 3. Table of Contents
|
|
16
|
+
[Generate a hyperlinked table of contents here containing ALL headings in this file (1 through N). Use standard markdown links, e.g., - [1. Description](#1-description)]
|
|
17
|
+
|
|
18
|
+
## 4. Scope
|
|
19
|
+
The boundaries of what this document covers.
|
|
20
|
+
|
|
21
|
+
## 5. Goals
|
|
22
|
+
What we aim to achieve with this specific document.
|
|
23
|
+
|
|
24
|
+
## 6. Non Goals
|
|
25
|
+
What is explicitly excluded from the scope of this document.
|
|
26
|
+
|
|
27
|
+
## 7. Vision Statement
|
|
28
|
+
A single, powerful sentence defining the ultimate end-state of the project.
|
|
29
|
+
|
|
30
|
+
## 8. Target Personas
|
|
31
|
+
Specific user types (e.g., Admin, Guest) to give the team empathy.
|
|
32
|
+
|
|
33
|
+
## 9. Core Business Value
|
|
34
|
+
The primary ROI, problem being solved, or operational improvement. Why does this project matter now?
|
|
35
|
+
|
|
36
|
+
## 10. User Journeys & App Flow
|
|
37
|
+
Flowcharts mapping the user's path through the app. Use mermaid.
|
|
38
|
+
|
|
39
|
+
```mermaid
|
|
40
|
+
journey
|
|
41
|
+
title User Journey Example
|
|
42
|
+
section Login
|
|
43
|
+
Enter credentials: 5: User
|
|
44
|
+
Authenticate: 5: System
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 11. Feature Workflows
|
|
48
|
+
Step-by-step logic flows for individual features. Use mermaid flowcharts to map complex feature logic.
|
|
49
|
+
|
|
50
|
+
## 12. Functional Requirements
|
|
51
|
+
Detailed list of functional capabilities.
|
|
52
|
+
|
|
53
|
+
## 13. Non-Functional Requirements
|
|
54
|
+
Reliability, performance, security, compliance, or UX expectations.
|
|
55
|
+
|
|
56
|
+
## 14. Acceptance Criteria
|
|
57
|
+
Specific criteria to verify the requirements are met.
|
|
58
|
+
|
|
59
|
+
## 15. External Dependencies & Partners
|
|
60
|
+
Third-party vendors and manual bottlenecks.
|
|
61
|
+
|
|
62
|
+
## 16. Success Metrics
|
|
63
|
+
How we measure if the goals of this document are achieved.
|
|
64
|
+
|
|
65
|
+
## 17. Related Documents
|
|
66
|
+
[Link to related document](path) - Short brief note about why it's related.
|
|
67
|
+
|
|
68
|
+
## 18. Open Questions
|
|
69
|
+
Any unresolved questions or assumptions. Can be empty.
|