@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.
Files changed (74) hide show
  1. package/README.md +56 -304
  2. package/bin/eha.js +203 -118
  3. package/docs/templates/project-docs-template/index.md +208 -0
  4. package/docs/templates/project-docs-template/technical-guidelines/index.md +81 -0
  5. package/docs/templates/reusable-prompts/00-project-docs-bootstrap.md +40 -0
  6. package/docs/{vibes → templates}/reusable-prompts/00-project-docs-parity.md +4 -6
  7. package/docs/{vibes → templates}/reusable-prompts/00-project-docs-refresh.md +11 -11
  8. package/docs/{vibes → templates}/reusable-prompts/01-sdd-execute.md +1 -1
  9. package/docs/{vibes → templates}/reusable-prompts/02-sdd-discuss.md +3 -3
  10. package/{.agents/rules/agent.md → docs/templates/rules/agent-rules.md} +7 -12
  11. package/docs/{vibes → templates}/skills/api-design/SKILL.md +14 -25
  12. package/docs/{vibes/skills/full-verification → templates/skills/code-audit}/SKILL.md +36 -54
  13. package/docs/templates/skills/db-schema-design/SKILL.md +120 -0
  14. package/docs/templates/skills/devops-ci-cd/SKILL.md +99 -0
  15. package/docs/templates/skills/observability/SKILL.md +99 -0
  16. package/docs/{vibes/skills/parity → templates/skills/parity-audit}/SKILL.md +26 -52
  17. package/docs/templates/skills/refactor/SKILL.md +100 -0
  18. package/docs/templates/skills/security-audit/SKILL.md +149 -0
  19. package/docs/{vibes/skills/analysis → templates/skills/system-analysis}/SKILL.md +19 -41
  20. package/docs/{vibes/skills/test-authoring → templates/skills/system-tester}/SKILL.md +28 -46
  21. package/docs/templates/skills/ui-ux-design/SKILL.md +102 -0
  22. package/docs/templates/skills/wireframing/SKILL.md +88 -0
  23. package/package.json +4 -6
  24. package/src/engine/index.js +9 -12
  25. package/src/engine/install.js +67 -165
  26. package/src/engine/runtime-adapters.js +266 -50
  27. package/src/engine/skill-registry.js +72 -0
  28. package/src/engine/state.js +29 -7
  29. package/src/engine/workflow-registry.js +14 -23
  30. package/.claude/commands/eha/README.md +0 -3
  31. package/.claude/commands/eha/eha-bootstrap.md +0 -9
  32. package/.claude/commands/eha/eha-discuss.md +0 -9
  33. package/.claude/commands/eha/eha-execute.md +0 -9
  34. package/.claude/commands/eha/eha-parity.md +0 -9
  35. package/.claude/commands/eha/eha-refresh.md +0 -9
  36. package/.claude/commands/eha/eha-verify.md +0 -9
  37. package/.claude/rules/agent-rules.md +0 -64
  38. package/.github/instructions/agent-rules.instructions.md +0 -63
  39. package/.github/instructions/eha-workflows.instructions.md +0 -21
  40. package/docs/eyehateagent-contract.md +0 -475
  41. package/docs/eyehateagent-maintenance.md +0 -103
  42. package/docs/project-docs/changelog.md +0 -299
  43. package/docs/project-docs/foundation/architecture.md +0 -117
  44. package/docs/project-docs/foundation/status.md +0 -32
  45. package/docs/project-docs/foundation/workflow.md +0 -63
  46. package/docs/project-docs/index.md +0 -20
  47. package/docs/project-docs/testing.md +0 -73
  48. package/docs/vibes/project-docs-template/foundation/architecture.md +0 -79
  49. package/docs/vibes/project-docs-template/foundation/changelog.md +0 -53
  50. package/docs/vibes/project-docs-template/foundation/feature-inventory.md +0 -46
  51. package/docs/vibes/project-docs-template/foundation/phases.md +0 -60
  52. package/docs/vibes/project-docs-template/foundation/prd.md +0 -69
  53. package/docs/vibes/project-docs-template/foundation/status.md +0 -57
  54. package/docs/vibes/project-docs-template/foundation/workflow.md +0 -59
  55. package/docs/vibes/project-docs-template/getting-started.md +0 -52
  56. package/docs/vibes/project-docs-template/index.md +0 -66
  57. package/docs/vibes/project-docs-template/operations/ci-cd.md +0 -56
  58. package/docs/vibes/project-docs-template/operations/compliance.md +0 -46
  59. package/docs/vibes/project-docs-template/operations/governance.md +0 -46
  60. package/docs/vibes/project-docs-template/operations/observability.md +0 -53
  61. package/docs/vibes/project-docs-template/operations/production-runbook.md +0 -62
  62. package/docs/vibes/project-docs-template/operations/security.md +0 -49
  63. package/docs/vibes/project-docs-template/technical/api-contract.md +0 -49
  64. package/docs/vibes/project-docs-template/technical/database.md +0 -59
  65. package/docs/vibes/project-docs-template/technical/error-handling.md +0 -54
  66. package/docs/vibes/project-docs-template/technical/internationalization.md +0 -46
  67. package/docs/vibes/project-docs-template/technical/testing.md +0 -57
  68. package/docs/vibes/project-docs-template/technical/ui-ux.md +0 -68
  69. package/docs/vibes/project-docs-template/technical-guidelines/index.md +0 -52
  70. package/docs/vibes/reusable-prompts/00-project-docs-bootstrap.md +0 -59
  71. package/docs/vibes/skills/code-audit/SKILL.md +0 -170
  72. package/docs/vibes/skills/project-elevation/SKILL.md +0 -157
  73. package/docs/vibes/skills/test-authoring/references/patterns.md +0 -116
  74. 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
- DEFAULT_RUNTIME_IDS,
9
+ SUPPORTED_AGENT_IDS,
7
10
  doctor,
8
11
  findRepoRoot,
9
- getWorkflow,
10
- installRuntimes,
12
+ initProject,
11
13
  listSupportedRuntimes,
12
- prepareWorkflowRun,
13
- uninstallRuntimes,
14
+ listWorkflows,
15
+ readConfig,
16
+ readProjectManifest,
17
+ removeProject,
14
18
  } = require('../src/engine');
15
19
 
16
- function formatRuntimeList(runtimes) {
17
- return runtimes.map((runtime) => `${runtime.id} (${runtime.supportTier})`).join(', ');
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 printDoctorSummary(result) {
21
- console.log(chalk.blue('EHA doctor'));
22
- console.log(`Repo root: ${result.rootDir}`);
23
- console.log(`Engine state: ${result.paths.stateDir}`);
24
- console.log(`Install manifest: ${result.paths.manifestPath}`);
25
- console.log(`Supported runtimes: ${formatRuntimeList(result.supportedRuntimes)}`);
26
- console.log(`Generated outputs live inside repo: ${result.generatedOutputsInsideRepo ? 'yes' : 'no'}`);
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
- console.log(chalk.green('Installed runtimes:'));
34
- for (const runtime of result.installedRuntimes) {
35
- console.log(`- ${runtime.id}: ${runtime.fileCount} generated file(s), support tier ${runtime.supportTier}`);
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 printInstallSummary(action, result) {
40
- console.log(chalk.blue(`EHA ${action}`));
41
- console.log(`Repo root: ${result.rootDir}`);
42
- console.log(`Runtimes: ${result.runtimes.join(', ')}`);
43
- console.log(`Manifest: ${result.manifestPath}`);
44
- for (const runtime of result.runtimeSummaries) {
45
- console.log(`- ${runtime.id}: ${runtime.fileCount} file(s), support tier ${runtime.supportTier}`);
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 printWorkflowSummary(result) {
50
- console.log(chalk.blue(`EHA workflow: ${result.workflow.id}`));
51
- console.log(`Source workflow: ${result.workflow.repoRelativePath}`);
52
- console.log(`Prepared prompt: ${result.promptPath}`);
53
- if (result.workflow.capabilityNote) {
54
- console.log(chalk.yellow(`Note: ${result.workflow.capabilityNote}`));
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
- if (result.contextText) {
57
- console.log(chalk.gray(`Additional context captured in ${result.promptPath}`));
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 installWorkflowCommand(workflowId) {
62
- const workflow = getWorkflow(workflowId);
63
-
64
- program
65
- .command(`${workflow.id} [context...]`)
66
- .description(workflow.description)
67
- .option('--print', 'Print the assembled prompt instead of the summary')
68
- .action((contextParts, options) => {
69
- const rootDir = findRepoRoot(process.cwd());
70
- const contextText = (contextParts || []).join(' ').trim();
71
- const result = prepareWorkflowRun({
72
- rootDir,
73
- workflowId: workflow.id,
74
- contextText,
75
- });
76
-
77
- if (options.print) {
78
- process.stdout.write(result.promptContent);
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
- printWorkflowSummary(result);
83
- });
186
+ const result = initProject({ rootDir, agentId });
187
+ printInitSummary(result);
84
188
  }
85
189
 
86
- program
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
- program
104
- .command('uninstall [runtimes...]')
105
- .description('Remove generated repo-local runtime surfaces for EHA')
106
- .action((runtimes) => {
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('doctor')
117
- .description('Inspect EHA engine state, supported runtimes, and installed outputs')
118
- .action(() => {
119
- const rootDir = findRepoRoot(process.cwd());
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('init [context...]')
132
- .description('Alias for bootstrap')
133
- .option('--print', 'Print the assembled prompt instead of the summary')
134
- .action((contextParts, options) => {
135
- const rootDir = findRepoRoot(process.cwd());
136
- const contextText = (contextParts || []).join(' ').trim();
137
- const result = prepareWorkflowRun({
138
- rootDir,
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
- printWorkflowSummary(result);
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('runtimes')
154
- .description('List supported runtimes and support tiers')
238
+ .command('doctor')
239
+ .description('Show EHA status: config, agent, and generated files')
155
240
  .action(() => {
156
- const runtimes = listSupportedRuntimes();
157
- console.log(chalk.blue('Supported runtimes'));
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.parse(process.argv);
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.