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/cli.js
CHANGED
|
@@ -3,10 +3,11 @@ import { pathToFileURL } from 'node:url';
|
|
|
3
3
|
import { VERSION } from './version.js';
|
|
4
4
|
import { isDecidedBy, isRaisedBy } from './core/adr.js';
|
|
5
5
|
import { unsupportedOptions } from './core/cli-options.js';
|
|
6
|
-
import {
|
|
6
|
+
import { archiveCommand } from './commands/archive.js';
|
|
7
7
|
import { completionCommand } from './commands/completion.js';
|
|
8
8
|
import { configCommand } from './commands/config.js';
|
|
9
|
-
import {
|
|
9
|
+
import { recordCommand } from './commands/record.js';
|
|
10
|
+
import { implementCommand } from './commands/implement.js';
|
|
10
11
|
import { graphCommand } from './commands/graph.js';
|
|
11
12
|
import { initCommand } from './commands/init.js';
|
|
12
13
|
import { instructionsCommand } from './commands/instructions.js';
|
|
@@ -21,9 +22,9 @@ import { updateCommand } from './commands/update.js';
|
|
|
21
22
|
import { validateCommand } from './commands/validate.js';
|
|
22
23
|
const HELP = `adrkit ${VERSION} - A lightweight ADR workflow for humans and agents
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
Records live in adr/proposed/, adr/implemented/, adr/rejected/, or adr/archived/.
|
|
26
|
+
An unshipped proposal stays proposed until implementation. record and
|
|
27
|
+
implement require two declarations. --raised-by records who put the decision on
|
|
27
28
|
the table; --decided-by records whose judgment settled it: human when a person
|
|
28
29
|
determined the direction (they stated it, changed a proposal into what shipped,
|
|
29
30
|
or you are recording one they made earlier), agent when it came from the
|
|
@@ -33,18 +34,20 @@ infers nor verifies either.
|
|
|
33
34
|
Usage:
|
|
34
35
|
adrkit init [path] [--tools <list>] [--workflows <list>]
|
|
35
36
|
Initialize an ADR Kit repository
|
|
36
|
-
adrkit
|
|
37
|
-
Record
|
|
38
|
-
adrkit propose <title> Create an
|
|
39
|
-
adrkit
|
|
40
|
-
|
|
41
|
-
adrkit reject <name>
|
|
42
|
-
adrkit
|
|
43
|
-
adrkit
|
|
44
|
-
adrkit
|
|
37
|
+
adrkit record <title> --raised-by <human|agent> --decided-by <human|agent>
|
|
38
|
+
Record an already-shipped decision
|
|
39
|
+
adrkit propose <title> Create an unshipped proposal
|
|
40
|
+
adrkit implement <name> --raised-by <human|agent> --decided-by <human|agent>
|
|
41
|
+
Mark shipped proposal implemented; assign number
|
|
42
|
+
adrkit reject <name> --reason <reason> Reject and retain a proposal
|
|
43
|
+
adrkit archive <name> --reason <reason> Retire an implemented record
|
|
44
|
+
adrkit supersede <name> --by <name> Replace and archive an implemented decision
|
|
45
|
+
adrkit list List all lifecycle records
|
|
46
|
+
adrkit show <name> Show a record
|
|
45
47
|
adrkit status Show lifecycle counts and validity
|
|
46
48
|
adrkit instructions Print the next workflow step
|
|
47
|
-
adrkit validate [name] [--all]
|
|
49
|
+
adrkit validate [name] [--all] [--base <git-ref>]
|
|
50
|
+
Validate one record or the whole repo
|
|
48
51
|
adrkit update [--tools <list>] [--workflows <list>]
|
|
49
52
|
Rewrite AI tool integrations
|
|
50
53
|
adrkit config Print the current configuration
|
|
@@ -75,6 +78,7 @@ export function main(argv) {
|
|
|
75
78
|
tokens: true,
|
|
76
79
|
options: {
|
|
77
80
|
all: { type: 'boolean', default: false },
|
|
81
|
+
base: { type: 'string' },
|
|
78
82
|
by: { type: 'string' },
|
|
79
83
|
'decided-by': { type: 'string' },
|
|
80
84
|
'raised-by': { type: 'string' },
|
|
@@ -103,11 +107,11 @@ export function main(argv) {
|
|
|
103
107
|
const command = positionals[0] ?? '';
|
|
104
108
|
const rest = positionals.slice(1);
|
|
105
109
|
try {
|
|
106
|
-
// Only
|
|
110
|
+
// Only record and implement assign provenance. Anywhere else the flags are a
|
|
107
111
|
// mistake, not something to ignore, and this has to run before the switch
|
|
108
112
|
// so a non-recording command never reaches the required-declaration check.
|
|
109
113
|
for (const flag of ['decided-by', 'raised-by']) {
|
|
110
|
-
if (values[flag] !== undefined && command !== '
|
|
114
|
+
if (values[flag] !== undefined && command !== 'record' && command !== 'implement') {
|
|
111
115
|
throw new Error(`adrkit ${command.length > 0 ? command : '(no command)'} does not take --${flag}`);
|
|
112
116
|
}
|
|
113
117
|
}
|
|
@@ -145,19 +149,24 @@ export function main(argv) {
|
|
|
145
149
|
console.log(proposeCommand(rest[0], process.cwd()));
|
|
146
150
|
return;
|
|
147
151
|
}
|
|
148
|
-
case '
|
|
149
|
-
requireTitle(rest, '
|
|
150
|
-
console.log(
|
|
152
|
+
case 'record': {
|
|
153
|
+
requireTitle(rest, 'record');
|
|
154
|
+
console.log(recordCommand(rest[0], process.cwd(), requireDecidedBy(values['decided-by']), requireRaisedBy(values['raised-by'])));
|
|
151
155
|
return;
|
|
152
156
|
}
|
|
153
|
-
case '
|
|
154
|
-
requireTitle(rest, '
|
|
155
|
-
console.log(
|
|
157
|
+
case 'implement': {
|
|
158
|
+
requireTitle(rest, 'implement');
|
|
159
|
+
console.log(implementCommand(rest[0], process.cwd(), requireDecidedBy(values['decided-by']), requireRaisedBy(values['raised-by'])));
|
|
156
160
|
return;
|
|
157
161
|
}
|
|
158
162
|
case 'reject': {
|
|
159
163
|
requireTitle(rest, 'reject');
|
|
160
|
-
console.log(rejectCommand(rest[0], values.reason, process.cwd()));
|
|
164
|
+
console.log(rejectCommand(rest[0], requireReason(values.reason, 'reject'), process.cwd()));
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
case 'archive': {
|
|
168
|
+
requireTitle(rest, 'archive');
|
|
169
|
+
console.log(archiveCommand(rest[0], requireReason(values.reason, 'archive'), process.cwd()));
|
|
161
170
|
return;
|
|
162
171
|
}
|
|
163
172
|
case 'supersede': {
|
|
@@ -226,7 +235,7 @@ export function main(argv) {
|
|
|
226
235
|
return;
|
|
227
236
|
}
|
|
228
237
|
case 'validate': {
|
|
229
|
-
const result = validateCommand(process.cwd(), values.all ? undefined : rest[0]);
|
|
238
|
+
const result = validateCommand(process.cwd(), values.all ? undefined : rest[0], values.base);
|
|
230
239
|
console.log(result.output);
|
|
231
240
|
if (result.valid === false)
|
|
232
241
|
process.exitCode = 1;
|
|
@@ -247,6 +256,12 @@ function requireTitle(rest, command) {
|
|
|
247
256
|
throw new Error(`${command} requires a title or name`);
|
|
248
257
|
}
|
|
249
258
|
}
|
|
259
|
+
function requireReason(value, command) {
|
|
260
|
+
if (value === undefined || value.trim().length === 0) {
|
|
261
|
+
throw new Error(`${command} requires --reason <reason>`);
|
|
262
|
+
}
|
|
263
|
+
return value;
|
|
264
|
+
}
|
|
250
265
|
/**
|
|
251
266
|
* `decided-by` is a declaration of where the choice came from, so the CLI asks
|
|
252
267
|
* for it instead of guessing: no environment, terminal, or agent marker can
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AAiBA,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAoDjF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { existsSync, rmSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { todayStamp } from '../core/adr.js';
|
|
4
|
+
import { appendSeal, ARCHIVED_DIR, driftedSeals, MANIFEST_FILE, readArchiveManifest, sealBytes, writeArchiveManifest, } from '../core/archive-seal.js';
|
|
5
|
+
import { ADR_DIR, requireRoot } from '../core/config.js';
|
|
6
|
+
import { formatIssues, validateRecord } from '../core/validate.js';
|
|
7
|
+
import { folderPath, readRecord, removeRecord, resolveRecord, writeRecord } from '../core/repository.js';
|
|
8
|
+
import { stampLifecycleMove } from '../core/templates.js';
|
|
9
|
+
export function archiveCommand(query, reason, cwd) {
|
|
10
|
+
const root = requireRoot(cwd);
|
|
11
|
+
const record = resolveRecord(root, query);
|
|
12
|
+
if (record.folder !== 'implemented' || record.status !== 'implemented') {
|
|
13
|
+
throw new Error(`"${query}" must be an implemented decision`);
|
|
14
|
+
}
|
|
15
|
+
if (reason.trim().length === 0)
|
|
16
|
+
throw new Error('archive requires a non-empty --reason');
|
|
17
|
+
if (record.frontMatterExtras?.length) {
|
|
18
|
+
throw new Error(`"${query}" has unknown front matter field(s): ${record.frontMatterExtras.join(', ')}`);
|
|
19
|
+
}
|
|
20
|
+
// Seal only a record that validates: the archive is frozen and its seal
|
|
21
|
+
// forbids repairing the bytes, so moving an invalid body in is permanent.
|
|
22
|
+
const recordIssues = validateRecord(root, record);
|
|
23
|
+
if (recordIssues.length > 0) {
|
|
24
|
+
throw new Error(`"${query}" is not valid; fix it before archiving:\n${formatIssues(recordIssues)}`);
|
|
25
|
+
}
|
|
26
|
+
if (existsSync(join(folderPath(root, 'archived'), record.fileName))) {
|
|
27
|
+
throw new Error(`archived record already exists: adr/archived/${record.fileName}`);
|
|
28
|
+
}
|
|
29
|
+
// Preflight the manifest before anything moves: archiving appends exactly
|
|
30
|
+
// one seal, so a missing or malformed manifest fails while the record is
|
|
31
|
+
// still safely in implemented/. A duplicate seal would launder changed
|
|
32
|
+
// archived bytes, so it is refused the same way.
|
|
33
|
+
const manifest = readArchiveManifest(root);
|
|
34
|
+
if (manifest === undefined) {
|
|
35
|
+
throw new Error(`missing ${ADR_DIR}/${ARCHIVED_DIR}/${MANIFEST_FILE}; the archive manifest must exist before archiving`);
|
|
36
|
+
}
|
|
37
|
+
if (manifest.entries.some((entry) => entry.path === record.fileName)) {
|
|
38
|
+
throw new Error(`the archive manifest already seals adr/archived/${record.fileName}`);
|
|
39
|
+
}
|
|
40
|
+
const drift = driftedSeals(root, manifest);
|
|
41
|
+
if (drift.length > 0) {
|
|
42
|
+
throw new Error(`the archive is inconsistent; fix it before archiving:\n ${drift.join('\n ')}`);
|
|
43
|
+
}
|
|
44
|
+
const content = stampLifecycleMove(readRecord(record), {
|
|
45
|
+
date: todayStamp(),
|
|
46
|
+
archived: todayStamp(),
|
|
47
|
+
'archive-reason': reason.trim(),
|
|
48
|
+
});
|
|
49
|
+
writeRecord(root, 'archived', record.fileName, content);
|
|
50
|
+
try {
|
|
51
|
+
writeArchiveManifest(root, appendSeal(manifest, record.fileName, sealBytes(content)));
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
// Roll the staged archived file back: the active source must survive a
|
|
55
|
+
// failed seal so the move never half-happens.
|
|
56
|
+
rmSync(join(folderPath(root, 'archived'), record.fileName), { force: true });
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
removeRecord(record);
|
|
60
|
+
return `archived adr/implemented/${record.fileName} as adr/archived/${record.fileName} and sealed it in ${ADR_DIR}/${ARCHIVED_DIR}/${MANIFEST_FILE}`;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=archive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AA+BA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiGvD"}
|
|
@@ -2,10 +2,11 @@ import { DECIDED_BY_VALUES } from '../core/adr.js';
|
|
|
2
2
|
import { COMMANDS, COMMAND_OPTIONS, takesValue, VALUE_OPTIONS } from '../core/cli-options.js';
|
|
3
3
|
/** Short descriptions for the shells that show one next to an option. */
|
|
4
4
|
const OPTION_DESCRIPTIONS = {
|
|
5
|
+
'--base': 'git ref the archive history must have grown from',
|
|
5
6
|
'--by': 'the decision that replaces this one',
|
|
6
7
|
'--decided-by': 'whose judgment settled the decision',
|
|
7
8
|
'--raised-by': 'who raised the decision',
|
|
8
|
-
'--reason': 'why
|
|
9
|
+
'--reason': 'why this record changes lifecycle',
|
|
9
10
|
'--tag': 'filter to one theme',
|
|
10
11
|
'--out': 'write the output to this file',
|
|
11
12
|
'--tools': 'AI tools to install integrations for',
|
|
@@ -37,7 +38,7 @@ export function completionCommand(shell) {
|
|
|
37
38
|
|
|
38
39
|
case "$prev" in
|
|
39
40
|
--decided-by|--raised-by)
|
|
40
|
-
if [[ "$command" == "
|
|
41
|
+
if [[ "$command" == "record" || "$command" == "implement" ]]; then
|
|
41
42
|
COMPREPLY=( $(compgen -W "${DECIDED_BY_VALUES.join(' ')}" -- "$cur") )
|
|
42
43
|
else
|
|
43
44
|
# The flag is not accepted here, so its values are not candidates.
|
|
@@ -105,9 +106,9 @@ _adrkit "$@"
|
|
|
105
106
|
'\n' +
|
|
106
107
|
// `-x` requires the value and suppresses file candidates; both
|
|
107
108
|
// declarations live on one line with the two values as `-a`.
|
|
108
|
-
`complete -c adrkit -n "__fish_seen_subcommand_from
|
|
109
|
+
`complete -c adrkit -n "__fish_seen_subcommand_from record implement" -l raised-by -x -a "${DECIDED_BY_VALUES.join(' ')}"` +
|
|
109
110
|
'\n' +
|
|
110
|
-
`complete -c adrkit -n "__fish_seen_subcommand_from
|
|
111
|
+
`complete -c adrkit -n "__fish_seen_subcommand_from record implement" -l decided-by -x -a "${DECIDED_BY_VALUES.join(' ')}"` +
|
|
111
112
|
'\n');
|
|
112
113
|
default:
|
|
113
114
|
throw new Error(`unsupported shell "${shell}". Supported: bash, zsh, fish`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE9F,yEAAyE;AACzE,MAAM,mBAAmB,GAA2B;IAClD,MAAM,EAAE,qCAAqC;IAC7C,cAAc,EAAE,qCAAqC;IACrD,aAAa,EAAE,yBAAyB;IACxC,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE9F,yEAAyE;AACzE,MAAM,mBAAmB,GAA2B;IAClD,QAAQ,EAAE,kDAAkD;IAC5D,MAAM,EAAE,qCAAqC;IAC7C,cAAc,EAAE,qCAAqC;IACrD,aAAa,EAAE,yBAAyB;IACxC,UAAU,EAAE,mCAAmC;IAC/C,OAAO,EAAE,qBAAqB;IAC9B,OAAO,EAAE,+BAA+B;IACxC,SAAS,EAAE,sCAAsC;IACjD,aAAa,EAAE,sBAAsB;CACtC,CAAC;AAEF;;;;GAIG;AACH,SAAS,OAAO,CAAC,MAAc;IAC7B,IAAI,MAAM,KAAK,cAAc,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;QAC1D,OAAO,IAAI,MAAM,KAAK,mBAAmB,CAAC,MAAM,CAAC,kBAAkB,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACrG,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,MAAM,KAAK,mBAAmB,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM;YACT,OAAO;;;;;;;;;oCASuB,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;;;;;;;MAOzD,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;;;;;;;;;;;;;EAa3B,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;iBAC9B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,SAAS,IAAI,aAAa,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;iBAC3E,IAAI,CAAC,IAAI,CAAC;;;;;;;8BAOiB,KAAK;;;CAGlC,CAAC;QACE,KAAK,KAAK;YACR,OAAO;;;;;6BAKgB,KAAK;;;;;;;;EAQhC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;iBAC9B,GAAG,CACF,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAClB,OAAO,IAAI,gBAAgB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAC/E;iBACA,IAAI,CAAC,IAAI,CAAC;;;;;;CAMZ,CAAC;QACE,KAAK,MAAM;YACT,OAAO,CACL,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,6BAA6B,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC7E,IAAI;gBACJ,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;qBAC5B,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAC9B,OAAO;qBACJ,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,cAAc,IAAI,MAAM,KAAK,aAAa,CAAC;qBACzE,GAAG,CACF,CAAC,MAAM,EAAE,EAAE,CACT,sDAAsD,OAAO,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3H,CACJ;qBACA,IAAI,CAAC,IAAI,CAAC;gBACb,IAAI;gBACJ,+DAA+D;gBAC/D,6DAA6D;gBAC7D,4FAA4F,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;gBAC1H,IAAI;gBACJ,6FAA6F,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;gBAC3H,IAAI,CACL,CAAC;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,+BAA+B,CAAC,CAAC;IAChF,CAAC;AACH,CAAC"}
|
|
@@ -4,5 +4,5 @@ import type { DecidedBy, RaisedBy } from '../core/adr.js';
|
|
|
4
4
|
* the CLI cannot observe who chose, so the value travels in rather than being
|
|
5
5
|
* inferred. Promotion is also where the value enters the durable record.
|
|
6
6
|
*/
|
|
7
|
-
export declare function
|
|
8
|
-
//# sourceMappingURL=
|
|
7
|
+
export declare function implementCommand(query: string, cwd: string, decidedBy: DecidedBy, raisedBy: RaisedBy): string;
|
|
8
|
+
//# sourceMappingURL=implement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"implement.d.ts","sourceRoot":"","sources":["../../src/commands/implement.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAO1D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,GACjB,MAAM,CA+BR"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { requireRoot } from '../core/config.js';
|
|
4
|
+
import { gitHead } from '../core/git.js';
|
|
5
|
+
import { folderPath, nextDecisionNumber, removeRecord, resolveProposed, writeRecord } from '../core/repository.js';
|
|
6
|
+
import { droppedSections, proposalToDecision } from '../core/templates.js';
|
|
7
|
+
import { formatIssues, validateProposal } from '../core/validate.js';
|
|
8
|
+
/**
|
|
9
|
+
* `decidedBy` is the declaration the caller made for the promoted decision:
|
|
10
|
+
* the CLI cannot observe who chose, so the value travels in rather than being
|
|
11
|
+
* inferred. Promotion is also where the value enters the durable record.
|
|
12
|
+
*/
|
|
13
|
+
export function implementCommand(query, cwd, decidedBy, raisedBy) {
|
|
14
|
+
const root = requireRoot(cwd);
|
|
15
|
+
const proposal = resolveProposed(root, query);
|
|
16
|
+
if (/^\d+\s+/.test(proposal.title)) {
|
|
17
|
+
throw new Error('proposal title must not start with a number; ADR Kit assigns decision numbers');
|
|
18
|
+
}
|
|
19
|
+
const issues = validateProposal(root, proposal);
|
|
20
|
+
if (issues.length > 0) {
|
|
21
|
+
throw new Error(`proposal is not ready to implement:\n${formatIssues(issues)}`);
|
|
22
|
+
}
|
|
23
|
+
const number = nextDecisionNumber(root);
|
|
24
|
+
const slug = proposal.fileName.replace(/^\d{4}-\d{2}-\d{2}-/, '').replace(/\.md$/, '');
|
|
25
|
+
const fileName = `${number}-${slug}.md`;
|
|
26
|
+
const path = join(folderPath(root, 'implemented'), fileName);
|
|
27
|
+
if (existsSync(path)) {
|
|
28
|
+
throw new Error(`decision already exists: adr/implemented/${fileName}`);
|
|
29
|
+
}
|
|
30
|
+
const content = proposalToDecision(proposal, number, gitHead(root), decidedBy, raisedBy);
|
|
31
|
+
writeRecord(root, 'implemented', fileName, content);
|
|
32
|
+
removeRecord(proposal);
|
|
33
|
+
let output = `implemented adr/proposed/${proposal.fileName} as adr/implemented/${fileName}`;
|
|
34
|
+
const dropped = droppedSections(proposal);
|
|
35
|
+
if (dropped.length > 0) {
|
|
36
|
+
output += `\nwarning: dropped section(s) with no place in an implemented decision: ${dropped
|
|
37
|
+
.map((heading) => `## ${heading}`)
|
|
38
|
+
.join(', ')}`;
|
|
39
|
+
}
|
|
40
|
+
return output;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=implement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"implement.js","sourceRoot":"","sources":["../../src/commands/implement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACnH,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAErE;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,GAAW,EACX,SAAoB,EACpB,QAAkB;IAElB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9C,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,wCAAwC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACvF,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,IAAI,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,4CAA4C,QAAQ,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzF,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvB,IAAI,MAAM,GAAG,4BAA4B,QAAQ,CAAC,QAAQ,uBAAuB,QAAQ,EAAE,CAAC;IAC5F,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,2EAA2E,OAAO;aACzF,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC;aACjC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAWA,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBnG"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { initRepository } from '../core/repository.js';
|
|
2
2
|
import { writeInstalledWithConfig } from '../core/config.js';
|
|
3
|
-
import { integrationSummary, parseTools, parseWorkflows, writeToolIntegrations, } from '../core/tool-integrations.js';
|
|
3
|
+
import { integrationSummary, parseTools, parseWorkflows, standingOrdersNote, writeToolIntegrations, } from '../core/tool-integrations.js';
|
|
4
4
|
import { VERSION } from '../version.js';
|
|
5
5
|
export function initCommand(targetDir, toolsValue, workflowsValue) {
|
|
6
6
|
const tools = parseTools(toolsValue);
|
|
@@ -11,14 +11,16 @@ export function initCommand(targetDir, toolsValue, workflowsValue) {
|
|
|
11
11
|
const lines = created.map((path) => ` created ${path}`);
|
|
12
12
|
const integrations = writeToolIntegrations(root, tools, workflows);
|
|
13
13
|
writeInstalledWithConfig(root, VERSION);
|
|
14
|
+
const note = standingOrdersNote(root, integrations);
|
|
14
15
|
return [
|
|
15
16
|
`ADR Kit initialized at ${root}`,
|
|
16
17
|
...lines,
|
|
17
18
|
...integrationSummary(root, integrations),
|
|
19
|
+
...(note === undefined ? [] : ['', note]),
|
|
18
20
|
'',
|
|
19
21
|
'Next:',
|
|
20
|
-
' adrkit
|
|
21
|
-
' adrkit
|
|
22
|
+
' adrkit propose "use sqlite for sessions" # plan an unshipped choice',
|
|
23
|
+
' adrkit record "a shipped choice" --raised-by human --decided-by human',
|
|
22
24
|
].join('\n');
|
|
23
25
|
}
|
|
24
26
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,UAAmB,EAAE,cAAuB;IACzF,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;IACjD,sEAAsE;IACtE,2EAA2E;IAC3E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,cAAc,CACtC,SAAS,EACT,KAAK,EACL,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CACrD,CAAC;IACF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACnE,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,OAAO;QACL,0BAA0B,IAAI,EAAE;QAChC,GAAG,KAAK;QACR,GAAG,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC;QACzC,EAAE;QACF,OAAO;QACP,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,UAAmB,EAAE,cAAuB;IACzF,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;IACjD,sEAAsE;IACtE,2EAA2E;IAC3E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,cAAc,CACtC,SAAS,EACT,KAAK,EACL,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CACrD,CAAC;IACF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACnE,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACpD,OAAO;QACL,0BAA0B,IAAI,EAAE;QAChC,GAAG,KAAK;QACR,GAAG,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC;QACzC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzC,EAAE;QACF,OAAO;QACP,uEAAuE;QACvE,yEAAyE;KAC1E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/commands/instructions.ts"],"names":[],"mappings":"AAKA,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/commands/instructions.ts"],"names":[],"mappings":"AAKA,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAmCvD"}
|
|
@@ -1,101 +1,44 @@
|
|
|
1
1
|
import { findRoot, installedWithNotice, readConfigSafe, withNotice } from '../core/config.js';
|
|
2
|
-
import {
|
|
3
|
-
import { formatIssues,
|
|
2
|
+
import { listRecords } from '../core/repository.js';
|
|
3
|
+
import { formatIssues, validateRecord, validateRepository } from '../core/validate.js';
|
|
4
4
|
import { VERSION } from '../version.js';
|
|
5
5
|
export function instructionsCommand(cwd) {
|
|
6
|
-
const root = findRoot(cwd);
|
|
7
|
-
const config = root === undefined ? undefined : readConfigSafe(root);
|
|
8
|
-
const notice = config === undefined ? undefined : installedWithNotice(config, VERSION);
|
|
9
|
-
return withNotice(instructionsOutput(cwd), notice);
|
|
10
|
-
}
|
|
11
|
-
function instructionsOutput(cwd) {
|
|
12
6
|
const root = findRoot(cwd);
|
|
13
7
|
if (root === undefined) {
|
|
14
|
-
|
|
15
|
-
'No ADR Kit repository found.',
|
|
16
|
-
'',
|
|
17
|
-
'Next:',
|
|
18
|
-
' adrkit init',
|
|
19
|
-
' adrkit decide "your first decision" --raised-by <human|agent> --decided-by <human|agent>',
|
|
20
|
-
' (raised-by: who raised it; decided-by: whose judgment settled it)',
|
|
21
|
-
].join('\n');
|
|
22
|
-
return output;
|
|
8
|
+
return 'No ADR Kit repository found.\n\nNext:\n adrkit init';
|
|
23
9
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
10
|
+
const config = readConfigSafe(root);
|
|
11
|
+
const notice = config === undefined ? undefined : installedWithNotice(config, VERSION);
|
|
12
|
+
const issues = validateRepository(root);
|
|
13
|
+
let records;
|
|
28
14
|
try {
|
|
29
|
-
listRecords(root);
|
|
15
|
+
records = listRecords(root);
|
|
30
16
|
}
|
|
31
17
|
catch {
|
|
32
|
-
|
|
33
|
-
const output = [
|
|
34
|
-
'The repository has validation issues. Fix them before creating more records.',
|
|
35
|
-
'',
|
|
36
|
-
formatIssues(issues),
|
|
37
|
-
'',
|
|
38
|
-
'Next:',
|
|
39
|
-
' adrkit validate',
|
|
40
|
-
].join('\n');
|
|
41
|
-
return output;
|
|
18
|
+
return withNotice(`The repository has validation issues.\n\n${formatIssues(issues)}\n\nNext:\n adrkit validate`, notice);
|
|
42
19
|
}
|
|
43
|
-
const
|
|
44
|
-
if (
|
|
20
|
+
const proposed = records.filter((record) => record.folder === 'proposed');
|
|
21
|
+
if (proposed.length > 0) {
|
|
22
|
+
const lines = [`${proposed.length} proposal${proposed.length === 1 ? '' : 's'} pending:`];
|
|
45
23
|
const ready = [];
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
needsWork[draft.fileName] = issues.map((issue) => issue.message);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
const readySet = new Set(ready);
|
|
57
|
-
const lines = [`${drafts.length} draft${drafts.length === 1 ? '' : 's'} pending:`];
|
|
58
|
-
for (const draft of drafts) {
|
|
59
|
-
if (readySet.has(draft.fileName)) {
|
|
60
|
-
lines.push(` ✓ ${draft.fileName} validated - ready to accept`);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
const first = needsWork[draft.fileName]?.[0] ?? 'validation failed';
|
|
64
|
-
lines.push(` ✗ ${draft.fileName} ${first}`);
|
|
65
|
-
}
|
|
24
|
+
for (const record of proposed) {
|
|
25
|
+
const recordIssues = validateRecord(root, record);
|
|
26
|
+
if (recordIssues.length === 0)
|
|
27
|
+
ready.push(record.fileName);
|
|
28
|
+
lines.push(` ${recordIssues.length === 0 ? '✓' : '✗'} ${record.fileName} ${recordIssues.length === 0 ? 'validated - ready after shipping' : recordIssues[0].message}`);
|
|
66
29
|
}
|
|
67
30
|
lines.push('', 'Next:');
|
|
68
31
|
for (const name of ready) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
lines.push(` adrkit accept ${name} --raised-by <human|agent> --decided-by <human|agent> # promote to a decision`);
|
|
32
|
+
lines.push(` adrkit implement ${name} --raised-by <human|agent> --decided-by <human|agent> # after shipping`);
|
|
33
|
+
lines.push(` adrkit reject ${name} --reason <reason> # if declined`);
|
|
72
34
|
}
|
|
73
|
-
|
|
74
|
-
lines.push(
|
|
75
|
-
|
|
76
|
-
const output = lines.join('\n');
|
|
77
|
-
return output;
|
|
35
|
+
if (ready.length < proposed.length)
|
|
36
|
+
lines.push(' adrkit validate # fix incomplete proposals first');
|
|
37
|
+
return withNotice(lines.join('\n'), notice);
|
|
78
38
|
}
|
|
79
|
-
const issues = validateRepository(root);
|
|
80
39
|
if (issues.length > 0) {
|
|
81
|
-
|
|
82
|
-
'The repository has validation issues. Fix them before creating more records.',
|
|
83
|
-
'',
|
|
84
|
-
formatIssues(issues),
|
|
85
|
-
'',
|
|
86
|
-
'Next:',
|
|
87
|
-
' adrkit validate',
|
|
88
|
-
].join('\n');
|
|
89
|
-
return output;
|
|
40
|
+
return withNotice(`The repository has validation issues.\n\n${formatIssues(issues)}\n\nNext:\n adrkit validate`, notice);
|
|
90
41
|
}
|
|
91
|
-
|
|
92
|
-
'No proposals waiting.',
|
|
93
|
-
'',
|
|
94
|
-
'Next:',
|
|
95
|
-
' adrkit decide "an already-made decision" --raised-by <human|agent> --decided-by <human|agent>',
|
|
96
|
-
' (raised-by: who raised it; decided-by: whose judgment settled it)',
|
|
97
|
-
' adrkit propose "a decision that still needs review" # ephemeral draft (the exception)',
|
|
98
|
-
].join('\n');
|
|
99
|
-
return output;
|
|
42
|
+
return withNotice('No proposals waiting.\n\nNext:\n adrkit propose "an unshipped choice"\n adrkit record "an already-shipped choice" --raised-by <human|agent> --decided-by <human|agent>', notice);
|
|
100
43
|
}
|
|
101
44
|
//# sourceMappingURL=instructions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/commands/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/commands/instructions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA0B/C"}
|