adr-kit 0.12.0 → 0.14.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/README.md +62 -209
- package/README.zh.md +54 -174
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +40 -25
- package/dist/cli.js.map +1 -1
- package/dist/commands/archive.d.ts +2 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +62 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +5 -4
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/{accept.d.ts → implement.d.ts} +2 -2
- package/dist/commands/implement.d.ts.map +1 -0
- package/dist/commands/implement.js +42 -0
- package/dist/commands/implement.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +5 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/instructions.d.ts.map +1 -1
- package/dist/commands/instructions.js +24 -81
- package/dist/commands/instructions.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +9 -14
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/propose.d.ts.map +1 -1
- package/dist/commands/propose.js +9 -10
- package/dist/commands/propose.js.map +1 -1
- package/dist/commands/{decide.d.ts → record.d.ts} +2 -2
- package/dist/commands/record.d.ts.map +1 -0
- package/dist/commands/{decide.js → record.js} +6 -6
- package/dist/commands/{decide.js.map → record.js.map} +1 -1
- package/dist/commands/reject.d.ts +1 -1
- package/dist/commands/reject.d.ts.map +1 -1
- package/dist/commands/reject.js +24 -8
- package/dist/commands/reject.js.map +1 -1
- package/dist/commands/show.d.ts.map +1 -1
- package/dist/commands/show.js +2 -16
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +6 -17
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/supersede.d.ts.map +1 -1
- package/dist/commands/supersede.js +44 -10
- package/dist/commands/supersede.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +4 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.d.ts +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +11 -3
- package/dist/commands/validate.js.map +1 -1
- package/dist/core/adr.d.ts +22 -20
- package/dist/core/adr.d.ts.map +1 -1
- package/dist/core/adr.js +97 -14
- package/dist/core/adr.js.map +1 -1
- package/dist/core/archive-seal.d.ts +48 -0
- package/dist/core/archive-seal.d.ts.map +1 -0
- package/dist/core/archive-seal.js +122 -0
- package/dist/core/archive-seal.js.map +1 -0
- package/dist/core/cli-options.d.ts +2 -2
- package/dist/core/cli-options.d.ts.map +1 -1
- package/dist/core/cli-options.js +8 -6
- package/dist/core/cli-options.js.map +1 -1
- package/dist/core/config.d.ts +1 -1
- package/dist/core/git.d.ts +17 -0
- package/dist/core/git.d.ts.map +1 -1
- package/dist/core/git.js +50 -0
- package/dist/core/git.js.map +1 -1
- package/dist/core/graph-html.js +5 -5
- package/dist/core/graph-html.js.map +1 -1
- package/dist/core/graph.d.ts +2 -1
- package/dist/core/graph.d.ts.map +1 -1
- package/dist/core/graph.js +9 -4
- package/dist/core/graph.js.map +1 -1
- package/dist/core/repository.d.ts +3 -11
- package/dist/core/repository.d.ts.map +1 -1
- package/dist/core/repository.js +52 -136
- package/dist/core/repository.js.map +1 -1
- package/dist/core/templates.d.ts +6 -7
- package/dist/core/templates.d.ts.map +1 -1
- package/dist/core/templates.js +11 -12
- package/dist/core/templates.js.map +1 -1
- package/dist/core/tool-integrations.d.ts +24 -0
- package/dist/core/tool-integrations.d.ts.map +1 -1
- package/dist/core/tool-integrations.js +129 -423
- package/dist/core/tool-integrations.js.map +1 -1
- package/dist/core/validate.d.ts +20 -6
- package/dist/core/validate.d.ts.map +1 -1
- package/dist/core/validate.js +302 -90
- package/dist/core/validate.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/accept.d.ts.map +0 -1
- package/dist/commands/accept.js +0 -42
- package/dist/commands/accept.js.map +0 -1
- package/dist/commands/decide.d.ts.map +0 -1
package/dist/core/repository.js
CHANGED
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
|
|
2
2
|
import { basename, dirname, join, posix, relative, resolve } from 'node:path';
|
|
3
3
|
import { ADR_DIR, CONFIG_FILE, configPath } from './config.js';
|
|
4
|
+
import { emptyArchiveManifest, writeArchiveManifest } from './archive-seal.js';
|
|
4
5
|
import { parseAdrFile } from './adr.js';
|
|
5
|
-
/**
|
|
6
|
-
export const FOLDERS = ['
|
|
7
|
-
/**
|
|
8
|
-
* Ephemeral proposal drafts. Created lazily on the first `adrkit propose`,
|
|
9
|
-
* gitignored (init writes `adr/.gitignore`), never validated by `adrkit
|
|
10
|
-
* validate` and never durable until `accept` promotes one into decisions/.
|
|
11
|
-
*/
|
|
12
|
-
export const DRAFTS_DIR = '.drafts';
|
|
6
|
+
/** Lifecycle folders are the repository inventory. */
|
|
7
|
+
export const FOLDERS = ['proposed', 'implemented', 'rejected', 'archived'];
|
|
13
8
|
function initConfig(tools, workflows) {
|
|
14
9
|
// 列表的空格必须与 writeListConfig 里 yaml 库的发射格式逐字节一致
|
|
15
10
|
// (`[ a, b ]`,空为 `[]`),否则裸 update 会把 init 写的 config 重排一遍。
|
|
@@ -17,11 +12,11 @@ function initConfig(tools, workflows) {
|
|
|
17
12
|
// tools 始终作为顶层键输出:全注释的 YAML 文档会被解析为空,
|
|
18
13
|
// readConfig 的 isMap 检查会报 "top-level value must be a mapping"。
|
|
19
14
|
const toolsYaml = `tools: ${list(tools)}\n`;
|
|
20
|
-
// workflows
|
|
15
|
+
// workflows 仅在选择子集时输出:缺省即全部。
|
|
21
16
|
const workflowsYaml = workflows === undefined ? '' : `\n# Workflow subset written by adrkit init --workflows.\nworkflows: ${list(workflows)}\n`;
|
|
22
17
|
return `# ADR Kit configuration
|
|
23
18
|
# Fill in \`context\` and it is injected as a comment into every new
|
|
24
|
-
# proposal/decision
|
|
19
|
+
# proposal/decision template (adrkit propose / adrkit record).
|
|
25
20
|
# context: |
|
|
26
21
|
# Tech stack: TypeScript
|
|
27
22
|
# Conventions that decision records should respect.
|
|
@@ -39,79 +34,33 @@ ${toolsYaml}${workflowsYaml}
|
|
|
39
34
|
}
|
|
40
35
|
const INIT_README = `# Architecture Decision Records
|
|
41
36
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
| \`decisions/\` | Decisions, numbered sequentially, immutable history (accepted or superseded) |
|
|
50
|
-
| \`.drafts/\` | Proposal drafts, gitignored and ephemeral - promote one with \`adrkit accept\` or discard it with \`adrkit reject\` |
|
|
51
|
-
|
|
52
|
-
Never delete or modify a decision: retire one with \`adrkit supersede\` instead.
|
|
53
|
-
Deleting reuses its number, which silently breaks every \`ADR-N\` reference to it.
|
|
54
|
-
|
|
55
|
-
Rejection is recorded in a decision's \`Alternatives considered\` section, never
|
|
56
|
-
as a standalone record.
|
|
57
|
-
|
|
58
|
-
## Record format
|
|
59
|
-
|
|
60
|
-
Every record starts with a YAML front matter block:
|
|
61
|
-
|
|
62
|
-
\`\`\`markdown
|
|
63
|
-
---
|
|
64
|
-
status: accepted | superseded
|
|
65
|
-
date: YYYY-MM-DD
|
|
66
|
-
raised-by: human | agent
|
|
67
|
-
decided-by: human | agent
|
|
68
|
-
created: YYYY-MM-DD
|
|
69
|
-
commit: abc1234
|
|
70
|
-
tags: [frontend]
|
|
71
|
-
---
|
|
37
|
+
Records follow the lifecycle folders proposed/, implemented/, rejected/, and
|
|
38
|
+
archived/. A proposal is unshipped even when its direction has been settled.
|
|
39
|
+
Implemented records describe shipped decisions and receive stable ADR numbers.
|
|
40
|
+
Every formally rejected proposal remains in rejected/ with its reason.
|
|
41
|
+
Archived records are frozen history, not current authority. Each one is
|
|
42
|
+
sealed in adr/archived/MANIFEST.json; adrkit validate checks the seal, and
|
|
43
|
+
adrkit validate --base <git-ref> proves the archive only grows.
|
|
72
44
|
|
|
73
|
-
|
|
74
|
-
|
|
45
|
+
Never delete a numbered decision: its stable N may be referenced elsewhere.
|
|
46
|
+
Implemented records may refresh factual paths, symbols, and defaults, but a
|
|
47
|
+
changed choice needs a new record. Archive or supersede rather than erase it.
|
|
75
48
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
the decision was recorded against. \`created\` is the birth date, stamped once
|
|
81
|
-
and never re-stamped, so the time axis survives later lifecycle moves. The
|
|
82
|
-
\`raised-by\` records who put the decision on the table and \`decided-by\` records
|
|
83
|
-
whose judgment settled it: \`human\` when a person determined the direction —
|
|
84
|
-
they stated it, changed a proposal into what shipped, or you are recording one
|
|
85
|
-
they made earlier — \`agent\` when it came from the agent's own judgment,
|
|
86
|
-
including when a person only let it through. The two are independent: a person
|
|
87
|
-
may raise what the agent settles, and the agent may raise what a person
|
|
88
|
-
settles. \`decide\` and \`accept\` require the caller to declare both with
|
|
89
|
-
\`--raised-by\` and \`--decided-by\`, and the CLI neither infers nor verifies
|
|
90
|
-
either, so neither establishes who chose or authorized the decision. The CLI
|
|
91
|
-
writes them at those moves and preserves them when a decision is superseded.
|
|
92
|
-
When the writer cannot tell which value applies, ask the person before recording
|
|
93
|
-
rather than guessing. The record body is where the nuance lives: when an agent
|
|
94
|
-
proposed and a person redirected or approved the result, say so in
|
|
95
|
-
\`## Decision\` rather than trying to split the field.
|
|
96
|
-
Likewise, \`accepted\` means a recorded decision, not proof of human review.
|
|
97
|
-
Commit identity stays in git. Optional \`tags\` (kebab-case keywords) let
|
|
98
|
-
\`adrkit graph\` group and filter decisions by theme. Drafts (\`adr/.drafts/\`,
|
|
99
|
-
\`status: proposed\`) require \`Problem\`, \`Proposal\`, \`Alternatives considered\`,
|
|
100
|
-
\`Acceptance criteria\`, and \`Risks\`, and carry neither \`raised-by\` nor
|
|
101
|
-
\`decided-by\`; \`adrkit accept\`
|
|
102
|
-
promotes one into a decision, and \`adrkit reject\` discards it without leaving
|
|
103
|
-
a record.
|
|
49
|
+
The canonical header includes status, date, and created: YYYY-MM-DD (the
|
|
50
|
+
birth date, never re-stamped). Numbered records declare raised-by: human | agent
|
|
51
|
+
and decided-by: human | agent; these are provenance declarations, not proof
|
|
52
|
+
of approval. Optional tags: [frontend] classify records by theme.
|
|
104
53
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
\`--html\` for an offline interactive card tree). Render the whole set with
|
|
111
|
-
\`adrkit graph --html\`, an offline decision map that marks records
|
|
112
|
-
carrying a tree.
|
|
54
|
+
Use adrkit propose for unshipped work, adrkit implement after it ships, and
|
|
55
|
+
adrkit record for an already-shipped decision. Use adrkit reject with a reason
|
|
56
|
+
for a proposal that will not ship. A full replacement archives the old
|
|
57
|
+
implemented record through adrkit supersede; adrkit archive also retires
|
|
58
|
+
implemented guidance whose rationale is no longer needed in the active set.
|
|
113
59
|
|
|
114
|
-
Run
|
|
60
|
+
Run adrkit list to discover records. Read relevant implemented records in
|
|
61
|
+
full, check relevant proposed and rejected records, and consult archived
|
|
62
|
+
records only for history. Do not decide relevance by title alone.
|
|
63
|
+
Run adrkit validate to check the repository.
|
|
115
64
|
`;
|
|
116
65
|
export function initRepository(targetDir, tools = [], workflows) {
|
|
117
66
|
const root = resolve(targetDir);
|
|
@@ -131,12 +80,10 @@ export function initRepository(targetDir, tools = [], workflows) {
|
|
|
131
80
|
const config = configPath(root);
|
|
132
81
|
writeFileSync(config, initConfig(tools, workflows));
|
|
133
82
|
created.push(`${ADR_DIR}/${CONFIG_FILE}`);
|
|
134
|
-
//
|
|
135
|
-
//
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
writeFileSync(gitignore, `${DRAFTS_DIR}\n`);
|
|
139
|
-
created.push(`${ADR_DIR}/.gitignore`);
|
|
83
|
+
// The archive seal starts empty: archive and supersede append entries as
|
|
84
|
+
// records retire, and validate checks the manifest against archived bytes.
|
|
85
|
+
writeArchiveManifest(root, emptyArchiveManifest());
|
|
86
|
+
created.push(`${ADR_DIR}/archived/MANIFEST.json`);
|
|
140
87
|
const readme = join(adrRoot, 'README.md');
|
|
141
88
|
writeFileSync(readme, INIT_README);
|
|
142
89
|
created.push(`${ADR_DIR}/README.md`);
|
|
@@ -146,12 +93,10 @@ export function adrRoot(root) {
|
|
|
146
93
|
return join(root, ADR_DIR);
|
|
147
94
|
}
|
|
148
95
|
/**
|
|
149
|
-
* Physical directory name for a folder
|
|
150
|
-
* `.drafts` (dot-prefixed, gitignored) while the value carried on AdrRecord is
|
|
151
|
-
* the bare `drafts`.
|
|
96
|
+
* Physical directory name for a lifecycle folder.
|
|
152
97
|
*/
|
|
153
98
|
function folderDirName(folder) {
|
|
154
|
-
return folder
|
|
99
|
+
return folder;
|
|
155
100
|
}
|
|
156
101
|
export function folderPath(root, folder) {
|
|
157
102
|
return join(adrRoot(root), folderDirName(folder));
|
|
@@ -182,12 +127,15 @@ export function listRecords(root) {
|
|
|
182
127
|
const folderDelta = folderOrder(a.folder) - folderOrder(b.folder);
|
|
183
128
|
if (folderDelta !== 0)
|
|
184
129
|
return folderDelta;
|
|
185
|
-
if (a.
|
|
186
|
-
return
|
|
130
|
+
if (a.number !== undefined && b.number !== undefined)
|
|
131
|
+
return a.number - b.number;
|
|
187
132
|
return a.fileName.localeCompare(b.fileName);
|
|
188
133
|
});
|
|
189
134
|
return records;
|
|
190
135
|
}
|
|
136
|
+
export function listProposals(root) {
|
|
137
|
+
return listRecords(root).filter((record) => record.folder === 'proposed');
|
|
138
|
+
}
|
|
191
139
|
function fileNameMatchesQuery(fileName, needle) {
|
|
192
140
|
const bareName = fileName.replace(/\.md$/, '');
|
|
193
141
|
const slug = bareName.replace(/^\d{4}-\d{2}-\d{2}-/, '').replace(/^\d+-/, '');
|
|
@@ -216,7 +164,7 @@ function listRecordsForResolve(root, needle) {
|
|
|
216
164
|
}
|
|
217
165
|
catch (error) {
|
|
218
166
|
const bareName = entry.replace(/\.md$/, '');
|
|
219
|
-
const numberMatch = folder === '
|
|
167
|
+
const numberMatch = folder === 'implemented' || folder === 'archived' ? bareName.match(/^(\d+)-/) : null;
|
|
220
168
|
const isTarget = fileNameMatchesQuery(entry, needle) ||
|
|
221
169
|
(numberMatch !== null && numberMatch[1] === needle);
|
|
222
170
|
if (isTarget) {
|
|
@@ -243,7 +191,7 @@ export function resolveRecord(root, query) {
|
|
|
243
191
|
if (record.title === needle || `# ADR: ${record.title}` === needle) {
|
|
244
192
|
return true;
|
|
245
193
|
}
|
|
246
|
-
if (record.folder === '
|
|
194
|
+
if (record.folder === 'implemented' || record.folder === 'archived') {
|
|
247
195
|
if (String(record.number ?? 0) === needle) {
|
|
248
196
|
return true;
|
|
249
197
|
}
|
|
@@ -266,7 +214,7 @@ export function resolveRecord(root, query) {
|
|
|
266
214
|
export function nextDecisionNumber(root) {
|
|
267
215
|
let max = 0;
|
|
268
216
|
for (const record of listRecords(root)) {
|
|
269
|
-
if (record.folder === '
|
|
217
|
+
if ((record.folder === 'implemented' || record.folder === 'archived') && (record.number ?? 0) > max) {
|
|
270
218
|
max = record.number ?? 0;
|
|
271
219
|
}
|
|
272
220
|
}
|
|
@@ -274,9 +222,7 @@ export function nextDecisionNumber(root) {
|
|
|
274
222
|
}
|
|
275
223
|
export function writeRecord(root, folder, fileName, content) {
|
|
276
224
|
const path = join(folderPath(root, folder), fileName);
|
|
277
|
-
//
|
|
278
|
-
// first propose, or a decisions/ that was removed). Creating it on demand
|
|
279
|
-
// keeps every lifecycle command correct without eager directory ceremony.
|
|
225
|
+
// A removed lifecycle folder is recreated on write.
|
|
280
226
|
mkdirSync(dirname(path), { recursive: true });
|
|
281
227
|
writeFileSync(path, content);
|
|
282
228
|
return path;
|
|
@@ -284,46 +230,17 @@ export function writeRecord(root, folder, fileName, content) {
|
|
|
284
230
|
export function removeRecord(record) {
|
|
285
231
|
rmSync(record.path);
|
|
286
232
|
}
|
|
287
|
-
|
|
288
|
-
export function draftsPath(root) {
|
|
289
|
-
return join(adrRoot(root), DRAFTS_DIR);
|
|
290
|
-
}
|
|
291
|
-
export function listDrafts(root) {
|
|
292
|
-
const dir = draftsPath(root);
|
|
293
|
-
if (!existsSync(dir))
|
|
294
|
-
return [];
|
|
295
|
-
const drafts = [];
|
|
296
|
-
for (const entry of readdirSync(dir)) {
|
|
297
|
-
if (!entry.endsWith('.md'))
|
|
298
|
-
continue;
|
|
299
|
-
const path = join(dir, entry);
|
|
300
|
-
try {
|
|
301
|
-
const draft = parseAdrFile(path);
|
|
302
|
-
draft.folder = 'drafts';
|
|
303
|
-
drafts.push(draft);
|
|
304
|
-
}
|
|
305
|
-
catch (error) {
|
|
306
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
307
|
-
throw new Error(`failed to parse ${relative(root, path)}: ${message}`);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
drafts.sort((a, b) => a.fileName.localeCompare(b.fileName));
|
|
311
|
-
return drafts;
|
|
312
|
-
}
|
|
313
|
-
function draftMatchesQuery(draft, needle) {
|
|
314
|
-
if (fileNameMatchesQuery(draft.fileName, needle))
|
|
315
|
-
return true;
|
|
316
|
-
return draft.title === needle || `# ADR: ${draft.title}` === needle;
|
|
317
|
-
}
|
|
318
|
-
export function resolveDraft(root, query) {
|
|
233
|
+
export function resolveProposed(root, query) {
|
|
319
234
|
const needle = query.trim();
|
|
320
|
-
const
|
|
321
|
-
|
|
235
|
+
const candidates = listRecords(root).filter((record) => record.folder === 'proposed' &&
|
|
236
|
+
(fileNameMatchesQuery(record.fileName, needle) ||
|
|
237
|
+
record.title === needle ||
|
|
238
|
+
`# ADR: ${record.title}` === needle));
|
|
322
239
|
if (candidates.length === 0) {
|
|
323
|
-
throw new Error(`no
|
|
240
|
+
throw new Error(`no proposal matches "${query}"`);
|
|
324
241
|
}
|
|
325
242
|
if (candidates.length > 1) {
|
|
326
|
-
const paths = candidates.map((
|
|
243
|
+
const paths = candidates.map((record) => relative(root, record.path)).join(', ');
|
|
327
244
|
throw new Error(`"${query}" is ambiguous; matches: ${paths}`);
|
|
328
245
|
}
|
|
329
246
|
return candidates[0];
|
|
@@ -332,7 +249,7 @@ export function readRecord(record) {
|
|
|
332
249
|
return readFileSync(record.path, 'utf8');
|
|
333
250
|
}
|
|
334
251
|
export function displayName(record) {
|
|
335
|
-
if (record.folder === '
|
|
252
|
+
if ((record.folder === 'implemented' || record.folder === 'archived') && Number.isInteger(record.number)) {
|
|
336
253
|
const titleWithoutNumber = record.title.replace(/^\d+\s+/, '');
|
|
337
254
|
return `[${record.number}] ${titleWithoutNumber}`;
|
|
338
255
|
}
|
|
@@ -340,8 +257,7 @@ export function displayName(record) {
|
|
|
340
257
|
}
|
|
341
258
|
export function relativePath(record) {
|
|
342
259
|
// 始终输出 POSIX 风格路径:CLI 输出是用户可见文本,Windows 上也要
|
|
343
|
-
//
|
|
344
|
-
// 拼接保持一致,且测试断言跨平台稳定)。
|
|
260
|
+
// CLI paths remain POSIX-style on every host.
|
|
345
261
|
return posix.join(ADR_DIR, folderDirName(record.folder), basename(record.path));
|
|
346
262
|
}
|
|
347
263
|
//# sourceMappingURL=repository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/core/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAkC,MAAM,UAAU,CAAC;AAExE,
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/core/repository.ts"],"names":[],"mappings":"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"}
|
package/dist/core/templates.d.ts
CHANGED
|
@@ -3,8 +3,7 @@ import { type AdrRecord, type DecidedBy, type RaisedBy } from './adr.js';
|
|
|
3
3
|
type FrontMatterValue = string | number | string[];
|
|
4
4
|
/**
|
|
5
5
|
* Render a YAML front matter block. Fields are written in the canonical
|
|
6
|
-
* order
|
|
7
|
-
* reason, tags); only the fields
|
|
6
|
+
* order from FRONT_MATTER_ORDER; only the fields
|
|
8
7
|
* present in `fields` are emitted.
|
|
9
8
|
*/
|
|
10
9
|
export declare function frontMatter(fields: Record<string, FrontMatterValue>): string;
|
|
@@ -16,20 +15,20 @@ export declare function proposalTemplate(title: string, context?: string): strin
|
|
|
16
15
|
*/
|
|
17
16
|
export declare function decisionTemplate(number: number, title: string, context: string | undefined, commit: string | undefined, decidedBy: DecidedBy, raisedBy: RaisedBy): string;
|
|
18
17
|
/**
|
|
19
|
-
* Convert a
|
|
18
|
+
* Convert a proposal into an implemented decision using the mechanical
|
|
20
19
|
* rewrite the format requires: Proposal becomes Decision, and the
|
|
21
20
|
* acceptance criteria and risks are folded into Consequences. `commit` anchors
|
|
22
21
|
* the decision to the code state it was recorded against.
|
|
23
22
|
*
|
|
24
23
|
* `decidedBy` is the declaration made for the promoted decision, not the
|
|
25
|
-
*
|
|
26
|
-
* `decided-by` key written by hand into a
|
|
24
|
+
* proposal's: the front matter below is rebuilt from a fixed field map, so a
|
|
25
|
+
* `decided-by` key written by hand into a proposal has no path into the decision.
|
|
27
26
|
* It is required for the same reason the skeleton requires it: every durable
|
|
28
27
|
* record has to name where the choice came from.
|
|
29
28
|
*/
|
|
30
29
|
export declare function proposalToDecision(proposal: AdrRecord, number: number, commit: string | undefined, decidedBy: DecidedBy, raisedBy: RaisedBy): string;
|
|
31
30
|
/**
|
|
32
|
-
* Proposal sections that have no place in an
|
|
31
|
+
* Proposal sections that have no place in an implemented decision and would be
|
|
33
32
|
* silently discarded by `proposalToDecision`. Only proposal-era leftovers
|
|
34
33
|
* (for example `Plan`, `Migration plan`) qualify; every other extra section
|
|
35
34
|
* is carried through the rewrite. Callers should surface these so a
|
|
@@ -41,7 +40,7 @@ export declare function droppedSections(proposal: AdrRecord): string[];
|
|
|
41
40
|
* block, merge `patch` over it, and re-emit the fields in canonical order.
|
|
42
41
|
* Supersede stamps only the retiring record and its immediate successor link;
|
|
43
42
|
* earlier records keep their historical links when the chain grows.
|
|
44
|
-
* Every
|
|
43
|
+
* Every lifecycle move (implement, reject, archive, supersede) must stamp the date so
|
|
45
44
|
* the front matter always reflects the current status; the Markdown body is
|
|
46
45
|
* left untouched. Only canonical fields survive: a key outside
|
|
47
46
|
* `FRONT_MATTER_ORDER` is dropped rather than copied through, because writing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,QAAQ,EACd,MAAM,UAAU,CAAC;AAoClB,0DAA0D;AAC1D,KAAK,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAEnD
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,QAAQ,EACd,MAAM,UAAU,CAAC;AAoClB,0DAA0D;AAC1D,KAAK,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM,CAO5E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAyBxE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,GACjB,MAAM,CA6BR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,GACjB,MAAM,CAgER;AAMD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,GAAG,MAAM,EAAE,CAI7D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM,CAoBnG"}
|
package/dist/core/templates.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { parse, stringify } from 'yaml';
|
|
2
2
|
import { FRONT_MATTER_ORDER, PROPOSAL_ERA_HEADINGS, section, todayStamp, } from './adr.js';
|
|
3
|
-
/** Proposal sections that survive the mechanical
|
|
3
|
+
/** Proposal sections that survive the mechanical implementation rewrite. */
|
|
4
4
|
const PRESERVED_SECTIONS = [
|
|
5
5
|
'Problem',
|
|
6
6
|
'Proposal',
|
|
@@ -9,7 +9,7 @@ const PRESERVED_SECTIONS = [
|
|
|
9
9
|
'Risks',
|
|
10
10
|
];
|
|
11
11
|
/**
|
|
12
|
-
* Proposal-era leftovers the
|
|
12
|
+
* Proposal-era leftovers the implementation rewrite cannot fold anywhere. The full
|
|
13
13
|
* PROPOSAL_ERA_HEADINGS set is wider (it also names Proposal/Acceptance
|
|
14
14
|
* criteria/Risks, which the rewrite folds into Decision/Consequences); only
|
|
15
15
|
* these headings are genuinely dropped, with a warning.
|
|
@@ -17,7 +17,7 @@ const PRESERVED_SECTIONS = [
|
|
|
17
17
|
const DROPPED_SECTION_HEADINGS = PROPOSAL_ERA_HEADINGS.filter((heading) => !PRESERVED_SECTIONS.includes(heading));
|
|
18
18
|
/**
|
|
19
19
|
* 把 config.yaml 的 context 注入模板:放在标题块之后、第一个 section 之前。
|
|
20
|
-
* 解析器忽略游离文本(current 为 null 时不收集),
|
|
20
|
+
* 解析器忽略游离文本(current 为 null 时不收集),implement 的机械改写也会
|
|
21
21
|
* 丢弃它。注释只在草案期可见,正是写作者需要项目上下文的时刻。
|
|
22
22
|
*/
|
|
23
23
|
function contextBlock(context) {
|
|
@@ -32,8 +32,7 @@ ${text}
|
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* Render a YAML front matter block. Fields are written in the canonical
|
|
35
|
-
* order
|
|
36
|
-
* reason, tags); only the fields
|
|
35
|
+
* order from FRONT_MATTER_ORDER; only the fields
|
|
37
36
|
* present in `fields` are emitted.
|
|
38
37
|
*/
|
|
39
38
|
export function frontMatter(fields) {
|
|
@@ -78,7 +77,7 @@ ${contextBlock(context)}## Problem
|
|
|
78
77
|
*/
|
|
79
78
|
export function decisionTemplate(number, title, context, commit, decidedBy, raisedBy) {
|
|
80
79
|
const fields = {
|
|
81
|
-
status: '
|
|
80
|
+
status: 'implemented',
|
|
82
81
|
date: todayStamp(),
|
|
83
82
|
created: todayStamp(),
|
|
84
83
|
'raised-by': raisedBy,
|
|
@@ -108,14 +107,14 @@ ${contextBlock(context)}## Problem
|
|
|
108
107
|
`;
|
|
109
108
|
}
|
|
110
109
|
/**
|
|
111
|
-
* Convert a
|
|
110
|
+
* Convert a proposal into an implemented decision using the mechanical
|
|
112
111
|
* rewrite the format requires: Proposal becomes Decision, and the
|
|
113
112
|
* acceptance criteria and risks are folded into Consequences. `commit` anchors
|
|
114
113
|
* the decision to the code state it was recorded against.
|
|
115
114
|
*
|
|
116
115
|
* `decidedBy` is the declaration made for the promoted decision, not the
|
|
117
|
-
*
|
|
118
|
-
* `decided-by` key written by hand into a
|
|
116
|
+
* proposal's: the front matter below is rebuilt from a fixed field map, so a
|
|
117
|
+
* `decided-by` key written by hand into a proposal has no path into the decision.
|
|
119
118
|
* It is required for the same reason the skeleton requires it: every durable
|
|
120
119
|
* record has to name where the choice came from.
|
|
121
120
|
*/
|
|
@@ -142,7 +141,7 @@ export function proposalToDecision(proposal, number, commit, decidedBy, raisedBy
|
|
|
142
141
|
const passthrough = proposal.sections.filter((candidate) => !PRESERVED_SECTIONS.includes(candidate.heading) &&
|
|
143
142
|
!DROPPED_SECTION_HEADINGS.includes(candidate.heading));
|
|
144
143
|
const fields = {
|
|
145
|
-
status: '
|
|
144
|
+
status: 'implemented',
|
|
146
145
|
date: todayStamp(),
|
|
147
146
|
// The decision inherits the proposal's birth date: created is stamped
|
|
148
147
|
// once, at propose time, and survives the promotion.
|
|
@@ -184,7 +183,7 @@ function sectionBody(record, heading) {
|
|
|
184
183
|
return section(record, heading)?.trim() ?? '';
|
|
185
184
|
}
|
|
186
185
|
/**
|
|
187
|
-
* Proposal sections that have no place in an
|
|
186
|
+
* Proposal sections that have no place in an implemented decision and would be
|
|
188
187
|
* silently discarded by `proposalToDecision`. Only proposal-era leftovers
|
|
189
188
|
* (for example `Plan`, `Migration plan`) qualify; every other extra section
|
|
190
189
|
* is carried through the rewrite. Callers should surface these so a
|
|
@@ -200,7 +199,7 @@ export function droppedSections(proposal) {
|
|
|
200
199
|
* block, merge `patch` over it, and re-emit the fields in canonical order.
|
|
201
200
|
* Supersede stamps only the retiring record and its immediate successor link;
|
|
202
201
|
* earlier records keep their historical links when the chain grows.
|
|
203
|
-
* Every
|
|
202
|
+
* Every lifecycle move (implement, reject, archive, supersede) must stamp the date so
|
|
204
203
|
* the front matter always reflects the current status; the Markdown body is
|
|
205
204
|
* left untouched. Only canonical fields survive: a key outside
|
|
206
205
|
* `FRONT_MATTER_ORDER` is dropped rather than copied through, because writing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,OAAO,EACP,UAAU,GAIX,MAAM,UAAU,CAAC;AAElB,
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,4 +42,28 @@ export declare function removeToolIntegrations(root: string, keys: string[]): st
|
|
|
42
42
|
*/
|
|
43
43
|
export declare function removeWorkflowIntegrations(root: string, tools: IntegrationTarget[], workflows: string[]): void;
|
|
44
44
|
export declare function integrationSummary(root: string, created: ToolIntegration[]): string[];
|
|
45
|
+
/** Heading of the standing-orders section the init workflow asks agents to paste. */
|
|
46
|
+
export declare const STANDING_ORDERS_HEADING = "## Reading architecture decisions";
|
|
47
|
+
/**
|
|
48
|
+
* A distinctive sentence from the section body. The init workflow allows an
|
|
49
|
+
* agent to "update an equivalent section", so a section with a reworked
|
|
50
|
+
* heading still counts; this phrase is what makes that honest instead of a
|
|
51
|
+
* heading-only match.
|
|
52
|
+
*/
|
|
53
|
+
export declare const STANDING_ORDERS_RULE = "Record an ADR when an architectural choice";
|
|
54
|
+
/**
|
|
55
|
+
* The agent instruction file (AGENTS.md, then CLAUDE.md) that carries the
|
|
56
|
+
* standing-orders section, or undefined when neither does. Reading only —
|
|
57
|
+
* the files belong to the user, and the CLI never rewrites them.
|
|
58
|
+
*/
|
|
59
|
+
export declare function standingOrdersFile(root: string): string | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* The note for init/update output when no instruction file carries the
|
|
62
|
+
* standing orders. Integration files being installed is what makes the
|
|
63
|
+
* paste step meaningful, so an empty selection (an explicit `--tools none`
|
|
64
|
+
* opt-out) stays quiet. The pointer is derived from what was actually
|
|
65
|
+
* installed: a `--workflows` subset without the init workflow cannot name a
|
|
66
|
+
* file that does not exist.
|
|
67
|
+
*/
|
|
68
|
+
export declare function standingOrdersNote(root: string, integrations: ToolIntegration[]): string | undefined;
|
|
45
69
|
//# sourceMappingURL=tool-integrations.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-integrations.d.ts","sourceRoot":"","sources":["../../src/core/tool-integrations.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAapD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAID,eAAO,MAAM,SAAS,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"tool-integrations.d.ts","sourceRoot":"","sources":["../../src/core/tool-integrations.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAapD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAID,eAAO,MAAM,SAAS,EAAE,QAAQ,EA8H/B,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,cAAc,EAAE,MAAM,EAElC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAkBlE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,EAAE,CAqBzE;AAaD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,iBAAiB,EAAE,EAC1B,SAAS,GAAE,MAAM,EAAmB,GACnC,eAAe,EAAE,CAgCnB;AAwBD,yEAAyE;AACzE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEjE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAyB7E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,iBAAiB,EAAE,EAC1B,SAAS,EAAE,MAAM,EAAE,GAClB,IAAI,CAeN;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CAErF;AAED,qFAAqF;AACrF,eAAO,MAAM,uBAAuB,sCAAsC,CAAC;AAE3E;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,+CAA+C,CAAC;AAEjF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYnE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,eAAe,EAAE,GAC9B,MAAM,GAAG,SAAS,CAcpB"}
|