adr-kit 0.6.0 → 0.8.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.
Files changed (72) hide show
  1. package/README.md +41 -16
  2. package/README.zh.md +37 -17
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +50 -25
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/accept.d.ts +7 -1
  7. package/dist/commands/accept.d.ts.map +1 -1
  8. package/dist/commands/accept.js +7 -2
  9. package/dist/commands/accept.js.map +1 -1
  10. package/dist/commands/completion.d.ts.map +1 -1
  11. package/dist/commands/completion.js +126 -3
  12. package/dist/commands/completion.js.map +1 -1
  13. package/dist/commands/config.d.ts +1 -1
  14. package/dist/commands/config.d.ts.map +1 -1
  15. package/dist/commands/config.js +1 -10
  16. package/dist/commands/config.js.map +1 -1
  17. package/dist/commands/decide.d.ts +6 -1
  18. package/dist/commands/decide.d.ts.map +1 -1
  19. package/dist/commands/decide.js +6 -2
  20. package/dist/commands/decide.js.map +1 -1
  21. package/dist/commands/graph.d.ts +0 -1
  22. package/dist/commands/graph.d.ts.map +1 -1
  23. package/dist/commands/graph.js +2 -4
  24. package/dist/commands/graph.js.map +1 -1
  25. package/dist/commands/init.js +1 -1
  26. package/dist/commands/init.js.map +1 -1
  27. package/dist/commands/instructions.d.ts +1 -1
  28. package/dist/commands/instructions.d.ts.map +1 -1
  29. package/dist/commands/instructions.js +13 -25
  30. package/dist/commands/instructions.js.map +1 -1
  31. package/dist/commands/list.d.ts +1 -1
  32. package/dist/commands/list.d.ts.map +1 -1
  33. package/dist/commands/list.js +2 -15
  34. package/dist/commands/list.js.map +1 -1
  35. package/dist/commands/propose.d.ts.map +1 -1
  36. package/dist/commands/propose.js +2 -1
  37. package/dist/commands/propose.js.map +1 -1
  38. package/dist/commands/status.d.ts +1 -1
  39. package/dist/commands/status.d.ts.map +1 -1
  40. package/dist/commands/status.js +1 -11
  41. package/dist/commands/status.js.map +1 -1
  42. package/dist/commands/validate.d.ts +1 -1
  43. package/dist/commands/validate.d.ts.map +1 -1
  44. package/dist/commands/validate.js +1 -17
  45. package/dist/commands/validate.js.map +1 -1
  46. package/dist/core/adr.d.ts +32 -1
  47. package/dist/core/adr.d.ts.map +1 -1
  48. package/dist/core/adr.js +22 -1
  49. package/dist/core/adr.js.map +1 -1
  50. package/dist/core/graph.d.ts +0 -1
  51. package/dist/core/graph.d.ts.map +1 -1
  52. package/dist/core/graph.js +0 -18
  53. package/dist/core/graph.js.map +1 -1
  54. package/dist/core/repository.d.ts.map +1 -1
  55. package/dist/core/repository.js +22 -6
  56. package/dist/core/repository.js.map +1 -1
  57. package/dist/core/templates.d.ts +14 -3
  58. package/dist/core/templates.d.ts.map +1 -1
  59. package/dist/core/templates.js +15 -2
  60. package/dist/core/templates.js.map +1 -1
  61. package/dist/core/tool-integrations.d.ts.map +1 -1
  62. package/dist/core/tool-integrations.js +133 -23
  63. package/dist/core/tool-integrations.js.map +1 -1
  64. package/dist/core/validate.d.ts.map +1 -1
  65. package/dist/core/validate.js +16 -0
  66. package/dist/core/validate.js.map +1 -1
  67. package/dist/version.js.map +1 -1
  68. package/package.json +2 -2
  69. package/dist/core/adr-json.d.ts +0 -36
  70. package/dist/core/adr-json.d.ts.map +0 -1
  71. package/dist/core/adr-json.js +0 -31
  72. package/dist/core/adr-json.js.map +0 -1
package/README.md CHANGED
@@ -38,7 +38,7 @@ Requires Node.js 20.19 or later.
38
38
  npm install -g adr-kit
39
39
  cd your-project
40
40
  adrkit init
41
- adrkit decide "Use SQLite for session storage"
41
+ adrkit decide "Use SQLite for session storage" --decided-by human
42
42
  ```
43
43
 
44
44
  `adrkit init` creates an `adr/` directory:
@@ -68,28 +68,40 @@ adrkit list
68
68
  Paste this into any AI coding agent to record key decisions automatically:
69
69
 
70
70
  ```text
71
- Use github.com/luochang212/adr-kit in this repository to automatically record key architecture decisions.
71
+ Use github.com/luochang212/adr-kit in this repository to automatically record key architecture decisions. Every record declares `decided-by`: use `human` when a person determined the direction, `agent` when the choice came from your own judgment, even if a person let it through.
72
72
  ```
73
73
 
74
+ To use decisions in later coding tasks, add the [reading rule](docs/workflow.md#read-decisions-before-coding)
75
+ to the project's `AGENTS.md` (and `CLAUDE.md` for Claude Code teams). Start tasks
76
+ with `adrkit list` and `adrkit show <N>` to read the existing decisions, then
77
+ check them against current code and requirements. The init skill guides this
78
+ setup; existing projects should run `adrkit update` and add the rule too.
79
+ The CLI does not edit project instruction files automatically.
80
+ Record only architectural choices that constrain future development and whose
81
+ rationale is not apparent from code alone; routine fixes need no ADR. See
82
+ [when to record](docs/workflow.md#when-to-record).
83
+
74
84
  ## Commands
75
85
 
76
86
  ```text
77
87
  adrkit init [path] [--tools <list>] [--workflows <list>]
78
88
  Initialize an ADR Kit repository
79
- adrkit decide <title> Record an already-made decision (default path)
89
+ adrkit decide <title> --decided-by <human|agent>
90
+ Record an already-made decision (default path)
80
91
  adrkit propose <title> Create an ephemeral proposal draft
81
- adrkit accept <name> Promote a draft to a decision (assigns N)
92
+ adrkit accept <name> --decided-by <human|agent>
93
+ Promote a draft to a decision (assigns N)
82
94
  adrkit reject <name> [--reason <text>] Discard a draft (leaves no record)
83
95
  adrkit supersede <name> --by <name> Mark an accepted decision as superseded
84
- adrkit list [--json] List decisions and pending drafts
96
+ adrkit list List decisions and pending drafts
85
97
  adrkit show <name> Show a decision or draft
86
- adrkit status [--json] Show lifecycle counts and validity
87
- adrkit instructions [--json] Print the next step; flag pending drafts as ready or needing work
88
- adrkit validate [name] [--all] [--json] Validate one record or the repository
98
+ adrkit status Show lifecycle counts and validity
99
+ adrkit instructions Print the next step; flag pending drafts as ready or needing work
100
+ adrkit validate [name] [--all] Validate one record or the repository
89
101
  adrkit update [--tools <list>] [--workflows <list>]
90
102
  Rewrite AI tool integrations
91
- adrkit config [--json] Print the current configuration
92
- adrkit graph [--mermaid|--dot|--json|--text] [--formal-only] [--tag <tag>]
103
+ adrkit config Print the current configuration
104
+ adrkit graph [--mermaid|--dot|--text] [--formal-only] [--tag <tag>]
93
105
  Emit the decision relationship graph
94
106
  adrkit completion <bash|zsh|fish> Print a shell completion script
95
107
  adrkit version Print the version
@@ -117,7 +129,7 @@ adrkit version Print the version
117
129
 
118
130
  | Document | Content |
119
131
  | --- | --- |
120
- | [CLI reference](https://github.com/luochang212/adr-kit/blob/main/docs/cli.md) | Command reference with arguments and `--json` output |
132
+ | [CLI reference](https://github.com/luochang212/adr-kit/blob/main/docs/cli.md) | Command reference with arguments and output shapes |
121
133
  | [Record format](https://github.com/luochang212/adr-kit/blob/main/docs/record-format.md) | ADR file format and validation rules |
122
134
  | [Workflow](https://github.com/luochang212/adr-kit/blob/main/docs/workflow.md) | Lifecycle from proposal to decision |
123
135
  | [Agent skills](https://github.com/luochang212/adr-kit/blob/main/skills/README.md) | Agent skills that drive the `adrkit` CLI |
@@ -130,6 +142,7 @@ Every record is YAML front matter followed by a Markdown body:
130
142
  ---
131
143
  status: accepted
132
144
  date: 2026-08-19
145
+ decided-by: human
133
146
  created: 2026-08-17
134
147
  commit: abc1234
135
148
  tags: [frontend]
@@ -149,6 +162,18 @@ re-stamped, so the time axis survives later lifecycle moves. Optional
149
162
  by theme. Decisions are immutable history; the current facts
150
163
  live in code, not in the record.
151
164
 
165
+ `accepted` denotes a recorded decision, not proof of human review.
166
+ `decided-by` is `human` or `agent`, declared when `decide` or `accept` runs:
167
+ `human` when a person determined the direction (they stated it, changed a
168
+ proposal into what shipped, or you are recording one they made earlier),
169
+ `agent` when it came from the agent's own judgment, including when a person only
170
+ let it through. The CLI records the declaration without inferring or verifying
171
+ it, so the field does not establish who chose or authorized the decision; when
172
+ who proposed and who approved matters, write it in the body. `supersede`
173
+ preserves the original value. See the
174
+ [record format reference](docs/record-format.md) for limitations. Identity
175
+ stays in git.
176
+
152
177
  - **Decisions** (`adr/decisions/N-slug.md`) are `accepted` or `superseded`
153
178
  and require `Problem`, `Decision`, `Alternatives considered`, and
154
179
  `Consequences`; proposal-era headings are rejected by `validate`.
@@ -189,8 +214,8 @@ ADR Kit stands on two projects, in two different roles:
189
214
 
190
215
  - **[OpenSpec](https://github.com/Fission-AI/OpenSpec)** shaped *how* the
191
216
  tool is built: an agent-first CLI whose instructions are installed as
192
- agent skills, a deterministic `validate`, machine-readable `--json`
193
- output, and a "fluid not rigid" workflow. Like OpenSpec, ADR Kit
217
+ agent skills, a deterministic `validate`, and a "fluid not rigid" workflow.
218
+ Like OpenSpec, ADR Kit
194
219
  *steers* agents: session-visible skills rather than imposing hard phase
195
220
  gates or mandating that every change be recorded.
196
221
  - **[deepseek-harness](https://github.com/deepseek-ai/deepseek-harness)**
@@ -215,9 +240,9 @@ history, and current facts live in code, not in the record.
215
240
  - **Lifecycle is mechanical, not editorial.** Promoting a draft and retiring
216
241
  an accepted decision are commands (`accept`, `supersede`), and `validate`
217
242
  enforces the resulting shape.
218
- - **Agents are first-class users.** The format is plain Markdown, paths are
219
- predictable, and agent-facing commands print machine-readable `--json`
220
- output; the rest reject the flag instead of silently ignoring it.
243
+ - **Agents are first-class users.** The record is the interface: plain
244
+ Markdown with YAML front matter an agent reads directly, at predictable
245
+ paths, with `validate` as the machine check.
221
246
 
222
247
  ## Development
223
248
 
package/README.zh.md CHANGED
@@ -36,7 +36,7 @@ agent 原生代码库的决策记录纪律:每条记录都必须说明它解
36
36
  npm install -g adr-kit
37
37
  cd your-project
38
38
  adrkit init
39
- adrkit decide "使用 SQLite 存储会话"
39
+ adrkit decide "使用 SQLite 存储会话" --decided-by human
40
40
  ```
41
41
 
42
42
  `adrkit init` 会创建 `adr/` 目录:
@@ -65,29 +65,38 @@ adrkit list
65
65
  把下面这行贴给任意 AI 编码 Agent,它就会自动把关键决策记录成 ADR:
66
66
 
67
67
  ```text
68
- 在本仓库用 github.com/luochang212/adr-kit 自动记录关键架构决策
68
+ 在本仓库用 github.com/luochang212/adr-kit 自动记录关键架构决策。每条记录都要声明 `decided-by`:方向由人决定用 `human`,由你自己的判断得出用 `agent`,即使人只是放行。
69
69
  ```
70
70
 
71
+ 让后续编码任务也用上决策:在项目 `AGENTS.md`(Claude Code 团队也包括
72
+ `CLAUDE.md`)加入[查阅规则](docs/zh/workflow.md#编码前查阅决策)。任务开始时用
73
+ `adrkit list`、`adrkit show <N>` 读完现有决策,结合代码和新需求判断是否仍适用。
74
+ 初始化技能会引导补入规则;已有项目运行 `adrkit update` 后也需补入。
75
+ CLI 不会自动修改项目指令文件。只有持续约束后续开发、且理由难以从代码直接
76
+ 看出的架构选择才值得记录;普通修复无需 ADR,详见[记录门槛](docs/zh/workflow.md#何时值得记录)。
77
+
71
78
  ## 命令
72
79
 
73
80
  ```text
74
81
  adrkit init [path] [--tools <list>] [--workflows <list>]
75
82
  初始化 ADR Kit 仓库
76
- adrkit decide <title> 直接记录已做的决策(默认路径)
83
+ adrkit decide <title> --decided-by <human|agent>
84
+ 直接记录已做的决策(默认路径)
77
85
  adrkit propose <title> 创建临时提案草稿
78
- adrkit accept <name> 把草稿提升为决策(分配 N 编号)
86
+ adrkit accept <name> --decided-by <human|agent>
87
+ 把草稿提升为决策(分配 N 编号)
79
88
  adrkit reject <name> [--reason <text>] 丢弃草稿(不留记录)
80
89
  adrkit supersede <name> --by <name> 标记已接受决策被新决策取代
81
- adrkit list [--json] 列出决策与待决草稿
82
- adrkit show <name> 查看决策或草稿
83
- adrkit status [--json] 查看生命周期计数与校验状态
84
- adrkit instructions [--json] 查看下一步;标注待决草稿已就绪或需修改
85
- adrkit validate [name] [--all] [--json] 校验单条记录或整个仓库
90
+ adrkit list 列出决策与待决草稿
91
+ adrkit show <name> 查看决策或草稿
92
+ adrkit status 查看生命周期计数与校验状态
93
+ adrkit instructions 查看下一步;标注待决草稿已就绪或需修改
94
+ adrkit validate [name] [--all] 校验单条记录或整个仓库
86
95
  adrkit update [--tools <list>] [--workflows <list>]
87
- 重写 AI 工具集成文件
88
- adrkit config [--json] 查看当前配置
89
- adrkit graph [--mermaid|--dot|--json|--text] [--formal-only] [--tag <tag>]
90
- 输出决策关系图
96
+ 重写 AI 工具集成文件
97
+ adrkit config 查看当前配置
98
+ adrkit graph [--mermaid|--dot|--text] [--formal-only] [--tag <tag>]
99
+ 输出决策关系图
91
100
  adrkit completion <bash|zsh|fish> 打印 shell 补全脚本
92
101
  adrkit version 查看版本
93
102
  ```
@@ -111,7 +120,7 @@ adrkit version 查看版本
111
120
 
112
121
  | 文档 | 内容 |
113
122
  | --- | --- |
114
- | [CLI 参考](https://github.com/luochang212/adr-kit/blob/main/docs/zh/cli.md) | 命令参考:参数与 `--json` 输出 |
123
+ | [CLI 参考](https://github.com/luochang212/adr-kit/blob/main/docs/zh/cli.md) | 命令参考:参数与输出形态 |
115
124
  | [记录格式](https://github.com/luochang212/adr-kit/blob/main/docs/zh/record-format.md) | ADR 文件格式与校验规则 |
116
125
  | [工作流](https://github.com/luochang212/adr-kit/blob/main/docs/zh/workflow.md) | 从提案到决策的生命周期 |
117
126
  | [Agent 技能](https://github.com/luochang212/adr-kit/blob/main/skills/README.md) | 驱动 `adrkit` CLI 的 agent 技能 |
@@ -124,6 +133,7 @@ adrkit version 查看版本
124
133
  ---
125
134
  status: accepted
126
135
  date: 2026-08-19
136
+ decided-by: human
127
137
  created: 2026-08-17
128
138
  commit: abc1234
129
139
  tags: [frontend]
@@ -141,6 +151,15 @@ tags: [frontend]
141
151
  关键词)让 `adrkit graph` 按主题分组和过滤决策。决策是不可变历史;当前
142
152
  事实以代码为准,不在记录里。
143
153
 
154
+ `accepted` 表示正式记录的决定,不代表人已审阅批准。`decided-by` 取值为
155
+ `human` 或 `agent`,在 `decide` 或 `accept` 时声明:方向由人决定时写 `human`
156
+ (人说出的、人把 agent 的提案改成最终落地方案的、或人此前定过而现在只是补记的),
157
+ 由 AI 自主判断得出时写 `agent`,包括人只是放行的情况。CLI 既不推断也不校验,
158
+ 只记录声明,所以它不能证明是谁自主拍板或授权;这里的"谁"指选择的来源,不是谁执行了
159
+ 命令,谁提出、谁批准写进正文。`supersede`
160
+ 保留原值。局限见[记录格式参考](docs/zh/record-format.md)。
161
+ 身份留在 git 里。
162
+
144
163
  - **决策**(`adr/decisions/N-slug.md`)是 `accepted` 或 `superseded`,
145
164
  需要 `Problem`、`Decision`、`Alternatives considered`、`Consequences`;
146
165
  `validate` 会拒绝提案时代的标题出现在已接受决策中。
@@ -176,8 +195,8 @@ ADR Kit 只拥有 `adr/` 这一个目录,并且只读取和校验自己的文
176
195
  ADR Kit 站在两个项目之上,两者角色不同:
177
196
 
178
197
  - **[OpenSpec](https://github.com/Fission-AI/OpenSpec)** 决定了这个工具*怎么建*:
179
- agent 优先的 CLI、指令以 agent skills 安装、确定性的 `validate`、
180
- 机器可读的 `--json` 输出,以及"灵活而不僵化"的工作流。和 OpenSpec 一样,
198
+ agent 优先的 CLI、指令以 agent skills 安装、确定性的 `validate`,
199
+ 以及"灵活而不僵化"的工作流。和 OpenSpec 一样,
181
200
  ADR Kit 靠*引导* agent(会话开始可见的 skills),而不是硬性阶段门禁,
182
201
  也不强制每次变更都记录。
183
202
  - **[deepseek-harness](https://github.com/deepseek-ai/deepseek-harness)**
@@ -198,7 +217,8 @@ ADR Kit 站在两个项目之上,两者角色不同:
198
217
  - **备选方案是强制项。** 没有记录被否决方案的决策,是在邀请未来的重复争论。
199
218
  - **生命周期是机械操作,不是编辑操作。** 提升草稿、退役已接受决策都是命令
200
219
  (`accept`、`supersede`),`validate` 强制检查结果形态。
201
- - **Agent 是一等用户。** 纯 Markdown、可预测的路径、需要时可输出 JSON。
220
+ - **Agent 是一等用户。** 记录本身就是接口:纯 Markdown 加 YAML front matter,
221
+ agent 直接读,路径可预测,`validate` 充当机器检查。
202
222
 
203
223
  ## 开发
204
224
 
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA4DA,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAiJzC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAkEA,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAyJzC"}
package/dist/cli.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { parseArgs } from 'node:util';
2
2
  import { pathToFileURL } from 'node:url';
3
3
  import { VERSION } from './version.js';
4
+ import { isDecidedBy } from './core/adr.js';
4
5
  import { acceptCommand } from './commands/accept.js';
5
6
  import { completionCommand } from './commands/completion.js';
6
7
  import { configCommand } from './commands/config.js';
@@ -19,25 +20,32 @@ import { validateCommand } from './commands/validate.js';
19
20
  const HELP = `adrkit ${VERSION} - A lightweight ADR workflow for humans and agents
20
21
 
21
22
  Decisions are durable records in adr/decisions/. Proposals are ephemeral drafts
22
- in adr/.drafts/ that are promoted by accept or discarded by reject.
23
+ in adr/.drafts/ that are promoted by accept or discarded by reject. decide and
24
+ accept require --decided-by, which records who made the choice: human when a
25
+ person determined the direction (they stated it, changed a proposal into what
26
+ shipped, or you are recording one they made earlier), agent when it came from
27
+ the agent's own judgment. It records where the choice came from, not who ran
28
+ the command, and the CLI neither infers nor verifies it.
23
29
 
24
30
  Usage:
25
31
  adrkit init [path] [--tools <list>] [--workflows <list>]
26
32
  Initialize an ADR Kit repository
27
- adrkit decide <title> Record a decision (default path)
33
+ adrkit decide <title> --decided-by <human|agent>
34
+ Record a decision (default path)
28
35
  adrkit propose <title> Create an ephemeral proposal draft
29
- adrkit accept <name> Promote a draft to a decision (assigns the next number)
36
+ adrkit accept <name> --decided-by <human|agent>
37
+ Promote a draft to a decision (assigns the next number)
30
38
  adrkit reject <name> [--reason <reason>] Discard a draft (leaves no record)
31
39
  adrkit supersede <name> --by <name> Mark an accepted decision as superseded
32
- adrkit list [--json] List decisions and pending drafts
40
+ adrkit list List decisions and pending drafts
33
41
  adrkit show <name> Show a decision or draft
34
- adrkit status [--json] Show lifecycle counts and validity
35
- adrkit instructions [--json] Print the next workflow step
36
- adrkit validate [name] [--all] [--json] Validate one record or the whole repo
42
+ adrkit status Show lifecycle counts and validity
43
+ adrkit instructions Print the next workflow step
44
+ adrkit validate [name] [--all] Validate one record or the whole repo
37
45
  adrkit update [--tools <list>] [--workflows <list>]
38
46
  Rewrite AI tool integrations
39
- adrkit config [--json] Print the current configuration
40
- adrkit graph [--mermaid|--dot|--json|--text] [--formal-only] [--tag <tag>]
47
+ adrkit config Print the current configuration
48
+ adrkit graph [--mermaid|--dot|--text] [--formal-only] [--tag <tag>]
41
49
  Emit the decision relationship graph
42
50
  adrkit completion <bash|zsh|fish> Print a shell completion script
43
51
  adrkit version Print the version
@@ -48,13 +56,11 @@ adrkit graph visualizes the decision history: solid edges are formal
48
56
  superseded-by links, dashed edges are ADR-N references mined from record
49
57
  bodies, and nodes group by their created date. --mermaid pastes into any
50
58
  Markdown and renders natively on GitHub (nodes are tinted by their tags),
51
- --dot feeds Graphviz (dot -Tpng), --text prints a terminal-friendly tree,
52
- --json exposes the graph to other tools; --tag <tag> filters to one theme,
53
- --formal-only drops the mined edges.
59
+ --dot feeds Graphviz (dot -Tpng), --text prints a terminal-friendly tree;
60
+ --tag <tag> filters to one theme, --formal-only drops the mined edges.
54
61
 
55
62
  Run from anywhere inside the project; commands discover the nearest adr/ directory.
56
63
  `;
57
- const JSON_COMMANDS = new Set(['list', 'status', 'instructions', 'validate', 'config', 'graph']);
58
64
  export function main(argv) {
59
65
  const { values, positionals } = parseArgs({
60
66
  args: argv,
@@ -62,9 +68,9 @@ export function main(argv) {
62
68
  options: {
63
69
  all: { type: 'boolean', default: false },
64
70
  by: { type: 'string' },
71
+ 'decided-by': { type: 'string' },
65
72
  dot: { type: 'boolean', default: false },
66
73
  'formal-only': { type: 'boolean', default: false },
67
- json: { type: 'boolean', default: false },
68
74
  mermaid: { type: 'boolean', default: false },
69
75
  text: { type: 'boolean', default: false },
70
76
  tag: { type: 'string' },
@@ -86,9 +92,13 @@ export function main(argv) {
86
92
  const command = positionals[0] ?? '';
87
93
  const rest = positionals.slice(1);
88
94
  try {
89
- // Commands without JSON output reject --json instead of ignoring it.
90
- if (values.json && command.length > 0 && !JSON_COMMANDS.has(command)) {
91
- throw new Error(`adrkit ${command} does not support --json`);
95
+ // Only decide and accept record a decision. Anywhere else the flag is a
96
+ // mistake, not something to ignore, and this has to run before the switch
97
+ // so a non-recording command never reaches the required-declaration check.
98
+ if (values['decided-by'] !== undefined &&
99
+ command !== 'decide' &&
100
+ command !== 'accept') {
101
+ throw new Error(`adrkit ${command.length > 0 ? command : '(no command)'} does not take --decided-by`);
92
102
  }
93
103
  switch (command) {
94
104
  case '': {
@@ -116,12 +126,12 @@ export function main(argv) {
116
126
  }
117
127
  case 'decide': {
118
128
  requireTitle(rest, 'decide');
119
- console.log(decideCommand(rest[0], process.cwd()));
129
+ console.log(decideCommand(rest[0], process.cwd(), requireDecidedBy(values['decided-by'])));
120
130
  return;
121
131
  }
122
132
  case 'accept': {
123
133
  requireTitle(rest, 'accept');
124
- console.log(acceptCommand(rest[0], process.cwd()));
134
+ console.log(acceptCommand(rest[0], process.cwd(), requireDecidedBy(values['decided-by'])));
125
135
  return;
126
136
  }
127
137
  case 'reject': {
@@ -139,7 +149,7 @@ export function main(argv) {
139
149
  return;
140
150
  }
141
151
  case 'list': {
142
- console.log(listCommand(process.cwd(), values.json));
152
+ console.log(listCommand(process.cwd()));
143
153
  return;
144
154
  }
145
155
  case 'show': {
@@ -148,14 +158,14 @@ export function main(argv) {
148
158
  return;
149
159
  }
150
160
  case 'status': {
151
- const result = statusCommand(process.cwd(), values.json);
161
+ const result = statusCommand(process.cwd());
152
162
  console.log(result.output);
153
163
  if (result.valid === false)
154
164
  process.exitCode = 1;
155
165
  return;
156
166
  }
157
167
  case 'instructions': {
158
- console.log(instructionsCommand(process.cwd(), values.json));
168
+ console.log(instructionsCommand(process.cwd()));
159
169
  return;
160
170
  }
161
171
  case 'update': {
@@ -163,14 +173,13 @@ export function main(argv) {
163
173
  return;
164
174
  }
165
175
  case 'config': {
166
- console.log(configCommand(process.cwd(), values.json));
176
+ console.log(configCommand(process.cwd()));
167
177
  return;
168
178
  }
169
179
  case 'graph': {
170
180
  console.log(graphCommand(process.cwd(), {
171
181
  mermaid: values.mermaid,
172
182
  dot: values.dot,
173
- json: values.json,
174
183
  text: values.text,
175
184
  formalOnly: values['formal-only'],
176
185
  tag: values.tag,
@@ -183,7 +192,7 @@ export function main(argv) {
183
192
  return;
184
193
  }
185
194
  case 'validate': {
186
- const result = validateCommand(process.cwd(), values.all ? undefined : rest[0], values.json);
195
+ const result = validateCommand(process.cwd(), values.all ? undefined : rest[0]);
187
196
  console.log(result.output);
188
197
  if (result.valid === false)
189
198
  process.exitCode = 1;
@@ -204,6 +213,22 @@ function requireTitle(rest, command) {
204
213
  throw new Error(`${command} requires a title or name`);
205
214
  }
206
215
  }
216
+ /**
217
+ * `decided-by` is a declaration of where the choice came from, so the CLI asks
218
+ * for it instead of guessing: no environment, terminal, or agent marker can
219
+ * tell it who chose. The prompt states the same boundary the docs do, because
220
+ * whoever reads this message is about to record a decision.
221
+ */
222
+ function requireDecidedBy(value) {
223
+ if (isDecidedBy(value))
224
+ return value;
225
+ const problem = value === undefined ? 'is required' : `must be "human" or "agent", got "${value}"`;
226
+ throw new Error(`--decided-by ${problem}:\n` +
227
+ ' human a person determined the direction: they stated it, changed a proposal\n' +
228
+ ' into what shipped, or you are recording one they made earlier\n' +
229
+ ' agent the choice came from the agent\'s own judgment, not a person\'s;\n' +
230
+ ' a person merely letting it through does not make it human');
231
+ }
207
232
  if (process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.argv[1]).href) {
208
233
  main(process.argv.slice(2));
209
234
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,8 @@
1
- export declare function acceptCommand(query: string, cwd: string): string;
1
+ import type { DecidedBy } from '../core/adr.js';
2
+ /**
3
+ * `decidedBy` is the declaration the caller made for the promoted decision:
4
+ * the CLI cannot observe who chose, so the value travels in rather than being
5
+ * inferred. Promotion is also where the value enters the durable record.
6
+ */
7
+ export declare function acceptCommand(query: string, cwd: string, decidedBy: DecidedBy): string;
2
8
  //# sourceMappingURL=accept.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"accept.d.ts","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":"AAQA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CA+BhE"}
1
+ {"version":3,"file":"accept.d.ts","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAOhD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CA+BtF"}
@@ -5,7 +5,12 @@ import { gitHead } from '../core/git.js';
5
5
  import { folderPath, nextDecisionNumber, removeRecord, resolveDraft, writeRecord } from '../core/repository.js';
6
6
  import { droppedSections, proposalToDecision } from '../core/templates.js';
7
7
  import { formatIssues, validateDraft } from '../core/validate.js';
8
- export function acceptCommand(query, cwd) {
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 acceptCommand(query, cwd, decidedBy) {
9
14
  const root = requireRoot(cwd);
10
15
  const draft = resolveDraft(root, query);
11
16
  if (/^\d+\s+/.test(draft.title)) {
@@ -22,7 +27,7 @@ export function acceptCommand(query, cwd) {
22
27
  if (existsSync(path)) {
23
28
  throw new Error(`decision already exists: adr/decisions/${fileName}`);
24
29
  }
25
- const content = proposalToDecision(draft, number, gitHead(root));
30
+ const content = proposalToDecision(draft, number, gitHead(root), decidedBy);
26
31
  writeRecord(root, 'decisions', fileName, content);
27
32
  removeRecord(draft);
28
33
  let output = `accepted adr/.drafts/${draft.fileName} as adr/decisions/${fileName}`;
@@ -1 +1 @@
1
- {"version":3,"file":"accept.js","sourceRoot":"","sources":["../../src/commands/accept.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChH,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,GAAW;IACtD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,iDAAiD,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,IAAI,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3D,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,YAAY,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,MAAM,GAAG,wBAAwB,KAAK,CAAC,QAAQ,qBAAqB,QAAQ,EAAE,CAAC;IACnF,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,wEAAwE,OAAO;aACtF,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
+ {"version":3,"file":"accept.js","sourceRoot":"","sources":["../../src/commands/accept.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,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChH,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAElE;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,GAAW,EAAE,SAAoB;IAC5E,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;IACnG,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,iDAAiD,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,IAAI,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3D,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IAC5E,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,YAAY,CAAC,KAAK,CAAC,CAAC;IACpB,IAAI,MAAM,GAAG,wBAAwB,KAAK,CAAC,QAAQ,qBAAqB,QAAQ,EAAE,CAAC;IACnF,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,wEAAwE,OAAO;aACtF,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":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAoBA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAoBvD"}
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAoFA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA+FvD"}