azcodr 1.2.2 → 1.3.0
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/AGENTS.md +0 -1
- package/README.md +2 -5
- package/bin/azcodr.js +2 -81
- package/docs/knowledge/ubiquitous_language.md +1 -6
- package/lib/index.d.ts +0 -30
- package/lib/scaffold.js +0 -46
- package/memory.md +11 -1
- package/package.json +1 -2
- package/changes.md +0 -79
- package/docs/rules/upstream_synchronization.md +0 -53
package/AGENTS.md
CHANGED
|
@@ -100,7 +100,6 @@ To prevent context bloat and keep prompt overhead minimal, detailed engineering
|
|
|
100
100
|
| **Relentless Questioning** | [docs/rules/relentless_questioning.md](./docs/rules/relentless_questioning.md) | Dynamic context-aware interrogation loops, adaptive decision trees. |
|
|
101
101
|
| **Workspace Isolation** | [docs/rules/workspace_isolation.md](./docs/rules/workspace_isolation.md) | Strict workspace sovereignty, zero global contamination, local ground truth. |
|
|
102
102
|
| **Continuous Learning** | [docs/rules/continuous_learning.md](./docs/rules/continuous_learning.md) | Direct rule ingestion, root-cause analysis, dynamic invariant updates. |
|
|
103
|
-
| **Upstream Sync** | [docs/rules/upstream_synchronization.md](./docs/rules/upstream_synchronization.md) | Logging generic architecture improvements to changes.md; zero baseline pollution. |
|
|
104
103
|
---
|
|
105
104
|
|
|
106
105
|
## 4. Agent Configuration & Workspace Architecture
|
package/README.md
CHANGED
|
@@ -38,11 +38,10 @@
|
|
|
38
38
|
├── docs/
|
|
39
39
|
│ ├── knowledge/ # Institutional knowledge & domain contracts
|
|
40
40
|
│ │ └── ubiquitous_language.md # Living Ubiquitous Language glossary template
|
|
41
|
-
│ └── rules/ #
|
|
41
|
+
│ └── rules/ # 44 atomic single-responsibility domain rules
|
|
42
42
|
├── AGENTS.md # Lean root agentic configuration (< 120 lines)
|
|
43
43
|
├── CLAUDE.md -> AGENTS.md # Filesystem symlink for harness parity
|
|
44
44
|
├── agents.md -> AGENTS.md # Filesystem symlink for harness parity
|
|
45
|
-
├── changes.md # Upstream changes ledger
|
|
46
45
|
├── memory.md # Master memory hub & Lightweight ADR ledger
|
|
47
46
|
└── README.md # Project documentation
|
|
48
47
|
```
|
|
@@ -51,7 +50,7 @@
|
|
|
51
50
|
|
|
52
51
|
## 📋 Progressive Disclosure Rules Catalog (`docs/rules/`)
|
|
53
52
|
|
|
54
|
-
The architecture enforces
|
|
53
|
+
The architecture enforces 44 atomic, single-responsibility domain rules. Read on demand to prevent prompt context bloat:
|
|
55
54
|
|
|
56
55
|
| Domain | Rule Reference File | Key Focus & Invariants |
|
|
57
56
|
|---|---|---|
|
|
@@ -99,7 +98,6 @@ The architecture enforces 45 atomic, single-responsibility domain rules. Read on
|
|
|
99
98
|
| **Relentless Questioning** | [`relentless_questioning.md`](./docs/rules/relentless_questioning.md) | Dynamic context-aware interrogation loops, adaptive decision trees. |
|
|
100
99
|
| **Workspace Isolation** | [`workspace_isolation.md`](./docs/rules/workspace_isolation.md) | Strict workspace sovereignty, zero global contamination, local ground truth. |
|
|
101
100
|
| **Continuous Learning** | [`continuous_learning.md`](./docs/rules/continuous_learning.md) | Direct 4-step rule ingestion, root-cause analysis, dynamic invariant updates. |
|
|
102
|
-
| **Upstream Sync** | [`upstream_synchronization.md`](./docs/rules/upstream_synchronization.md) | Logging generic architecture improvements to changes.md; zero baseline pollution. |
|
|
103
101
|
|
|
104
102
|
---
|
|
105
103
|
|
|
@@ -167,4 +165,3 @@ Once confirmed, the agent automatically executes:
|
|
|
167
165
|
|
|
168
166
|
- 📖 **[Living Ubiquitous Language Glossary](./docs/knowledge/ubiquitous_language.md)**: Authoritative domain vocabulary contract.
|
|
169
167
|
- 📜 **[Lightweight ADR Ledger](./memory.md)**: Formal Architectural Decision Records and governing rules.
|
|
170
|
-
- 📝 **[Upstream Changes Ledger](./changes.md)**: Record candidate improvements and generic patterns for the upstream azcodr template.
|
package/bin/azcodr.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
const path = require('node:path');
|
|
5
5
|
const readline = require('node:readline');
|
|
6
6
|
const fs = require('node:fs');
|
|
7
|
-
const { scaffold,
|
|
7
|
+
const { scaffold, getTemplateDir } = require('../lib/scaffold.js');
|
|
8
8
|
const pkg = require('../package.json');
|
|
9
9
|
|
|
10
10
|
function printHelp(out = console.log) {
|
|
@@ -14,13 +14,11 @@ Enterprise Multi-Tenant Architecture & Agentic Engineering Starter Template
|
|
|
14
14
|
|
|
15
15
|
Usage:
|
|
16
16
|
npx azcodr [directory] [options]
|
|
17
|
-
npx azcodr change <title> [options]
|
|
18
17
|
|
|
19
18
|
Commands:
|
|
20
19
|
[directory] Scaffold azcodr template into directory (default: current directory)
|
|
21
|
-
change <title> Log a generic architectural change to changes.md
|
|
22
20
|
|
|
23
|
-
|
|
21
|
+
Options:
|
|
24
22
|
-d, --dry-run Simulate scaffolding without modifying filesystem
|
|
25
23
|
-s, --silent Suppress console output messages
|
|
26
24
|
-f, --force Overwrite existing files in target directory without confirmation
|
|
@@ -28,17 +26,10 @@ Scaffold Options:
|
|
|
28
26
|
-v, --version Display version number
|
|
29
27
|
-h, --help Display this help message
|
|
30
28
|
|
|
31
|
-
Change Options:
|
|
32
|
-
-c, --category Category (Architecture | Rule | Skill | Infrastructure | CLI | Knowledge Hub)
|
|
33
|
-
-f, --files Target file(s) affected (e.g. "docs/rules/caching.md")
|
|
34
|
-
-r, --rationale Rationale for upstream template incorporation
|
|
35
|
-
-d, --desc Detailed description of the change
|
|
36
|
-
|
|
37
29
|
Examples:
|
|
38
30
|
npx azcodr my-project
|
|
39
31
|
npx azcodr . --dry-run
|
|
40
32
|
npx azcodr . --force
|
|
41
|
-
npx azcodr change "Add Wasm plugin interface" -c Architecture
|
|
42
33
|
`);
|
|
43
34
|
}
|
|
44
35
|
|
|
@@ -67,70 +58,6 @@ function askQuestion(query, { input = process.stdin, output = process.stdout } =
|
|
|
67
58
|
});
|
|
68
59
|
}
|
|
69
60
|
|
|
70
|
-
async function handleLogChange(rawArgs = process.argv.slice(2), io = {}) {
|
|
71
|
-
const {
|
|
72
|
-
out = console.log,
|
|
73
|
-
err = console.error,
|
|
74
|
-
exit = process.exit,
|
|
75
|
-
stdin = process.stdin,
|
|
76
|
-
stdout = process.stdout,
|
|
77
|
-
cwd = process.cwd(),
|
|
78
|
-
logChange: logChangeFn = logChange
|
|
79
|
-
} = io;
|
|
80
|
-
|
|
81
|
-
let title = null;
|
|
82
|
-
let category = 'Architecture';
|
|
83
|
-
let targetFiles = 'docs/rules/';
|
|
84
|
-
let rationale = 'Generic architectural enhancement';
|
|
85
|
-
let description = '';
|
|
86
|
-
|
|
87
|
-
for (let i = 1; i < rawArgs.length; i++) {
|
|
88
|
-
const a = rawArgs[i];
|
|
89
|
-
if (a === '-c' || a === '--category') {
|
|
90
|
-
category = rawArgs[++i] || category;
|
|
91
|
-
} else if (a === '-f' || a === '--files') {
|
|
92
|
-
targetFiles = rawArgs[++i] || targetFiles;
|
|
93
|
-
} else if (a === '-r' || a === '--rationale') {
|
|
94
|
-
rationale = rawArgs[++i] || rationale;
|
|
95
|
-
} else if (a === '-d' || a === '--desc' || a === '--description') {
|
|
96
|
-
description = rawArgs[++i] || description;
|
|
97
|
-
} else if (a.startsWith('-')) {
|
|
98
|
-
err(`❌ Error: Unknown argument '${a}'. Run 'npx azcodr --help' for available options.`);
|
|
99
|
-
return exit(1);
|
|
100
|
-
} else if (!title) {
|
|
101
|
-
title = a;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
if (!title) {
|
|
106
|
-
if (stdin.isTTY) {
|
|
107
|
-
title = await askQuestion('? Change title: ', { input: stdin, output: stdout });
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
if (!title) {
|
|
112
|
-
err('❌ Error: A title is required to log an upstream change.');
|
|
113
|
-
err('Usage: npx azcodr change "<title>" [-c Category] [-f Files] [-r Rationale] [-d Description]');
|
|
114
|
-
return exit(1);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
try {
|
|
118
|
-
const res = logChangeFn({
|
|
119
|
-
title,
|
|
120
|
-
category,
|
|
121
|
-
targetFiles,
|
|
122
|
-
rationale,
|
|
123
|
-
description,
|
|
124
|
-
targetDir: cwd
|
|
125
|
-
});
|
|
126
|
-
out(`\n✅ Upstream change logged to ${res.filePath}\n`);
|
|
127
|
-
return exit(0);
|
|
128
|
-
} catch (error) {
|
|
129
|
-
err(`\n❌ Failed to log change: ${error.message}\n`);
|
|
130
|
-
return exit(1);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
61
|
async function runCli(rawArgs = process.argv.slice(2), io = {}) {
|
|
135
62
|
const {
|
|
136
63
|
out = console.log,
|
|
@@ -143,10 +70,6 @@ async function runCli(rawArgs = process.argv.slice(2), io = {}) {
|
|
|
143
70
|
scaffold: scaffoldFn = scaffold
|
|
144
71
|
} = io;
|
|
145
72
|
|
|
146
|
-
if (rawArgs[0] === 'change' || rawArgs[0] === 'log-change') {
|
|
147
|
-
return handleLogChange(rawArgs, io);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
73
|
let targetDir = null;
|
|
151
74
|
let force = false;
|
|
152
75
|
let noGit = false;
|
|
@@ -257,7 +180,6 @@ async function runCli(rawArgs = process.argv.slice(2), io = {}) {
|
|
|
257
180
|
out(' ✅ Progressive disclosure rules copied (docs/rules/)');
|
|
258
181
|
out(' ✅ Workspace knowledge hub and ADR ledger copied (docs/knowledge/, memory.md)');
|
|
259
182
|
out(' ✅ Specialized agentic skills copied (.agents/skills/)');
|
|
260
|
-
out(' ✅ Upstream changes ledger initialized (changes.md)');
|
|
261
183
|
out(' ✅ Editor formatting standards initialized (.editorconfig)');
|
|
262
184
|
out(' ✅ Agent directives and harness symlinks established (AGENTS.md, CLAUDE.md, agents.md)');
|
|
263
185
|
if (result.gitInitialized) {
|
|
@@ -294,7 +216,6 @@ if (require.main === module) {
|
|
|
294
216
|
|
|
295
217
|
module.exports = {
|
|
296
218
|
runCli,
|
|
297
|
-
handleLogChange,
|
|
298
219
|
askQuestion,
|
|
299
220
|
printHelp,
|
|
300
221
|
printVersion,
|
|
@@ -8,12 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
| Canonical Term | Business Definition | Bounded Context | Forbidden Synonyms | Code & Database Identifiers |
|
|
10
10
|
|---|---|---|---|---|
|
|
11
|
-
|
|
|
12
|
-
| **User** | A human actor authenticated with verified credentials across the platform. | Identity & Access | Member (when unauthenticated), Account, Login | `User`, `userId`, `users` table |
|
|
13
|
-
| **Membership** | The formal association connecting a User to an Organization with assigned roles. | Authorization & RBAC | UserOrg, Seat, PermissionAssignment | `Membership`, `membershipId`, `memberships` table |
|
|
14
|
-
| **Role** | A named set of granular `<entity>:<action>` permissions within an organization. | Authorization | Group, Profile, Level | `Role`, `roleId`, `roles` table |
|
|
15
|
-
| **Resource** | The primary business entity managed within the domain core. | Core Domain | Item, Object, Record, Entity | `Resource`, `resourceId`, `resources` table |
|
|
16
|
-
| **Ledger Entry** | An immutable audit record detailing a financial or transactional state change. | Finance & Accounting | TransactionRow, MoneyLog, BillEntry | `LedgerEntry`, `ledgerEntryId`, `ledger_entries` table |
|
|
11
|
+
| *(No domain terms defined yet)* | *Define business meaning during Phase 1 Domain Discovery.* | *e.g. Core Domain* | *Synonyms strictly forbidden across code & UI.* | *Exact type, class, or table name.* |
|
|
17
12
|
|
|
18
13
|
---
|
|
19
14
|
|
package/lib/index.d.ts
CHANGED
|
@@ -31,30 +31,6 @@ export interface ScaffoldResult {
|
|
|
31
31
|
actions: string[];
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
export interface LogChangeOptions {
|
|
35
|
-
/** Short title describing the architectural change */
|
|
36
|
-
title: string;
|
|
37
|
-
/** Category of change (Architecture | Rule | Skill | Infrastructure | CLI | Knowledge Hub) */
|
|
38
|
-
category?: string;
|
|
39
|
-
/** Target file(s) affected by the change */
|
|
40
|
-
targetFiles?: string;
|
|
41
|
-
/** Architectural rationale for upstream template incorporation */
|
|
42
|
-
rationale?: string;
|
|
43
|
-
/** Detailed description of the change */
|
|
44
|
-
description?: string;
|
|
45
|
-
/** Working directory containing changes.md (default: process.cwd()) */
|
|
46
|
-
targetDir?: string;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export interface LogChangeResult {
|
|
50
|
-
/** Whether the log entry was successfully recorded */
|
|
51
|
-
success: boolean;
|
|
52
|
-
/** Absolute path to changes.md */
|
|
53
|
-
filePath: string;
|
|
54
|
-
/** Markdown entry text that was appended */
|
|
55
|
-
entry: string;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
34
|
export interface ValidateTargetOptions {
|
|
59
35
|
/** Custom template root directory */
|
|
60
36
|
templateDir?: string;
|
|
@@ -79,11 +55,6 @@ export interface CopyTemplateOptions {
|
|
|
79
55
|
*/
|
|
80
56
|
export function scaffold(options?: ScaffoldOptions): ScaffoldResult;
|
|
81
57
|
|
|
82
|
-
/**
|
|
83
|
-
* Appends a standardized upstream change entry to changes.md.
|
|
84
|
-
*/
|
|
85
|
-
export function logChange(options: LogChangeOptions): LogChangeResult;
|
|
86
|
-
|
|
87
58
|
/**
|
|
88
59
|
* Validates the target directory to ensure it is suitable for scaffolding.
|
|
89
60
|
*/
|
|
@@ -139,7 +110,6 @@ export const TEMPLATE_ITEMS: readonly string[];
|
|
|
139
110
|
|
|
140
111
|
declare const defaultExport: {
|
|
141
112
|
scaffold: typeof scaffold;
|
|
142
|
-
logChange: typeof logChange;
|
|
143
113
|
validateTarget: typeof validateTarget;
|
|
144
114
|
copyTemplate: typeof copyTemplate;
|
|
145
115
|
ensureSymlink: typeof ensureSymlink;
|
package/lib/scaffold.js
CHANGED
|
@@ -7,7 +7,6 @@ const cp = require('node:child_process');
|
|
|
7
7
|
const TEMPLATE_ITEMS = [
|
|
8
8
|
'AGENTS.md',
|
|
9
9
|
'memory.md',
|
|
10
|
-
'changes.md',
|
|
11
10
|
'README.md',
|
|
12
11
|
'docs',
|
|
13
12
|
'.agents',
|
|
@@ -227,53 +226,8 @@ function scaffold(options = {}) {
|
|
|
227
226
|
};
|
|
228
227
|
}
|
|
229
228
|
|
|
230
|
-
/**
|
|
231
|
-
* Appends a standardized upstream change entry to changes.md.
|
|
232
|
-
*/
|
|
233
|
-
function logChange(options = {}) {
|
|
234
|
-
const {
|
|
235
|
-
title,
|
|
236
|
-
category = 'Architecture',
|
|
237
|
-
targetFiles = 'docs/rules/',
|
|
238
|
-
rationale = 'Generic architectural enhancement',
|
|
239
|
-
description = '',
|
|
240
|
-
targetDir = process.cwd()
|
|
241
|
-
} = options;
|
|
242
|
-
|
|
243
|
-
if (!title || typeof title !== 'string' || !title.trim()) {
|
|
244
|
-
throw new Error('A change title is required to log an upstream change.');
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
const cleanTitle = title.trim();
|
|
248
|
-
const changesFilePath = path.join(path.resolve(targetDir), 'changes.md');
|
|
249
|
-
const today = new Date().toISOString().slice(0, 10);
|
|
250
|
-
|
|
251
|
-
const entry = `\n### [${today}] ${cleanTitle}\n` +
|
|
252
|
-
`- **Category:** ${category}\n` +
|
|
253
|
-
`- **Target File(s):** ${targetFiles}\n` +
|
|
254
|
-
`- **Rationale:** ${rationale}\n` +
|
|
255
|
-
`- **Description:** ${description || cleanTitle}\n` +
|
|
256
|
-
`- **Domain Filter Verification:** Verified 100% generic; purged of all project-specific business entities and models.\n`;
|
|
257
|
-
|
|
258
|
-
if (fs.existsSync(changesFilePath)) {
|
|
259
|
-
fs.appendFileSync(changesFilePath, entry, 'utf-8');
|
|
260
|
-
} else {
|
|
261
|
-
const initialHeader = `# Upstream Changes Ledger (\`changes.md\`)\n\n` +
|
|
262
|
-
`> **Core Purpose:** Record candidate improvements, generic architectural updates, defect post-mortems, and rule enhancements discovered in this workspace that should be incorporated into the upstream \`azcodr\` baseline template.\n\n` +
|
|
263
|
-
`---\n\n## Upstream Changes Log\n`;
|
|
264
|
-
fs.writeFileSync(changesFilePath, initialHeader + entry, 'utf-8');
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
return {
|
|
268
|
-
success: true,
|
|
269
|
-
filePath: changesFilePath,
|
|
270
|
-
entry
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
|
|
274
229
|
module.exports = {
|
|
275
230
|
scaffold,
|
|
276
|
-
logChange,
|
|
277
231
|
validateTarget,
|
|
278
232
|
copyTemplate,
|
|
279
233
|
ensureSymlink,
|
package/memory.md
CHANGED
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
|
|
9
9
|
- 📖 **[Living Ubiquitous Language Glossary](./docs/knowledge/ubiquitous_language.md)**: Authoritative, single-name domain vocabulary contract.
|
|
10
10
|
- 📜 **[Lightweight ADR Master Index](#adr-master-index)**: Summary of all architectural decisions and direct links to governing rules.
|
|
11
|
-
- 📝 **[Upstream Changes Ledger](./changes.md)**: Ledger of candidate improvements and generic patterns for upstream azcodr.
|
|
12
11
|
|
|
13
12
|
---
|
|
14
13
|
|
|
@@ -34,6 +33,7 @@
|
|
|
34
33
|
| **ADR-015** | Problem-First Architecture, Topology Scaffolding, Tipping Points & Nano-TDD | 2026-09-25 | ACCEPTED | [`clean_code.md`](./docs/rules/clean_code.md), [`domain_driven_design.md`](./docs/rules/domain_driven_design.md), [`test_driven_development.md`](./docs/rules/test_driven_development.md), [`lets-build`](./.agents/skills/lets-build/SKILL.md) |
|
|
35
34
|
| **ADR-016** | Elimination of Static Markdown Knowledge Graph | 2026-09-25 | ACCEPTED | [`clean_code.md`](./docs/rules/clean_code.md), [`continuous_learning.md`](./docs/rules/continuous_learning.md) |
|
|
36
35
|
| **ADR-017** | Progressive Rules Consolidation (DDD & GoF Patterns) | 2026-09-25 | ACCEPTED | [`domain_driven_design.md`](./docs/rules/domain_driven_design.md), [`design_patterns.md`](./docs/rules/design_patterns.md) |
|
|
36
|
+
| **ADR-018** | Elimination of Upstream Changes Ledger and Sync Tooling | 2026-09-25 | ACCEPTED | [`clean_code.md`](./docs/rules/clean_code.md), [`workspace_isolation.md`](./docs/rules/workspace_isolation.md) |
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
---
|
|
@@ -143,3 +143,13 @@
|
|
|
143
143
|
3. Streamline rule catalog across `AGENTS.md` and `README.md` to 45 lean, single-responsibility, non-overlapping rules.
|
|
144
144
|
- **Enforced In:** [`AGENTS.md`](./AGENTS.md), [`README.md`](./README.md), [`domain_driven_design.md`](./docs/rules/domain_driven_design.md), [`design_patterns.md`](./docs/rules/design_patterns.md).
|
|
145
145
|
|
|
146
|
+
#### ADR-018: Elimination of Upstream Changes Ledger and Upstream Sync Tooling
|
|
147
|
+
- **Date:** 2026-09-25 | **Status:** ACCEPTED
|
|
148
|
+
- **Context:** Maintaining a manual `changes.md` ledger duplicated state already captured across Git commit history and formal ADR records in `memory.md`. Furthermore, scaffolding `changes.md` into downstream derived projects contaminated them with meta-tooling baggage about the upstream template, violating Problem-First Architecture and Workspace Sovereignty. Accompanying CLI subcommands (`npx azcodr change`) and rule files (`upstream_synchronization.md`) added over 200 lines of accidental maintenance complexity.
|
|
149
|
+
- **Decision:**
|
|
150
|
+
1. Permanently delete `changes.md` and retire `docs/rules/upstream_synchronization.md`.
|
|
151
|
+
2. Remove `changes.md` from scaffolded `TEMPLATE_ITEMS` and package manifests.
|
|
152
|
+
3. Purge `logChange` functions, types, and CLI subcommands, restoring `azcodr` CLI as a clean, single-purpose project bootstrapper.
|
|
153
|
+
4. Standardize exclusively on Git commits for historical revision logs and `memory.md` for architectural decision records.
|
|
154
|
+
- **Enforced In:** [`AGENTS.md`](./AGENTS.md), [`README.md`](./README.md), [`lib/scaffold.js`](./lib/scaffold.js), [`bin/azcodr.js`](./bin/azcodr.js), [`memory.md`](./memory.md).
|
|
155
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "azcodr",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Enterprise Architecture & Agentic Engineering Starter Template",
|
|
5
5
|
"bin": {
|
|
6
6
|
"azcodr": "bin/azcodr.js"
|
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"lib",
|
|
20
20
|
"AGENTS.md",
|
|
21
21
|
"memory.md",
|
|
22
|
-
"changes.md",
|
|
23
22
|
"README.md",
|
|
24
23
|
"docs",
|
|
25
24
|
".agents",
|
package/changes.md
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
# Upstream Changes Ledger (`changes.md`)
|
|
2
|
-
|
|
3
|
-
> **Core Purpose:** Record candidate improvements, generic architectural updates, defect post-mortems, and rule enhancements discovered in this workspace that should be incorporated into the upstream `azcodr` baseline template. No automated git merging or external repo mutation is performed.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 1. Specification & Protocol
|
|
8
|
-
|
|
9
|
-
When an AI agent or engineer discovers a generic architectural improvement, bug fix, or rule refinement during project development, append an entry below using this atomic format:
|
|
10
|
-
|
|
11
|
-
```markdown
|
|
12
|
-
### [YYYY-MM-DD] <Title of Change>
|
|
13
|
-
- **Category:** Rule | Skill | Infrastructure | CLI | Knowledge Hub
|
|
14
|
-
- **Target File(s):** `docs/rules/...`, `.agents/skills/...`, etc.
|
|
15
|
-
- **Rationale:** Why this improvement is necessary or valuable across all enterprise projects.
|
|
16
|
-
- **Description:** Concise summary of the mutation or invariant added.
|
|
17
|
-
- **Domain Filter Verification:** Verified 100% generic; purged of all project-specific business entities and models.
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## 2. Upstream Changes Log
|
|
23
|
-
|
|
24
|
-
### [2026-09-25] Initialized npx Scaffolder CLI and npm Package
|
|
25
|
-
- **Category:** CLI & Infrastructure
|
|
26
|
-
- **Target File(s):** `bin/azcodr.js`, `lib/scaffold.js`, `package.json`, `tests/`
|
|
27
|
-
- **Rationale:** Eliminate manual `cp -r` copying; enable anyone to pull and scaffold the azcodr architecture template via `npx azcodr`.
|
|
28
|
-
- **Description:** Implemented zero-dependency Node.js CLI executable with Outside-In TDD, harness parity symlink generation, script execution bit setting, and full test suite passing with 100% agentic config validation.
|
|
29
|
-
- **Domain Filter Verification:** Verified 100% generic; no project-specific business models.
|
|
30
|
-
|
|
31
|
-
### [2026-09-25] Streamlined Upstream Sync Protocol to changes.md Ledger
|
|
32
|
-
- **Category:** Rule & Process
|
|
33
|
-
- **Target File(s):** `docs/rules/upstream_synchronization.md`, `changes.md`, `AGENTS.md`
|
|
34
|
-
- **Rationale:** Remove fragile git repo resolution and merge scripts; replace with atomic change logging in `changes.md`.
|
|
35
|
-
- **Description:** Retired `merge-ai` skill and removed machine-specific hardcoded paths. All upstream improvements are now recorded atomically in `changes.md`.
|
|
36
|
-
- **Domain Filter Verification:** Verified 100% generic.
|
|
37
|
-
|
|
38
|
-
### [2026-09-25] Harden CLI, achieve 100% test coverage gates, add multi-OS CI workflow, and TypeScript declarations
|
|
39
|
-
- **Category:** CLI
|
|
40
|
-
- **Target File(s):** bin/azcodr.js, lib/scaffold.js, lib/index.d.ts, .github/workflows/ci.yml
|
|
41
|
-
- **Rationale:** Fulfill 100.00% test coverage mandate, cross-platform CI matrix, and library type safety
|
|
42
|
-
- **Description:** Remediate gap assessment findings: add --dry-run and --silent flags, enforce 100.00% line/branch/function coverage gates, add GitHub Actions CI matrix across Node 18/20/22/24 and Linux/macOS/Windows, add .editorconfig template item, and export ambient TypeScript typings.
|
|
43
|
-
- **Domain Filter Verification:** Verified 100% generic; purged of all project-specific business entities and models.
|
|
44
|
-
|
|
45
|
-
### [2026-09-25] Resolve macOS/Windows Git Case-Collision and Cross-Version CI Matrix Coverage
|
|
46
|
-
- **Category:** Infrastructure & CI
|
|
47
|
-
- **Target File(s):** .gitignore, lib/scaffold.js, scripts/test_coverage.js, validate_agentic_configs.sh
|
|
48
|
-
- **Rationale:** Ensure flawless cross-platform and multi-version Node execution across macOS, Windows, and Linux on Node 18, 20, 22, 24.
|
|
49
|
-
- **Description:** Untracked agents.md from Git to prevent cyclic symlink overwrite on case-insensitive filesystems; hardened ensureSymlink with isSameCaseInsensitiveFile check; added cross-version test coverage runner script; updated npm test runner to use native discovery.
|
|
50
|
-
- **Domain Filter Verification:** Verified 100% generic; purged of all project-specific business entities and models.
|
|
51
|
-
|
|
52
|
-
### [2026-09-25] Problem-First Architecture, Evolutionary Tipping Points, and Incremental Nano-Cycle TDD
|
|
53
|
-
- **Category:** Architecture, Rule & Skill
|
|
54
|
-
- **Target File(s):** `AGENTS.md`, `docs/rules/clean_code.md`, `docs/rules/domain_driven_design.md`, `docs/rules/test_driven_development.md`, `.agents/skills/lets-build/SKILL.md`, `.agents/skills/lets-build/references/architecture_interview_matrix.md`, `.agents/skills/lets-build/scripts/bootstrap_workspace.sh`, `memory.md`
|
|
55
|
-
- **Rationale:** Eliminate tool-first bias ("Solution-in-Search-of-a-Problem"), stop accidental complexity (as seen in `force-dark-light` where Chrome extension received Kubernetes and OpenAPI specs), prevent AI-accelerated architectural drift, and halt the "Test-First Waterfall" batch-test anti-pattern.
|
|
56
|
-
- **Description:**
|
|
57
|
-
1. Enforced Problem Space vs Solution Space decoupling with zero tool bias.
|
|
58
|
-
2. Made scaffolding strictly topology-aware (Web SaaS, Browser Extension, Game/Engine, CLI, Library) with zero speculative bloat.
|
|
59
|
-
3. Codified Evolutionary Architecture, the 5 Architectural Tipping Points, and Kent Beck's "Refactor-Before-Add" protocol.
|
|
60
|
-
4. Codified Uncle Bob's Three Laws of TDD, banned batch-test dumps, and introduced the Incremental Nano-Cycle and Ping-Pong Pair Programming protocol.
|
|
61
|
-
- **Domain Filter Verification:** Verified 100% generic; applicable across any language, stack, and project topology.
|
|
62
|
-
|
|
63
|
-
### [2026-09-25] Permanent Removal of Static Markdown Knowledge Graph
|
|
64
|
-
- **Category:** Architecture & Knowledge Hub
|
|
65
|
-
- **Target File(s):** `docs/knowledge/knowledge_graph.md`, `AGENTS.md`, `memory.md`, `README.md`, `docs/rules/continuous_learning.md`
|
|
66
|
-
- **Rationale:** Static markdown Mermaid diagrams and entity models in template repositories suffer from maintenance drift, duplicate state from code/migrations, violate Problem-First by assuming a multi-tenant web backend, and waste prompt token budget.
|
|
67
|
-
- **Description:** Permanently eliminated `docs/knowledge/knowledge_graph.md`. Enforced code, type definitions, and versioned database migrations as the single source of truth for architectural topologies. Retained `docs/knowledge/ubiquitous_language.md` for lightweight living domain vocabulary contracts.
|
|
68
|
-
- **Domain Filter Verification:** Verified 100% generic; purged of all speculative and duplicate static models.
|
|
69
|
-
|
|
70
|
-
### [2026-09-25] Workspace Rules Consolidation & Redundancy Purge
|
|
71
|
-
- **Category:** Rule & Knowledge Hub
|
|
72
|
-
- **Target File(s):** `docs/rules/domain_driven_design.md`, `docs/rules/design_patterns.md`, `docs/rules/domain_expertise.md`, `docs/rules/gof_design_patterns_reference.md`, `AGENTS.md`, `README.md`, `memory.md`
|
|
73
|
-
- **Rationale:** Eliminate duplicate and fragmented rules to optimize agent attention window, consolidate domain invariants, and uphold strict Single Responsibility across progressive disclosure documentation.
|
|
74
|
-
- **Description:**
|
|
75
|
-
1. Merged business capability mapping and Aggregate Root gatekeeper invariants from `domain_expertise.md` directly into `domain_driven_design.md`. Removed redundant `domain_expertise.md`.
|
|
76
|
-
2. Integrated the complete 23 Gang of Four patterns catalog from `gof_design_patterns_reference.md` directly into `design_patterns.md`. Removed redundant `gof_design_patterns_reference.md`.
|
|
77
|
-
3. Reduced active progressive disclosure rules from 47 to 45 while preserving 100% domain coverage.
|
|
78
|
-
- **Domain Filter Verification:** Verified 100% generic; purged of all redundant files and circular links.
|
|
79
|
-
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# Upstream Baseline Synchronization & changes.md Ledger
|
|
2
|
-
|
|
3
|
-
> **Core Mandate:** Upstream template/baseline workspaces (`azcodr`) must remain strictly untouched during project development. When generic architectural improvements, rule refinements, or post-mortems are identified, record them solely into the `changes.md` ledger with zero automated repo merging or baseline contamination.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 1. The Baseline-Project Decoupling Principle
|
|
8
|
-
|
|
9
|
-
Workspaces operate under a clean, decoupled flow:
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
[Upstream Generic Baseline: azcodr]
|
|
13
|
-
│
|
|
14
|
-
▼ (Scaffolded via npx azcodr)
|
|
15
|
-
[Derived Project Workspace: my-app / others]
|
|
16
|
-
│
|
|
17
|
-
│ (Accumulates project code, specificities, and institutional lessons)
|
|
18
|
-
│
|
|
19
|
-
▼ (Record reusable improvements)
|
|
20
|
-
[Upstream Changes Ledger: changes.md]
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
- **Pristine Upstream Mandate:** Never edit, commit, or attempt automated git merges to an upstream baseline repository during routine project development, feature implementation, or bug fixes.
|
|
24
|
-
- **Ledger-Only Synchronization:** When generic architectural discoveries or defect post-mortems occur, document them cleanly in `changes.md` at the workspace root. No automated merge AI or remote repo synchronization is executed.
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## 2. Zero-Contamination Invariant (Generic vs. Specific)
|
|
29
|
-
|
|
30
|
-
When logging proposed changes into `changes.md`, enforce strict domain filtering:
|
|
31
|
-
|
|
32
|
-
| Element Category | Keep in Specific Project Workspace | Allow in changes.md for Upstream (`azcodr`) |
|
|
33
|
-
|---|---|---|
|
|
34
|
-
| **Domain Entities** | Concrete business models (`Order`, `Customer`, `Invoice`, etc.) | Abstract archetypes (`Entity`, `Aggregate`, `ValueObject`, `Resource`) |
|
|
35
|
-
| **Tech Stack / Adapters** | Concrete choices (Prisma, SQLite dev, PostgreSQL prod, Vite React) | Hexagonal Ports, abstract repository contracts, polyglot adapter guidance |
|
|
36
|
-
| **Architectural Rules** | Specific entity validation, specific route paths | Universal invariants (5-Phase Agile Lifecycle, SemVer trigger matrix, FK dropdowns) |
|
|
37
|
-
| **ADRs** | Stack decisions (`ADR-006: Target Tech Stack for Project`) | Generic architecture patterns (`ADR-007` to `ADR-010`) |
|
|
38
|
-
| **Test Suites** | Concrete domain tests (`order_domain.test.ts`, domain-specific suites) | Boundary smoke test pattern (`scripts/smoke_test.sh`), 100% coverage gate |
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## 3. Atomic changes.md Entry Protocol
|
|
43
|
-
|
|
44
|
-
Every upstream-bound proposal logged to `changes.md` must follow the standardized format:
|
|
45
|
-
|
|
46
|
-
```markdown
|
|
47
|
-
### [YYYY-MM-DD] <Title of Change>
|
|
48
|
-
- **Category:** Rule | Skill | Infrastructure | CLI | Knowledge Hub
|
|
49
|
-
- **Target File(s):** `docs/rules/...`, `.agents/skills/...`, etc.
|
|
50
|
-
- **Rationale:** Why this improvement is necessary or valuable across all enterprise projects.
|
|
51
|
-
- **Description:** Concise summary of the mutation or invariant added.
|
|
52
|
-
- **Domain Filter Verification:** Verified 100% generic; purged of all project-specific business entities and models.
|
|
53
|
-
```
|