@sallmarta/eye-hate-agent 1.0.2 → 1.0.4
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 +56 -304
- package/bin/eha.js +203 -118
- package/docs/templates/project-docs-template/index.md +208 -0
- package/docs/templates/project-docs-template/technical-guidelines/index.md +81 -0
- package/docs/templates/reusable-prompts/00-project-docs-bootstrap.md +40 -0
- package/docs/{vibes → templates}/reusable-prompts/00-project-docs-parity.md +4 -6
- package/docs/{vibes → templates}/reusable-prompts/00-project-docs-refresh.md +11 -11
- package/docs/{vibes → templates}/reusable-prompts/01-sdd-execute.md +1 -1
- package/docs/{vibes → templates}/reusable-prompts/02-sdd-discuss.md +3 -3
- package/{.agents/rules/agent.md → docs/templates/rules/agent-rules.md} +7 -12
- package/docs/{vibes → templates}/skills/api-design/SKILL.md +14 -25
- package/docs/{vibes/skills/full-verification → templates/skills/code-audit}/SKILL.md +36 -54
- package/docs/templates/skills/db-schema-design/SKILL.md +120 -0
- package/docs/templates/skills/devops-ci-cd/SKILL.md +99 -0
- package/docs/templates/skills/observability/SKILL.md +99 -0
- package/docs/{vibes/skills/parity → templates/skills/parity-audit}/SKILL.md +26 -52
- package/docs/templates/skills/refactor/SKILL.md +100 -0
- package/docs/templates/skills/security-audit/SKILL.md +149 -0
- package/docs/{vibes/skills/analysis → templates/skills/system-analysis}/SKILL.md +19 -41
- package/docs/{vibes/skills/test-authoring → templates/skills/system-tester}/SKILL.md +28 -46
- package/docs/templates/skills/ui-ux-design/SKILL.md +102 -0
- package/docs/templates/skills/wireframing/SKILL.md +88 -0
- package/package.json +4 -6
- package/src/engine/index.js +9 -12
- package/src/engine/install.js +67 -165
- package/src/engine/runtime-adapters.js +266 -50
- package/src/engine/skill-registry.js +72 -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/index.md +0 -66
- 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/project-docs-template/technical-guidelines/index.md +0 -52
- package/docs/vibes/reusable-prompts/00-project-docs-bootstrap.md +0 -59
- package/docs/vibes/skills/code-audit/SKILL.md +0 -170
- 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/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,208 @@
|
|
|
1
|
+
# Project Docs Registry
|
|
2
|
+
|
|
3
|
+
Last update: 2026-06-01
|
|
4
|
+
|
|
5
|
+
Status: Live
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Description
|
|
10
|
+
This index is the master registry and layout definition for all Spec-Driven Development (SDD) documentation within EHA-adopting repositories. It defines the universal stable headings schema and active document types.
|
|
11
|
+
|
|
12
|
+
## 2. Important
|
|
13
|
+
All documentation generated under `docs/project-docs/` (except `index.md`, `getting-started.md`, and guideline registries) must strictly implement the Universal Stable Headings schema and incorporate the unique domain-specific headings defined below.
|
|
14
|
+
|
|
15
|
+
## 3. Table of Contents
|
|
16
|
+
- [1. Description](#1-description)
|
|
17
|
+
- [2. Important](#2-important)
|
|
18
|
+
- [3. Table of Contents](#3-table-of-contents)
|
|
19
|
+
- [4. Scope](#4-scope)
|
|
20
|
+
- [5. Goals](#5-goals)
|
|
21
|
+
- [6. Non Goals](#6-non-goals)
|
|
22
|
+
- [7. Universal Stable Headings](#7-universal-stable-headings)
|
|
23
|
+
- [8. Active Doc Type Registry](#8-active-doc-type-registry)
|
|
24
|
+
- [9. Domain-Specific Headings Catalog](#9-domain-specific-headings-catalog)
|
|
25
|
+
|
|
26
|
+
## 4. Scope
|
|
27
|
+
Covers the structural headings, layers (`foundation/`, `development/`, `operations/`), and domain headings for EHA-governed repositories.
|
|
28
|
+
|
|
29
|
+
## 5. Goals
|
|
30
|
+
Eliminate template boilerplate redundancy, prevent cross-document drift, and lower agent context consumption.
|
|
31
|
+
|
|
32
|
+
## 6. Non Goals
|
|
33
|
+
Does not define technical guidelines rules (refer to `technical-guidelines/index.md`).
|
|
34
|
+
|
|
35
|
+
## 7. Universal Stable Headings
|
|
36
|
+
Every project document must include these numbered headings in this exact order. Domain-specific headings go after § 6 and before the closing set. Feel free to add extra domain-specific headings if needed to capture important project context.
|
|
37
|
+
|
|
38
|
+
### Opening Set:
|
|
39
|
+
1. Description
|
|
40
|
+
2. Important
|
|
41
|
+
3. Table of Contents
|
|
42
|
+
4. Scope
|
|
43
|
+
5. Goals
|
|
44
|
+
6. Non Goals
|
|
45
|
+
|
|
46
|
+
### Closing Set (always last, in this order):
|
|
47
|
+
- Success Metrics
|
|
48
|
+
- Related Documents
|
|
49
|
+
- Open Questions
|
|
50
|
+
|
|
51
|
+
## 8. Active Doc Type Registry
|
|
52
|
+
|
|
53
|
+
| Doc Type | Layer | Tier | Description |
|
|
54
|
+
| :--- | :--- | :--- | :--- |
|
|
55
|
+
| `getting-started.md` | Root | 1 | Orientation and local setup instructions. |
|
|
56
|
+
| `foundation/prd.md` | foundation | 1 | Vision statement, target personas, user journeys, features. |
|
|
57
|
+
| `foundation/architecture.md` | foundation | 1 | System architecture, tech stack, data flow, system flows, ADRs. |
|
|
58
|
+
| `foundation/status.md` | foundation | 1 | High-level status, recent wins, roadmap. |
|
|
59
|
+
| `foundation/workflow.md` | foundation | 1 | Branching, local development loop, PRs, code reviews. |
|
|
60
|
+
| `foundation/phases.md` | foundation | 3 | Overall timelines, features, sub-functions, sprints. (Merged phases + feature inventory) |
|
|
61
|
+
| `foundation/changelog.md` | foundation | 3 | Historical releases log. |
|
|
62
|
+
| `development/testing.md` | development | 2 | QA policy, matrices, environments, gates, naming standards. |
|
|
63
|
+
| `development/api-contract.md` | development | 2 | API authentication, endpoints, payloads, webhooks, rate limits. |
|
|
64
|
+
| `development/database.md` | development | 2 | Schema, entity models, indexes, migrations, data dictionary. |
|
|
65
|
+
| `development/ui-ux.md` | development | 2 | Design rules, wireframes, screen layouts, design tokens, responsive, a11y. |
|
|
66
|
+
| `development/internationalization.md` | development | 3 | Languages support, translations flow, currency, dates. |
|
|
67
|
+
| `operations/ci-cd.md` | operations | 2 | CI/CD pipelines, test gates, secrets handling, deploys. |
|
|
68
|
+
| `operations/production-runbook.md` | operations | 3 | Release procedures, rollback, environment config, smoke checks. |
|
|
69
|
+
| `operations/governance.md` | operations | 3 | Versioning policy, release cadence, code ownership rules. |
|
|
70
|
+
| `operations/security-compliance.md` | operations | 3 | Threat mitigation, RBAC, encryption, data privacy/retention, audit logging. (Merged security + compliance) |
|
|
71
|
+
| `operations/observability-error-handling.md` | operations | 3 | Log levels, error payloads, server fallbacks, alerts, dashboard metrics. (Merged observability + error handling) |
|
|
72
|
+
| `[custom-path].md` | [layer] | [tier] | [Add custom document templates here as needed to activate additional files] |
|
|
73
|
+
|
|
74
|
+
## 9. Domain-Specific Headings Catalog
|
|
75
|
+
|
|
76
|
+
This catalog defines the baseline required domain-specific headings for each document type. When documenting a repository, both developers and AI agents are **NOT** limited to this baseline catalog; they must actively append additional, custom domain-specific headings to capture the unique features, patterns, and architectural realities discovered in the codebase.
|
|
77
|
+
|
|
78
|
+
### `getting-started.md`
|
|
79
|
+
- Prerequisites
|
|
80
|
+
- First Steps
|
|
81
|
+
- Local Setup
|
|
82
|
+
- Verification
|
|
83
|
+
- Troubleshooting
|
|
84
|
+
|
|
85
|
+
### `foundation/prd.md`
|
|
86
|
+
- Vision Statement
|
|
87
|
+
- Target Personas
|
|
88
|
+
- Core Business Value
|
|
89
|
+
- User Journeys & App Flow
|
|
90
|
+
- Feature Workflows
|
|
91
|
+
- Functional Requirements
|
|
92
|
+
- Non-Functional Requirements
|
|
93
|
+
- Acceptance Criteria
|
|
94
|
+
- External Dependencies & Partners
|
|
95
|
+
|
|
96
|
+
### `foundation/architecture.md`
|
|
97
|
+
- Tech Stack Overview
|
|
98
|
+
- Architecture Pattern
|
|
99
|
+
- System Flow
|
|
100
|
+
- Data Flow
|
|
101
|
+
- Tools Integration
|
|
102
|
+
- Global Parameters and Constraints
|
|
103
|
+
- Architecture Decision Records
|
|
104
|
+
|
|
105
|
+
### `foundation/status.md`
|
|
106
|
+
- Current State
|
|
107
|
+
- Recent Accomplishments
|
|
108
|
+
- Upcoming Focus
|
|
109
|
+
- Key Metrics
|
|
110
|
+
- Roadmap
|
|
111
|
+
- Epics
|
|
112
|
+
- Risks/Blockers
|
|
113
|
+
|
|
114
|
+
### `foundation/workflow.md`
|
|
115
|
+
- Local Dev Loop
|
|
116
|
+
- Branching Strategy
|
|
117
|
+
- PR & Code Review
|
|
118
|
+
- Issue Tracking
|
|
119
|
+
|
|
120
|
+
### `foundation/phases.md`
|
|
121
|
+
- Overall Timeline
|
|
122
|
+
- Feature Summary & Core Functions
|
|
123
|
+
- Sub-Functions
|
|
124
|
+
- Deprecated Features
|
|
125
|
+
- Phase Registry
|
|
126
|
+
- Sprint Tracker
|
|
127
|
+
|
|
128
|
+
### `foundation/changelog.md`
|
|
129
|
+
- [Unreleased] (Added/Changed/Deprecated/Removed/Fixed/Security entries)
|
|
130
|
+
|
|
131
|
+
### `development/testing.md`
|
|
132
|
+
- Verification Policy & Objectives
|
|
133
|
+
- Verification Matrix & Coverage
|
|
134
|
+
- Test Layers & Environments
|
|
135
|
+
- Commands & CI Gates
|
|
136
|
+
- Naming & File Conventions
|
|
137
|
+
- Manual Checks & Fallbacks
|
|
138
|
+
|
|
139
|
+
### `development/api-contract.md`
|
|
140
|
+
- Base URL & Auth
|
|
141
|
+
- Request/Response Format
|
|
142
|
+
- Endpoints
|
|
143
|
+
- Webhooks
|
|
144
|
+
- Rate Limiting
|
|
145
|
+
|
|
146
|
+
### `development/database.md`
|
|
147
|
+
- DB Architecture
|
|
148
|
+
- Schema Definitions
|
|
149
|
+
- Indexes
|
|
150
|
+
- Migration Strategy
|
|
151
|
+
- Data Dictionary
|
|
152
|
+
|
|
153
|
+
### `development/ui-ux.md`
|
|
154
|
+
- Design Philosophy
|
|
155
|
+
- Design System
|
|
156
|
+
- Wireframing
|
|
157
|
+
- Screen Layouts
|
|
158
|
+
- Component Library
|
|
159
|
+
- Responsive
|
|
160
|
+
- Accessibility (A11y)
|
|
161
|
+
- Design Handoff
|
|
162
|
+
|
|
163
|
+
### `development/internationalization.md`
|
|
164
|
+
- Supported Languages
|
|
165
|
+
- Translation Workflow
|
|
166
|
+
- Fallback Locales
|
|
167
|
+
- Date & Currency
|
|
168
|
+
|
|
169
|
+
### `operations/ci-cd.md`
|
|
170
|
+
- Pipeline Architecture
|
|
171
|
+
- Build Steps
|
|
172
|
+
- Testing & Quality Gates
|
|
173
|
+
- Deployment Environments
|
|
174
|
+
- Secrets
|
|
175
|
+
|
|
176
|
+
### `operations/production-runbook.md`
|
|
177
|
+
- Environment Overview
|
|
178
|
+
- Prerequisites & Access
|
|
179
|
+
- Release Procedure
|
|
180
|
+
- Smoke Checks
|
|
181
|
+
- Rollback
|
|
182
|
+
- Operational Notes
|
|
183
|
+
|
|
184
|
+
### `operations/governance.md`
|
|
185
|
+
- Versioning Policy
|
|
186
|
+
- Release Cadence
|
|
187
|
+
- Code Ownership
|
|
188
|
+
- Contribution Guidelines
|
|
189
|
+
|
|
190
|
+
### `operations/security-compliance.md`
|
|
191
|
+
- Security Objectives & Threats
|
|
192
|
+
- Access Control & RBAC
|
|
193
|
+
- Data Encryption & Privacy
|
|
194
|
+
- Data Retention
|
|
195
|
+
- Audit Logging
|
|
196
|
+
- Compliance Audits & Legal Disclaimers
|
|
197
|
+
|
|
198
|
+
### `operations/observability-error-handling.md`
|
|
199
|
+
- Logging Strategy
|
|
200
|
+
- Standard Error Payloads
|
|
201
|
+
- Global Error Codes
|
|
202
|
+
- Client-Side Rules & Server Fallbacks
|
|
203
|
+
- Metrics & Dashboards
|
|
204
|
+
- Alerting Rules
|
|
205
|
+
- Distributed Tracing
|
|
206
|
+
|
|
207
|
+
### `[custom-path].md`
|
|
208
|
+
- [Add the custom document's unique domain headings here, e.g., "Caching Strategy" or "Performance Budgets"]
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Guidelines Registry
|
|
2
|
+
|
|
3
|
+
Last update: 2026-06-01
|
|
4
|
+
|
|
5
|
+
Status: Live
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Description
|
|
10
|
+
This registry is the authoritative catalog and schema definition for all active technical guideline documents inside the repository. While core project documents explain the repository generally, technical guidelines document the durable, cross-cutting coding and design conventions that developers and AI agents must follow during implementation.
|
|
11
|
+
|
|
12
|
+
## 2. Important
|
|
13
|
+
Guidelines are durable, codebase-level rulebooks. They must never be created as simple placeholders. A guideline is officially activated in bootstrap, refresh, and parity loops only when it has an active row registered in the Active Guidelines table below.
|
|
14
|
+
|
|
15
|
+
## 3. Table of Contents
|
|
16
|
+
- [1. Description](#1-description)
|
|
17
|
+
- [2. Important](#2-important)
|
|
18
|
+
- [3. Table of Contents](#3-table-of-contents)
|
|
19
|
+
- [4. Scope](#4-scope)
|
|
20
|
+
- [5. Goals](#5-goals)
|
|
21
|
+
- [6. Non Goals](#6-non-goals)
|
|
22
|
+
- [7. Active Guidelines Registry](#7-active-guidelines-registry)
|
|
23
|
+
- [8. Registry Rules & Ownership](#8-registry-rules--ownership)
|
|
24
|
+
- [9. Guideline Stable Headings](#9-guideline-stable-headings)
|
|
25
|
+
- [10. Success Metrics](#10-success-metrics)
|
|
26
|
+
- [11. Related Documents](#11-related-documents)
|
|
27
|
+
- [12. Open Questions](#12-open-questions)
|
|
28
|
+
|
|
29
|
+
## 4. Scope
|
|
30
|
+
Covers the active guideline categories, ownership tracking, review triggers, and standard heading rules for technical guidelines.
|
|
31
|
+
|
|
32
|
+
## 5. Goals
|
|
33
|
+
Standardize the coding and architectural rules across the codebase, preventing design-pattern divergence and ensuring high code quality.
|
|
34
|
+
|
|
35
|
+
## 6. Non Goals
|
|
36
|
+
Does not document general project setup, business logic, or operational procedures (refer to the master project docs registry `index.md`).
|
|
37
|
+
|
|
38
|
+
## 7. Active Guidelines Registry
|
|
39
|
+
|
|
40
|
+
| Guideline | Domain | Purpose | Owner | Review Trigger |
|
|
41
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
42
|
+
| `technical-guidelines/api.md` | API | Request or response contracts, versioning rules, and integration boundaries | TBD | API contract or integration changes |
|
|
43
|
+
| `technical-guidelines/database.md` | Database | Schema, migration, naming, and persistence rules | TBD | Schema or storage changes |
|
|
44
|
+
| `technical-guidelines/logging.md` | Logging | Event naming, log levels, redaction, and correlation rules | TBD | Logging policy or observability changes |
|
|
45
|
+
| `technical-guidelines/error-handling.md` | Error handling | Error taxonomy, propagation, user-safe messages, and fallback rules | TBD | Error model or operational changes |
|
|
46
|
+
| `technical-guidelines/json.md` | JSON | Serialization, naming, nullability, and payload-shape rules | TBD | Payload or contract changes |
|
|
47
|
+
| `technical-guidelines/code-style.md` | Code style | Repo-specific style rules beyond formatter and linter defaults | TBD | Tooling or style-policy changes |
|
|
48
|
+
| `technical-guidelines/design-patterns.md` | Design patterns | Preferred design patterns, boundary patterns, and forbidden coupling | TBD | Architecture or module-boundary changes |
|
|
49
|
+
| `technical-guidelines/internationalization.md` | i18n/l10n | Rules for i18n keys, fallbacks, and adding new languages | TBD | i18n tooling or language changes |
|
|
50
|
+
| `technical-guidelines/testing.md` | Testing | Rules for writing tests, naming conventions, mocking, and coverage | TBD | Testing framework or coverage changes |
|
|
51
|
+
| `technical-guidelines/ui-ux.md` | UI/UX | Rules for UI components, accessibility standards, and design system usage | TBD | Design system or component library changes |
|
|
52
|
+
| `technical-guidelines/[custom-guideline].md` | [Domain] | [Durable technical rules and conventions for custom domain] | TBD | [Review trigger, e.g. "API or schema changes"] |
|
|
53
|
+
|
|
54
|
+
Remove rows for inactive domains and add a new row in the `## 7. Active Guidelines Registry` table above for any other active guideline files.
|
|
55
|
+
|
|
56
|
+
## 8. Registry Rules & Ownership
|
|
57
|
+
- Keep this index aligned with the files that actually exist under `technical-guidelines/`.
|
|
58
|
+
- A row in this index activates a known guideline type for bootstrap, refresh, and parity behavior.
|
|
59
|
+
- If no starter template file exists for a listed guideline type, use the Stable Headings schema defined below.
|
|
60
|
+
- Update the relevant row whenever a guideline changes owner, scope, or review trigger.
|
|
61
|
+
- Cross-reference owning project docs such as `architecture.md` or `testing.md` when a guideline depends on them.
|
|
62
|
+
|
|
63
|
+
## 9. Guideline Stable Headings
|
|
64
|
+
New guideline files must include the standard numbered headings below to keep all rulebooks consistent. When documenting a guideline, both developers and AI agents are **NOT** limited to this baseline schema; they must actively append additional, custom domain-specific headings (for example, under Section 3 or as subheadings) to capture the unique technical standards, tooling, and constraints of the codebase.
|
|
65
|
+
|
|
66
|
+
1. **`## 1. Summary`**: A brief overview of what rules this guideline documents.
|
|
67
|
+
2. **`## 2. Scope`**: The explicit boundaries of what these rules cover (and don't cover).
|
|
68
|
+
3. **`## 3. Rules`**: The hard rules that must be followed.
|
|
69
|
+
4. **`## 4. Preferred Patterns`**: Examples or guidelines of the *best* way to do something.
|
|
70
|
+
5. **`## 5. Anti-Patterns`**: Examples of what *not* to do.
|
|
71
|
+
6. **`## 6. Related Docs`**: Links to active core project documents or other guidelines.
|
|
72
|
+
7. **`## 7. Open Questions`**: Any unresolved rules or edge cases.
|
|
73
|
+
|
|
74
|
+
## 10. Success Metrics
|
|
75
|
+
AI agents and developers can easily reference, follow, and validate cross-cutting code standard compliance during changes.
|
|
76
|
+
|
|
77
|
+
## 11. Related Documents
|
|
78
|
+
- [Master Project Registry](../index.md) - The active document catalog.
|
|
79
|
+
|
|
80
|
+
## 12. Open Questions
|
|
81
|
+
None.
|