Skip to content

Commit 4c10ff1

Browse files
committed
Removed the macOS kernel/ subtree and replaced it with codemarie-new’s native mutation strategy. Summary:
What changed (v1.11.0) Removed Entire kernel/ C++ tree (~120 files) Socket RPC bridge (kernel_bridge_client, progress/cockpit/sonic UX, raw-write router, patch gate) macOS-only requirements and /dietcode kernel * operator commands Added (codemarie-new / LUMI strategy) lib/agent/native_mutation.py — Python port of NativeMutationManager: status, search, patch, verify, coherence, refresh Coherence tokens + workspace revision drift detection State in {workspace}/.dietcode/mutation-state.json lib/workspace_root.py — project workspace resolution (plugin-tree quarantine only) lib/runtime/mutation_hooks.py — journals dietcode_kernel patch/verify into JoyZoning Updated dietcode_kernel tool — calls native mutation (cross-platform; no socket/binary) /dietcode mutation status — replaces kernel doctor/cockpit Docs — architecture.md, README.md, CHANGELOG.md, plugin.yaml New mutation flow dietcode_kernel(action='status') → drift + coherence token dietcode_kernel(action='patch', …) → governed write + receipt dietcode_kernel(action='verify', …) → run verify command joyzoning lifecycle → journal + convergence gates Verification make verify passes: roadmap smoke/audit + 115 unit tests (including new tests/test_native_mutation.py). The tool name stays dietcode_kernel for compatibility with codemarie-new’s DietcodeKernelToolHandler surface — it now means “runtime kernel” (mutation manager), not the macOS binary.
1 parent 660ff17 commit 4c10ff1

449 files changed

Lines changed: 27207 additions & 41169 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,37 @@
11
# Changelog
22

3+
## v1.11.0 — Native mutation (remove macOS kernel) (2026-06-17)
4+
5+
Replaces the quarantined macOS `kernel/` subtree and socket bridge with the
6+
**codemarie-new / LUMI native mutation strategy** (`NativeMutationManager`).
7+
8+
### Highlights
9+
10+
- **Removed**`kernel/` C++ tree, socket RPC bridge, patch gate, raw-write router, kernel cockpit/progress UX.
11+
- **Added**`lib/agent/native_mutation.py` — Python port of coherence tokens, governed patch, verify, drift detection.
12+
- **`dietcode_kernel` tool** — now calls native mutation (status, search, patch, verify, coherence, refresh).
13+
- **Workspace**`lib/workspace_root.py` replaces `kernel_workspace` (plugin-tree quarantine only).
14+
- **Doctor**`/dietcode mutation` replaces `/dietcode kernel`.
15+
16+
## v1.10.0 — BroccoliDB v30 distill (2026-06-17)
17+
18+
Distills the rewritten **LUMI / codemarie-new** BroccoliDB substrate into the
19+
Hermes plugin while preserving Hermes-only infrastructure (RPC worker, kanban hive,
20+
queue, sharded Config).
21+
22+
### Highlights
23+
24+
- **BroccoliDB v30 core** — capabilities, orchestration runtime, Spider agent toolkit,
25+
lifecycle-owned `AgentContext`, frozen `core/public-api.ts`.
26+
- **Hermes RPC adapter**`agent_invoke.ts` / `agent_session.ts` map legacy ops onto
27+
v30 surfaces (`ctx.graph`, `ctx.query`, `ctx.reasoning`, `ctx.tasks`).
28+
- **Sharded pool preserved** — plugin `BufferedDbPool` + hive schema kept; v30
29+
`start()` / `health()` / `pruneExpiredShadows()` added for lifecycle compat.
30+
- **Distill script**`make distill` / `scripts/distill_from_codemarie.sh`
31+
(`CODEMARIE_SRC` defaults to `~/Downloads/codemarie-new`).
32+
33+
Run after distill: `cd broccolidb && npm ci && npm run build`.
34+
335
## v1.9.4 — Sonic Kernel UX (2026-06-09)
436

537
Adds high-tempo kernel cockpit feedback, kinetic watch mode, fast-path indicators,

Makefile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
.PHONY: help deploy deploy-fast verify test-roadmap install
1+
.PHONY: help deploy deploy-fast verify test-roadmap install distill
22

33
help:
44
@echo "DietCode plugin — common targets"
55
@echo ""
66
@echo " make deploy Sync to ~/.hermes, reinstall Hermes, enable, verify"
77
@echo " make deploy-fast Sync + verify only (skip Hermes pip reinstall)"
88
@echo " make verify Roadmap smoke, audit, operator smoke, and unit tests"
9+
@echo " make distill Sync broccolidb core from codemarie-new (CODEMARIE_SRC)"
910
@echo " make install Run install.py wizard in this checkout"
1011
@echo ""
1112
@echo "Env: HERMES_SRC, HERMES_VENV, HERMES_HOME, DIETCODE_PLUGIN_SRC"
@@ -16,11 +17,14 @@ deploy:
1617
deploy-fast:
1718
./scripts/hermes_deploy.sh --skip-hermes-reinstall
1819

20+
distill:
21+
./scripts/distill_from_codemarie.sh
22+
1923
verify test-roadmap:
2024
python3 scripts/roadmap_smoke.py
2125
python3 scripts/roadmap_audit.py
2226
python3 scripts/roadmap_operator_smoke.py
23-
python3 -m unittest tests.test_roadmap_checkpoint tests.test_kernel_cockpit -q
27+
python3 -m unittest tests.test_roadmap_checkpoint tests.test_native_mutation -q
2428

2529
install:
2630
python3 install.py

README.md

Lines changed: 29 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# DietCode Hermes Plugin
22

3-
**v1.9.4Sonic Kernel UX**
3+
**v1.11.0Native mutation (LUMI strategy)**
44

55
DietCode is a standalone Hermes Agent plugin: one installable directory that gives
66
agents **governed mutation**, **repository intelligence**, and **per-project
@@ -9,8 +9,8 @@ long-horizon steering** — without forcing a single runtime path.
99
BroccoliDB indexes your repo. JoyZoning owns the mutation lifecycle.
1010
JSDP plans bounded delivery loops. The **roadmap** tool keeps `ROADMAP.md` as a
1111
living steering surface unique to *your* project — not the plugin checkout.
12-
An optional **macOS kernel bridge** adds coherent physical patch and verify when
13-
you opt in.
12+
**`dietcode_kernel`** provides native governed patch/verify with coherence tokens
13+
(same strategy as codemarie-new / LUMI).
1414

1515
```text
1616
Point workspace at YOUR project → fingerprint → evidence → ROADMAP.md steering
@@ -25,12 +25,13 @@ DietCode separates three authorities that other setups often collapse:
2525

2626
| Authority | Owner | Question it answers |
2727
| --- | --- | --- |
28-
| **Physical mutation** | Kernel bridge (optional) or raw Hermes tools | What changed on disk, with receipts? |
28+
| **Physical mutation** | `dietcode_kernel` (native) or raw Hermes tools | What changed on disk, with receipts? |
2929
| **Lifecycle & completion** | JoyZoning + convergence gates | Is this mutation reviewed, verified, converged? |
3030
| **Long-horizon steering** | Roadmap (`ROADMAP.md`) | What is the project becoming; what matters now? |
3131

32-
Nothing auto-completes kanban. Raw writes stay allowed by default. The kernel
33-
patch gate is **closed until you enable it**. Roadmap gates can block
32+
Nothing auto-completes kanban. Raw Hermes writes remain allowed. Governed patches
33+
use `dietcode_kernel(action='patch')` with coherence tokens when `task_id` is set.
34+
Roadmap gates can block
3435
`kanban_complete` when the steering surface is stale, invalid, or unvalidated —
3536
mirroring how production teams treat architecture docs and CI green before merge.
3637

@@ -57,15 +58,16 @@ as production-ready.
5758

5859
**Deep reference:** [docs/roadmap.md](docs/roadmap.md)
5960

60-
### Mutation loop (JoyZoning + optional kernel)
61+
### Mutation loop (JoyZoning + native runtime)
6162

6263
```text
6364
joyzoning(action='context') → scope, convergence, roadmap brief, next_actions
65+
dietcode_kernel(action='status') → coherence token when task_id set
6466
begin → patch → verify → request_review → convergence → kanban_complete (if gates open)
6567
```
6668

67-
Kernel-enabled path adds governed RPC patch/verify with coherence receipts and
68-
progress telemetry (`/dietcode kernel cockpit`, watch, explain-gate).
69+
Native path: governed patch/verify via `dietcode_kernel` with drift detection and
70+
`.dietcode/mutation-state.json` (codemarie-new / LUMI strategy).
6971

7072
---
7173

@@ -77,7 +79,7 @@ progress telemetry (`/dietcode kernel cockpit`, watch, explain-gate).
7779
| **BroccoliDB** | Knowledge graph, audit, refactor, structural analysis, hive sync |
7880
| **JoyZoning** | Mutation lifecycle, convergence, runtime journal |
7981
| **JSDP** | Rolling-horizon autonomous delivery helpers |
80-
| **Kernel bridge** | Optional macOS `dietcode_kernel` patch/verify + raw-write policy |
82+
| **Native mutation** | `dietcode_kernel` tool — patch, verify, coherence, drift detection |
8183
| **Hooks** | Session start, pre/post tool call, write transforms, gate enforcement |
8284

8385
---
@@ -152,13 +154,11 @@ Prime directive: *did the latest work strengthen or weaken the project's center
152154

153155
Decision tree when stuck: [docs/roadmap.md#decision-tree](docs/roadmap.md#decision-tree-which-call-next)
154156

155-
### Kernel (optional, macOS)
157+
### Native mutation
156158

157159
```text
158-
/dietcode kernel cockpit State, gates, roadmap steering merge
159-
/dietcode kernel watch --follow Live operation line
160-
/dietcode kernel explain-gate Patch gate diagnostics
161-
/dietcode kernel progress Human summary + phase hints
160+
/dietcode mutation status Workspace revision, drift, coherence state
161+
dietcode_kernel(action='status') Same via tool
162162
```
163163

164164
### Everything else
@@ -178,11 +178,8 @@ Safe defaults are seeded by `install.py`:
178178

179179
```yaml
180180
dietcode:
181-
kernel:
182-
bridge:
183-
enabled: true
184-
mutations_enabled: false # opt in to open patch gate
185-
raw_write_policy: warn
181+
workspace:
182+
workspace_root_source: hermes_project
186183
roadmap:
187184
enabled: true
188185
auto_install_skills: true
@@ -191,15 +188,6 @@ dietcode:
191188
stale_checkpoint_days: 7
192189
```
193190

194-
Enable kernel mutation (macOS, after build + socket):
195-
196-
```yaml
197-
dietcode:
198-
kernel:
199-
bridge:
200-
mutations_enabled: true
201-
```
202-
203191
Full keys: [docs/roadmap.md#configuration-reference](docs/roadmap.md#configuration-reference) · [docs/dietcode-plugin.md](docs/dietcode-plugin.md)
204192

205193
---
@@ -212,20 +200,14 @@ Plugin checkout production gate:
212200
make verify
213201
```
214202

215-
Runs roadmap smoke, production audit, operator smoke, and 121 unit tests
216-
(roadmap + kernel cockpit).
203+
Runs roadmap smoke, production audit, operator smoke, and unit tests
204+
(roadmap + native mutation).
217205

218206
Inside Hermes after install:
219207

220208
```text
221209
/dietcode doctor
222-
```
223-
224-
Kernel integration (macOS):
225-
226-
```bash
227-
make -C kernel kernel && make -C kernel restart-agent-server-fast
228-
python scripts/kernel_bridge_e2e.py
210+
/dietcode mutation status
229211
```
230212

231213
BroccoliDB:
@@ -257,9 +239,8 @@ make deploy-fast # skip Hermes pip reinstall
257239
- Hermes Agent with plugin support
258240
- Python (Hermes runtime)
259241
- Node.js 18+ and npm (`broccolidb/`)
260-
- **Kernel bridge (optional):** macOS, built `kernel/build/dietcode-kernel`, socket at `~/.dietcode/control.sock`
261242

262-
Linux: full BroccoliDB, JoyZoning, JSDP, and roadmap; kernel bridge degrades gracefully.
243+
Works on macOS and Linux — native mutation uses Python + git (no macOS binary).
263244

264245
---
265246

@@ -276,14 +257,15 @@ Linux: full BroccoliDB, JoyZoning, JSDP, and roadmap; kernel bridge degrades gra
276257
│ ├── agent/
277258
│ │ ├── roadmap/ Fingerprint, evidence, autofill, gates, cockpit
278259
│ │ ├── joyzoning/ Lifecycle, convergence, JSDP
279-
│ │ └── kernel_* Bridge client, progress, cockpit
280-
│ ├── runtime/ roadmap_hooks, joyzoning_hooks, kernel_hooks
260+
│ │ ├── native_mutation.py Governed patch, verify, coherence tokens
261+
│ │ └── joyzoning/ Lifecycle, convergence, JSDP
262+
│ ├── workspace_root.py Project workspace resolution
263+
│ ├── runtime/ roadmap_hooks, joyzoning_hooks, mutation_hooks
281264
│ └── tools/ roadmap, dietcode_kernel, broccolidb, joyzoning
282265
├── optional-skills/dietcode/auto-rolling-roadmap/ ROADMAP skill (auto-installed)
283-
├── kernel/ Quarantined macOS kernel subtree
284266
├── broccolidb/ Bundled TypeScript package
285-
├── scripts/ Deploy, audit, smoke, kernel e2e
286-
├── tests/ Roadmap + kernel cockpit unit tests
267+
├── scripts/ Deploy, audit, smoke
268+
├── tests/ Roadmap + native mutation unit tests
287269
└── docs/ Operator and developer documentation
288270
```
289271

@@ -292,7 +274,8 @@ Workspace artifacts (in **your** project, not the plugin):
292274
```text
293275
/path/to/your/project/
294276
├── ROADMAP.md Living steering surface (12-section contract)
295-
└── .dietcode/roadmap-state.json Validate/checkpoint memory
277+
├── .dietcode/roadmap-state.json Validate/checkpoint memory
278+
└── .dietcode/mutation-state.json Native mutation coherence state
296279
```
297280

298281
---
@@ -304,12 +287,9 @@ Workspace artifacts (in **your** project, not the plugin):
304287
| **Roadmap steering (read first for agents)** | [docs/roadmap.md](docs/roadmap.md) |
305288
| Install, config, workflow | [docs/dietcode-plugin.md](docs/dietcode-plugin.md) |
306289
| Hook wiring, authority split | [docs/architecture.md](docs/architecture.md) |
307-
| Kernel bridge operations | [docs/kernel-bridge-operations.md](docs/kernel-bridge-operations.md) |
308290
| Slash commands + tools | [docs/tools-reference.md](docs/tools-reference.md) |
309-
| Kernel + roadmap operator UX | [docs/agent-ergonomics.md](docs/agent-ergonomics.md) |
310291
| BroccoliDB runtime | [docs/broccolidb.md](docs/broccolidb.md) |
311292
| Doc index | [docs/README.md](docs/README.md) |
312-
| Kernel build + RPC | [kernel/README.md](kernel/README.md) |
313293
| Release history | [CHANGELOG.md](CHANGELOG.md) |
314294

315295
Agent skill (installed to workspace):

audit.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,10 @@
9696
"lib/agent/roadmap/gate.py",
9797
"lib/agent/roadmap/skill_install.py",
9898
"optional-skills/dietcode/auto-rolling-roadmap/SKILL.md",
99-
"lib/runtime/kernel_hooks.py",
99+
"lib/runtime/mutation_hooks.py",
100+
"lib/agent/native_mutation.py",
101+
"lib/workspace_root.py",
100102
"lib/agent/kernel_receipt_journal.py",
101-
"lib/agent/kernel_raw_write_router.py",
102-
"lib/agent/kernel_verify_bridge.py",
103103
"lib/agent/kernel_verify_journal.py",
104104
"slash_commands.py",
105105
"lib/tools/broccolidb.py",
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
old content

broccolidb/.gitignore

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,3 @@ env/
2626

2727
# Snapshots
2828
.spider/snapshots/
29-
30-
# BroccoliDB
31-
broccolidb.db
32-
broccolidb.db-wal
33-
broccolidb.db-shm
34-
.broccolidb/
35-
broccolidb-failed-flush-*.json
36-
scratch/

broccolidb/API_STABILITY.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# API stability policy (v30)
2+
3+
## Stable (semver)
4+
5+
Exported from `broccolidb/core/public-api.ts` and documented in `docs/public-api.md`.
6+
7+
Includes:
8+
9+
- `AgentContext` lifecycle and capability getters
10+
- `OrchestrationRuntime` operator methods
11+
- Public error types and `GuidedError`
12+
- Capability and intent **types**
13+
- `Workspace`, `Connection` for bootstrap scripts
14+
15+
**Guarantee:** Minor versions add backward-compatible APIs only. Patch versions fix bugs without signature changes.
16+
17+
## Internal
18+
19+
Everything under `broccolidb/core/**` not listed in `public-api.ts`:
20+
21+
- Services (`SpiderService`, `GraphService`, …)
22+
- Orchestration internals (`MutationPlanner`, `RuntimeGraphStore`, …)
23+
- MCP server implementation
24+
- Infrastructure (`BufferedDbPool`, …)
25+
26+
May change in any release without notice.
27+
28+
## Deprecated for removal
29+
30+
Documented only in `MIGRATION.md`. No new usage.
31+
32+
- Direct `ServiceContext` mutation
33+
- Compatibility bridge exceptions without `deletionDate`
34+
- Public experimental names (sovereign, vitality, oracle in user-facing strings)
35+
36+
## Forbidden patterns
37+
38+
| Pattern | Why |
39+
|---------|-----|
40+
| Capabilities before `start()` | Lifecycle violation |
41+
| `SpiderService` on AgentContext | Bypasses capability tracing |
42+
| Spider mutating during audit | Forensic integrity |
43+
| Undocumented public `any` | Type safety |
44+
| Examples bypassing capabilities | Teaches misuse |
45+
46+
## Required lifecycle
47+
48+
```typescript
49+
await ctx.start();
50+
try { /* work */ } finally { await ctx.stop(); }
51+
```
52+
53+
## Supported runtime modes
54+
55+
`development` | `ci` | `production` | `readonly` | `recovery` | `forensic`
56+
57+
Approval policies (separate from mode): `readonly` | `autonomous_safe` | `human_approval_required` | `ci_gate_only` | `recovery_mode` | `production_locked`
58+
59+
## Verification
60+
61+
- `tests/public-api-snapshot.test.ts` — export allowlist
62+
- `tests/no-experimental-public-names.test.ts` — naming guard
63+
- `tests/examples-smoke.test.ts` — golden paths execute
64+
- `npm run build` — types compile
65+
66+
## Change process
67+
68+
1. Update `public-api.ts`
69+
2. Update `docs/public-api.md` and this file
70+
3. Update `public-api-snapshot.test.ts` allowlist
71+
4. Add/adjust tests
72+
5. Entry in `CHANGELOG.md`

0 commit comments

Comments
 (0)