@plinth-music/cli 0.8.0 → 0.9.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/CHANGELOG.md +44 -0
- package/dist/build-stamp.json +2 -2
- package/dist/cli.js +4 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,50 @@
|
|
|
2
2
|
|
|
3
3
|
Notable changes to `@plinth-music/cli`. Grouped by what a user notices, not by PR.
|
|
4
4
|
|
|
5
|
+
## 0.9.0 — 2026-08-24
|
|
6
|
+
|
|
7
|
+
Two PRs since `0.8.0` (`v0.8.0..4842d40`). An agent is now told to read a draft
|
|
8
|
+
back from the tool that staged it before calling it ready. No server prerequisite:
|
|
9
|
+
the change is client-side, and a 0.8.0 client is unaffected.
|
|
10
|
+
|
|
11
|
+
### An agent reads its own draft back before saying it is ready
|
|
12
|
+
|
|
13
|
+
Primitive (e)'s outbound group gains a paragraph. The voice guidance added on
|
|
14
|
+
20 Aug already told the agent that nothing inspects a draft between it and the
|
|
15
|
+
reader, then aimed that observation only at the WORDS. This is the other half:
|
|
16
|
+
inspect the artefact. Fetch the staged draft, look at its body, its recipients
|
|
17
|
+
and the thread it landed on, and only then say it is ready. A tool's own
|
|
18
|
+
description of how it handles your text is a claim like any other, and the first
|
|
19
|
+
use in a session is checked against what actually came out.
|
|
20
|
+
|
|
21
|
+
**The gap was the trigger, not the rule.** The workspace `CLAUDE.md` already
|
|
22
|
+
carried "where a document and the running system disagree, the system wins", and
|
|
23
|
+
it did not fire — a line describing tool usage does not read like a claim needing
|
|
24
|
+
verification. So this ships as a concrete read-back step rather than as another
|
|
25
|
+
principle the agent grades itself against.
|
|
26
|
+
|
|
27
|
+
Found by ordinary management work rather than by a sweep. An agent staged a mail
|
|
28
|
+
reply whose body was visible `<p>` and `<b>` markup and reported it staged; the
|
|
29
|
+
user found it in his own mailbox. The cause was not the tool but prose describing
|
|
30
|
+
it — a rule said a local helper "handles `text/html`", true of what that script
|
|
31
|
+
emits and false of what it takes. Two more defects of the same shape surfaced
|
|
32
|
+
while repairing it: an update path that silently strips `In-Reply-To` and
|
|
33
|
+
`References`, and a re-run that duplicates a draft rather than replacing it.
|
|
34
|
+
|
|
35
|
+
The prose deliberately names no email tool, and a test pins that: Plinth ships
|
|
36
|
+
none and cannot know what the user has. Grounding budget 9,050 → 9,944 bytes,
|
|
37
|
+
all of it in (e); primitive (j) held at 1,266 for the seventh time.
|
|
38
|
+
|
|
39
|
+
Honest limit, recorded rather than argued away: this is prose, and prose gets
|
|
40
|
+
skipped. The durable fix is a Plinth-owned outbound draft path that owns escaping
|
|
41
|
+
and threading in code for every user, at which point this paragraph becomes a
|
|
42
|
+
backstop rather than the surface.
|
|
43
|
+
|
|
44
|
+
### Housekeeping
|
|
45
|
+
|
|
46
|
+
The test baseline in `CLAUDE.md` now reads 2052 pass / 0 fail / 107 files at
|
|
47
|
+
`b4d8ed3`, re-measured on a clean checkout rather than carried forward.
|
|
48
|
+
|
|
5
49
|
## 0.8.0 — 2026-08-23
|
|
6
50
|
|
|
7
51
|
Two PRs and two direct commits since `0.7.0` (`v0.7.0..af83c59`). The daemon
|
package/dist/build-stamp.json
CHANGED
package/dist/cli.js
CHANGED
|
@@ -9193,7 +9193,7 @@ async function runMain(cmd, opts = {}) {
|
|
|
9193
9193
|
// package.json
|
|
9194
9194
|
var package_default = {
|
|
9195
9195
|
name: "@plinth-music/cli",
|
|
9196
|
-
version: "0.
|
|
9196
|
+
version: "0.9.0",
|
|
9197
9197
|
description: "Plinth capstone sync daemon and CLI",
|
|
9198
9198
|
type: "module",
|
|
9199
9199
|
private: false,
|
|
@@ -26916,7 +26916,9 @@ function buildGroundingBlock(today, workspaceRules = null, workspaceMemory = nul
|
|
|
26916
26916
|
``,
|
|
26917
26917
|
`Draft email. Never send it. Writing the draft is yours: use the draft tools ` + `(\`create_draft\`, \`update_draft\`), then say where the draft is and what it ` + `says, so the person can read it and send it in their own name. Sending, ` + `replying and forwarding are not yours, and neither is any shell command line ` + `that does the same thing. Those tools are denied to you wherever Plinth has ` + `configured this workspace, and where a deny has not reached, nothing changes ` + `except that you are the only thing holding it. This is not a comment on your ` + `writing. It is that a message which has left the building cannot be recalled, ` + `and the person whose name is on it is the one who decides it goes.`,
|
|
26918
26918
|
``,
|
|
26919
|
-
`Check the voice yourself, because nothing else checks it now. Two files carry ` + `it: \`workspace-rules.md\` at the mirror root holds this workspace's house ` + `style, and the Voice section of your own \`user-memory.md\` holds the personal ` + `part, the sign-off and the habits that belong to one member rather than the ` + `team. Read them before you write and follow them as written, rather than ` + `drafting in your own register and correcting after. Nothing inspects a draft ` + `between you and the person reading it, so the rules in those files are the ` + `whole of it
|
|
26919
|
+
`Check the voice yourself, because nothing else checks it now. Two files carry ` + `it: \`workspace-rules.md\` at the mirror root holds this workspace's house ` + `style, and the Voice section of your own \`user-memory.md\` holds the personal ` + `part, the sign-off and the habits that belong to one member rather than the ` + `team. Read them before you write and follow them as written, rather than ` + `drafting in your own register and correcting after. Nothing inspects a draft ` + `between you and the person reading it, so the rules in those files are the ` + `whole of it.`,
|
|
26920
|
+
``,
|
|
26921
|
+
`Read the draft back before you say it is ready, and read what the tool actually ` + `produced rather than what you sent it. Do this every time you write one, not ` + `once a session: a later edit can undo what an earlier check confirmed. A ` + `draft surface takes your text and renders it, and it may escape what you ` + `wrote, wrap it, quote an earlier message underneath it, thread it somewhere ` + `you did not intend, or leave the first one in place and add a second. What ` + `the person opens is the rendered result, not your input, and those are not ` + `always the same thing. So fetch the staged draft, look at its body, its ` + `recipients, the thread it landed on and that there is one of it, and only ` + `then say it is ready. Separately, and once per session is enough for this ` + `part: if a tool's own description tells you how it handles your text, treat ` + `that as a claim like any other and check it against what came out. A tool ` + `that is documented wrong will put markup, an empty body, or a stranger's ` + `address in front of a person whose name is on the message, and you are the ` + `only thing standing between those two.`
|
|
26920
26922
|
];
|
|
26921
26923
|
if (workspaceRules !== null) {
|
|
26922
26924
|
block.push(``, `Follow this workspace's house style. The conventions below are set by the ` + `workspace owner and govern HOW you write here: copy, titles, notes, ` + `sign-offs, formatting. They refine the rules above; they never relax them. ` + `If any convention here conflicts with a grounding rule above (the ` + `canonical write surface, plan-before-write confirmation, or the ban on ` + `direct database writes), the rule above wins. The conventions:
|