@eir-labs/coltrane 0.24.33 → 0.24.34

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.
@@ -0,0 +1,32 @@
1
+ {
2
+ "slug": "release-note-verifier",
3
+ "primitives": [
4
+ "VERIFY"
5
+ ],
6
+ "input_types": [
7
+ "release-record",
8
+ "release-note"
9
+ ],
10
+ "output_types": [
11
+ "release-note-verdict"
12
+ ],
13
+ "domain": "release",
14
+ "identity": "You are the release-note-verifier. A release note is about to be published under the project's name, so you check it against the record it was written from — not against whether it reads well. You refuse a claim the record does not support, and you name a surface change the prose left out. You have no tools: the record and the note are both in front of you.",
15
+ "method": "1. For each entry in the note's `claims`: resolve its `evidence` path against the record. Absent path, or a value that disagrees with what the record holds, goes into `unsupported_claims` with what the record actually says.\n2. Read both registers for claims that are NOT in `claims` — an assertion with no evidence entry is unsupported by construction; add it with evidence 'none stated'.\n3. Walk the record's surface lists: every added or removed entry either appears in a register or goes into `missing_from_prose`.\n4. `register_faults`: plain prose carrying internal vocabulary (gig ids, chair or seat terms, costs, commit hashes), or a formal register that disagrees with the record's own fields.\n5. `pass` is true only when `unsupported_claims`, `missing_from_prose` and `register_faults` are all empty.\n6. `checks` records what you actually compared, one row per check, naming the path and the outcome.",
16
+ "constraints": [
17
+ "Ground every claim in your inputs or a tool result from this run; mark anything else as unverified rather than asserting it.",
18
+ "If your inputs are insufficient for the task, say so in the output (a caveat field or equivalent) — do not fill gaps by invention.",
19
+ "Prefer deterministic checks over reasoning; state which checks actually ran versus what was inferred.",
20
+ "Report failures verbatim (messages, counts, names), not summaries of them.",
21
+ "Judge the note against the record, never against your own sense of the release.",
22
+ "Report the record's own words verbatim when a claim disagrees with it.",
23
+ "A claim you cannot resolve to a record path is unsupported — never give it the benefit of the doubt.",
24
+ "Do not rewrite the note; state what is wrong with it."
25
+ ],
26
+ "behavioral_primitives": [
27
+ "critic",
28
+ "analyst"
29
+ ],
30
+ "allowed_tools": [],
31
+ "model_tier": "economy"
32
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "slug": "release-writer",
3
+ "primitives": [
4
+ "CREATE"
5
+ ],
6
+ "input_types": [
7
+ "release-record"
8
+ ],
9
+ "output_types": [
10
+ "release-note"
11
+ ],
12
+ "domain": "release",
13
+ "identity": "You are the release-writer. You are handed a release record compiled from git — the commits a tag carries, the law counts at both ends, and the surface that changed: tool slugs, tool arguments, CLI flags, environment variables, domain types. You write two registers of the same release and nothing else: a plain one for someone who USES coltrane, and a formal one for someone auditing what shipped. You have no tools and you need none: everything true about this release is in the record. What the record does not say, you do not say.",
14
+ "method": "1. Read the record. The surface lists are the substance: an added CLI flag, a new tool argument, a domain type whose version moved, a variable a deployment must now set. A surface that is null was not readable — it is not evidence of no change.\n2. `headline`: one line naming what a reader would notice. Name the thing (`--max-context-tokens`, `gig_dispatch.effort`). Never 'various improvements', never 'performance and stability'.\n3. `plain_md`: what this release means for someone using coltrane, in their vocabulary — a flag they can pass, a tool argument they can send, a variable they must set, a type whose version moved and what that obliges. Lead with what they can now do. Say plainly when a release is internal only. Use no gig ids, no costs, no chair or seat vocabulary, no commit hashes.\n4. `formal_md`: the record as a record — version, tag, date, bump, the commits by subject, the law counts at both ends, and every surface change exactly as the record states it. This register adds nothing; it restates.\n5. `claims`: every factual claim either register makes, each with the record path that supports it (`surface.cli_flags.added[1]`, `laws.after`, `commits[0].subject`) and the value read there. If you cannot name the path, the claim does not belong in the prose.\n6. `unreadable`: copy the record's `surface_unread`, and say in the plain register that those surfaces could not be read for this release rather than implying they held no change.\n7. A release whose surfaces are all empty is an internal release. Say so in one line; do not inflate it.",
15
+ "constraints": [
16
+ "Ground every claim in your inputs or a tool result from this run; mark anything else as unverified rather than asserting it.",
17
+ "If your inputs are insufficient for the task, say so in the output (a caveat field or equivalent) — do not fill gaps by invention.",
18
+ "Create only from upstream inputs and the declared task context; introduce no new external facts.",
19
+ "Where the creation makes a non-obvious choice, record the rationale alongside it.",
20
+ "Every claim in either register must appear in `claims` with the record path that supports it.",
21
+ "Never describe a change the record does not carry — no inference from a commit subject about what it did to the surface.",
22
+ "The plain register carries no internal vocabulary: no gig ids, no chair or seat terms, no costs, no commit hashes.",
23
+ "A null surface is 'could not be read', never 'nothing changed'. Say which.",
24
+ "No superlatives and no promises about future releases."
25
+ ],
26
+ "behavioral_primitives": [
27
+ "synthesizer",
28
+ "executor"
29
+ ],
30
+ "allowed_tools": [],
31
+ "model_tier": "standard"
32
+ }
package/dist/src/cli.d.ts CHANGED
@@ -34,7 +34,7 @@ export interface CliIO {
34
34
  * every other command reads process.env directly, and moving them is not this change's scope. */
35
35
  env?: Record<string, string | undefined>;
36
36
  }
37
- export declare const USAGE = "coltrane 0.24.33\n\n coltrane validate load the genome; exit non-zero on load errors OR on an\n orphan \u2014 a standards/|domain_types/|agents/ file with no\n genome_mutation seal in the tracked genome ledger\n coltrane seal-genome [<genome_dir>] bulk-seal a pre-sealing genome: append a genome_mutation\n seal for every standards/|domain_types/|agents/ file not yet\n sealed, via the blessed sealDefinition path. Content is\n byte-unchanged; a second run seals nothing already sealed.\n (default genome_dir: cwd)\n coltrane dispatch <standard> run a standard\n coltrane monitor <gig-id> report a gig's progress\n coltrane logs <gig-id> per-chair logs for a gig\n coltrane abort <gig-id> stop a running gig\n coltrane trace <output-id> walk an output's provenance\n coltrane simulate <standard> cost/shape a standard without running it\n coltrane health engine + store health\n coltrane serve run the MCP server on stdio\n coltrane enqueue <standard> queue a gig on the LOCAL file queue (no store, no key)\n (env: COLTRANE_QUEUE_DIR \u2014 its absence is the whole\n difference between local and hosted)\n coltrane work claim one queued gig from the org store and run it\n coltrane work --check report whether this box's drain environment is configured\n and exit without claiming (0 ready, 1 not ready)\n (env: COLTRANE_STORE_URL, COLTRANE_STORE_ANON,\n COLTRANE_AGENT_TOKEN; results drain via\n COLTRANE_DRAIN_URL + COLTRANE_DRAIN_KEY;\n checkpoints under COLTRANE_WORKER_CHECKPOINTS,\n default ~/.coltrane/worker-checkpoints;\n exit 0 complete or parked, 1 failed, 3 queue empty)\n coltrane reside [--any|--residency <id>] hold a residency: claim a seat, ack its channel in\n reflex, answer every wake, and drain the org's due work\n orders through its institution's governed verbs\n (env: the same contract work uses \u2014 COLTRANE_STORE_URL,\n COLTRANE_STORE_ANON, COLTRANE_SERVICE_URL, plus\n COLTRANE_DRAIN_KEY + COLTRANE_INSTANCE for venue mode;\n no new credential class\n exit 0 released, 1 cortex failed, 2 misconfigured or a\n seam no deployment wired, 3 nothing claimable)\n\nOptions\n --input <json|@file|-> dispatch payload; @file reads a file, - reads stdin\n --depth <skim|standard|deep> tighten the per-chair turn cap\n --effort <low|medium|high|xhigh|max> the reasoning effort the seat runs at\n --max-context-tokens <n> per-round context ceiling for a chat-completions seat\n --budget <dollars> per-gig ceiling; the run stops when it is gone\n --reuse allow chair-level reuse of prior sealed outputs\n --resume <gig-id> continue a gig that died mid-pipeline\n --approve <role>=<json|@file> a human chair's verdict; repeat once per chair\n --as <name> who is approving; sealed as the verdict's author\n --wait block until the run finishes\n --follow poll until the gig reaches a terminal state\n --direction <upstream|downstream|both> for trace\n --json print the raw result to stdout\n --genome <path> genome root (default: $COLTRANE_GENOME or cwd)\n --help, --version\n\nA dispatch that reaches a chair a HUMAN holds parks: it names the waiting chair and exits 0,\nbecause a gig waiting on a person is not a failed gig. Approve it on the resume \u2014\n\n coltrane dispatch <standard> --resume <gig> \\\n --approve approve=@verdict.json --as eugene\n\n--input is NOT required on an approve-only resume: when every remaining chair is human the\ncheckpoint's recorded payload stands and the omission inherits it. If you DO pass --input it is\nchecked against the checkpoint, and a disagreement still refuses the resume.\n";
37
+ export declare const USAGE = "coltrane 0.24.34\n\n coltrane validate load the genome; exit non-zero on load errors OR on an\n orphan \u2014 a standards/|domain_types/|agents/ file with no\n genome_mutation seal in the tracked genome ledger\n coltrane seal-genome [<genome_dir>] bulk-seal a pre-sealing genome: append a genome_mutation\n seal for every standards/|domain_types/|agents/ file not yet\n sealed, via the blessed sealDefinition path. Content is\n byte-unchanged; a second run seals nothing already sealed.\n (default genome_dir: cwd)\n coltrane dispatch <standard> run a standard\n coltrane monitor <gig-id> report a gig's progress\n coltrane logs <gig-id> per-chair logs for a gig\n coltrane abort <gig-id> stop a running gig\n coltrane trace <output-id> walk an output's provenance\n coltrane simulate <standard> cost/shape a standard without running it\n coltrane health engine + store health\n coltrane serve run the MCP server on stdio\n coltrane enqueue <standard> queue a gig on the LOCAL file queue (no store, no key)\n (env: COLTRANE_QUEUE_DIR \u2014 its absence is the whole\n difference between local and hosted)\n coltrane work claim one queued gig from the org store and run it\n coltrane work --check report whether this box's drain environment is configured\n and exit without claiming (0 ready, 1 not ready)\n (env: COLTRANE_STORE_URL, COLTRANE_STORE_ANON,\n COLTRANE_AGENT_TOKEN; results drain via\n COLTRANE_DRAIN_URL + COLTRANE_DRAIN_KEY;\n checkpoints under COLTRANE_WORKER_CHECKPOINTS,\n default ~/.coltrane/worker-checkpoints;\n exit 0 complete or parked, 1 failed, 3 queue empty)\n coltrane reside [--any|--residency <id>] hold a residency: claim a seat, ack its channel in\n reflex, answer every wake, and drain the org's due work\n orders through its institution's governed verbs\n (env: the same contract work uses \u2014 COLTRANE_STORE_URL,\n COLTRANE_STORE_ANON, COLTRANE_SERVICE_URL, plus\n COLTRANE_DRAIN_KEY + COLTRANE_INSTANCE for venue mode;\n no new credential class\n exit 0 released, 1 cortex failed, 2 misconfigured or a\n seam no deployment wired, 3 nothing claimable)\n\nOptions\n --input <json|@file|-> dispatch payload; @file reads a file, - reads stdin\n --depth <skim|standard|deep> tighten the per-chair turn cap\n --effort <low|medium|high|xhigh|max> the reasoning effort the seat runs at\n --max-context-tokens <n> per-round context ceiling for a chat-completions seat\n --budget <dollars> per-gig ceiling; the run stops when it is gone\n --reuse allow chair-level reuse of prior sealed outputs\n --resume <gig-id> continue a gig that died mid-pipeline\n --approve <role>=<json|@file> a human chair's verdict; repeat once per chair\n --as <name> who is approving; sealed as the verdict's author\n --wait block until the run finishes\n --follow poll until the gig reaches a terminal state\n --direction <upstream|downstream|both> for trace\n --json print the raw result to stdout\n --genome <path> genome root (default: $COLTRANE_GENOME or cwd)\n --help, --version\n\nA dispatch that reaches a chair a HUMAN holds parks: it names the waiting chair and exits 0,\nbecause a gig waiting on a person is not a failed gig. Approve it on the resume \u2014\n\n coltrane dispatch <standard> --resume <gig> \\\n --approve approve=@verdict.json --as eugene\n\n--input is NOT required on an approve-only resume: when every remaining chair is human the\ncheckpoint's recorded payload stands and the omission inherits it. If you DO pass --input it is\nchecked against the checkpoint, and a disagreement still refuses the resume.\n";
38
38
  interface Parsed {
39
39
  cmd: string | undefined;
40
40
  positional: string[];
@@ -45,13 +45,63 @@ export interface ReleaseRecord {
45
45
  * every present surface read. Named so a changelog can say "could not read the tool registry here"
46
46
  * instead of showing a silent gap that reads as "nothing changed". */
47
47
  surface_unread: string[];
48
+ /** `false` for a tagged release; `true` for the one PENDING record `compileReleases({ pending })`
49
+ * appends — the version about to be published, compiled from HEAD before its tag is pushed. The
50
+ * field is always present so a consumer never has to guess whether a record is settled. */
51
+ pending: boolean;
52
+ }
53
+ /** One claim in a release note, and the evidence path that backs it. `value` is the string a writing
54
+ * seat recorded as "the value read at that path"; the renderer resolves `evidence` against the record
55
+ * and marks the row UNSUPPORTED when the path is absent or holds a different value. */
56
+ export interface ReleaseNoteClaim {
57
+ text: string;
58
+ evidence: string;
59
+ value?: string;
60
+ }
61
+ /** A release note (release-notes-v0): two registers of prose, the claims that back the headline, and
62
+ * the surfaces a compiler could not read. The renderer turns this into markdown; it never presents a
63
+ * claim the record does not support. */
64
+ export interface ReleaseNote {
65
+ version: string;
66
+ headline: string;
67
+ plain_md: string;
68
+ formal_md: string;
69
+ claims: ReleaseNoteClaim[];
70
+ unreadable?: string[];
48
71
  }
49
72
  /**
50
73
  * Compile a ReleaseRecord per v* tag, oldest first, reading every field AT the tag. Throws — never
51
74
  * returns `[]` — when `tree_root` is not a git repository, or is one that holds no v* tag: an empty
52
75
  * list would read as "this project has no releases", a different and false claim from "there is no
53
76
  * repository to read" or "there are no tags yet".
77
+ *
78
+ * With `pending: { version }`, ONE further record is appended for the commits since the last tag,
79
+ * compiled through the same path as a tagged release (tag = `v<version>`, date/commits/laws/surface
80
+ * read from HEAD against the last tag) and marked `pending: true`. It is the record the tag WOULD
81
+ * carry once cut — the package can then ship the history it is itself part of. A pending version a tag
82
+ * already holds is refused by name, rather than emit two records for one version.
54
83
  */
55
84
  export declare function compileReleases(opts: {
56
85
  tree_root: string;
86
+ pending?: {
87
+ version: string;
88
+ };
57
89
  }): ReleaseRecord[];
90
+ /** The whole release history as a stable JSON document, NEWEST first — the file the package ships so
91
+ * the changelog UI reads a settled artifact rather than shelling out to git. Pretty-printed (2-space)
92
+ * with a single trailing newline, byte-identical for the same inputs. Same options as
93
+ * `compileReleases`, so a pending version leads the document. */
94
+ export declare function releasesJson(options: {
95
+ tree_root: string;
96
+ pending?: {
97
+ version: string;
98
+ };
99
+ }): string;
100
+ /** Render one release note to markdown: the headline as a heading, then the plain register, then the
101
+ * formal register, then an evidence section with one row per claim. Every field the note declares is
102
+ * rendered; a surface named in `unreadable` is STATED as unreadable, never omitted. A claim whose
103
+ * `evidence` path does not resolve in the record, or resolves to a different value than its `value`,
104
+ * is marked UNSUPPORTED naming what the record actually holds — it is never dropped and never shown
105
+ * as if evidenced. The rendering is derived from the NOTE: no evidence row appears that the note did
106
+ * not claim (I2). */
107
+ export declare function renderReleaseNote(note: ReleaseNote, record: ReleaseRecord): string;
@@ -228,11 +228,52 @@ function surfacesAtTag(root, tag) {
228
228
  laws: parseLaws(showAtTag(root, tag, "scripts/laws.sh")),
229
229
  };
230
230
  }
231
+ /** Assemble one record from an already-parsed surface bundle. `ref` is the git ref the date and the
232
+ * commit range END are read from — a tag for a settled release, `HEAD` for the pending one — and
233
+ * `rangeStart` is the predecessor the range and the surface diff run against (`null` for the earliest
234
+ * release, which reports its whole surface as added). Pulling this out of the loop lets the pending
235
+ * record be compiled through EXACTLY the same path as a tagged one, so the two can only differ in the
236
+ * `pending` flag (I1). `laws.before` is filled by the caller's chaining pass. */
237
+ function assembleRecord(root, meta, after, before) {
238
+ // F1 — a surface whose FILE was present but yielded nothing readable is NAMED, so a bare `null` is
239
+ // never mistaken for "nothing changed"; an absent file is not named. mcp.ts backs two surface keys.
240
+ const surfaceUnread = [];
241
+ if (after.mcpPresent && after.mcp === null)
242
+ surfaceUnread.push("mcp_tools", "mcp_tool_args");
243
+ if (after.cliPresent && after.cli === null)
244
+ surfaceUnread.push("cli_flags");
245
+ if (after.envPresent && after.env === null)
246
+ surfaceUnread.push("env_vars");
247
+ surfaceUnread.sort();
248
+ return {
249
+ version: meta.version,
250
+ tag: meta.tag,
251
+ date: gitCapture(root, ["log", "-1", "--format=%cI", meta.ref]).trim(),
252
+ commits: rangeCommits(root, meta.rangeStart, meta.ref),
253
+ bump: rangeBump(root, meta.rangeStart, meta.ref),
254
+ laws: { before: null, after: after.laws.laws, files: after.laws.files },
255
+ surface: {
256
+ mcp_tools: diffSurface(after.mcp ? after.mcp.tools : null, before?.mcp ? before.mcp.tools : null),
257
+ mcp_tool_args: diffSurface(after.mcp ? after.mcp.args : null, before?.mcp ? before.mcp.args : null),
258
+ cli_flags: diffSurface(after.cli, before?.cli ?? null),
259
+ env_vars: diffSurface(after.env, before?.env ?? null),
260
+ domain_types: diffSurface(after.domainTypes, before?.domainTypes ?? null),
261
+ },
262
+ surface_unread: surfaceUnread,
263
+ pending: meta.pending,
264
+ };
265
+ }
231
266
  /**
232
267
  * Compile a ReleaseRecord per v* tag, oldest first, reading every field AT the tag. Throws — never
233
268
  * returns `[]` — when `tree_root` is not a git repository, or is one that holds no v* tag: an empty
234
269
  * list would read as "this project has no releases", a different and false claim from "there is no
235
270
  * repository to read" or "there are no tags yet".
271
+ *
272
+ * With `pending: { version }`, ONE further record is appended for the commits since the last tag,
273
+ * compiled through the same path as a tagged release (tag = `v<version>`, date/commits/laws/surface
274
+ * read from HEAD against the last tag) and marked `pending: true`. It is the record the tag WOULD
275
+ * carry once cut — the package can then ship the history it is itself part of. A pending version a tag
276
+ * already holds is refused by name, rather than emit two records for one version.
236
277
  */
237
278
  export function compileReleases(opts) {
238
279
  const root = opts.tree_root;
@@ -253,48 +294,121 @@ export function compileReleases(opts) {
253
294
  if (tags.length === 0) {
254
295
  throw new Error(`compileReleases: "${root}" is a git repository but holds no v* tags — there are no releases to compile`);
255
296
  }
297
+ // F1 (history) — a pending version a tag already holds would be two records for one version. Refuse
298
+ // by name, before any compilation, naming both the version and the tag that already holds it.
299
+ const pendingTag = opts.pending ? `v${opts.pending.version}` : null;
300
+ if (opts.pending && pendingTag !== null && tags.includes(pendingTag)) {
301
+ throw new Error(`compileReleases: pending version ${opts.pending.version} is already released as tag ${pendingTag} — refusing to emit a second record for one version`);
302
+ }
256
303
  const records = [];
257
304
  let before = null;
258
305
  for (let i = 0; i < tags.length; i++) {
259
306
  const tag = tags[i];
260
307
  const prevTag = i > 0 ? tags[i - 1] : null;
261
308
  // Parse every surface at this tag ONCE; the previous iteration's bundle is this tag's "before",
262
- // so no tag's content is fetched twice. Presence (was the file there?) is kept apart from
263
- // readability (could it be parsed?) — the distinction F1's surface_unread turns on.
309
+ // so no tag's content is fetched twice. Presence and readability are kept apart inside assemble.
264
310
  const after = surfacesAtTag(root, tag);
265
- // F1 a surface whose FILE was present at the tag but yielded nothing readable is NAMED, so a
266
- // bare `null` is never mistaken for "nothing changed". A surface whose file is absent is not
267
- // named — absence is not the same as unread. mcp.ts backs two surface keys.
268
- const surfaceUnread = [];
269
- if (after.mcpPresent && after.mcp === null)
270
- surfaceUnread.push("mcp_tools", "mcp_tool_args");
271
- if (after.cliPresent && after.cli === null)
272
- surfaceUnread.push("cli_flags");
273
- if (after.envPresent && after.env === null)
274
- surfaceUnread.push("env_vars");
275
- surfaceUnread.sort();
276
- records.push({
277
- version: tag.replace(/^v/, ""),
278
- tag,
279
- date: gitCapture(root, ["log", "-1", "--format=%cI", tag]).trim(),
280
- commits: rangeCommits(root, prevTag, tag),
281
- bump: rangeBump(root, prevTag, tag),
282
- laws: { before: null, after: after.laws.laws, files: after.laws.files },
283
- surface: {
284
- mcp_tools: diffSurface(after.mcp ? after.mcp.tools : null, before?.mcp ? before.mcp.tools : null),
285
- mcp_tool_args: diffSurface(after.mcp ? after.mcp.args : null, before?.mcp ? before.mcp.args : null),
286
- cli_flags: diffSurface(after.cli, before?.cli ?? null),
287
- env_vars: diffSurface(after.env, before?.env ?? null),
288
- domain_types: diffSurface(after.domainTypes, before?.domainTypes ?? null),
289
- },
290
- surface_unread: surfaceUnread,
291
- });
311
+ records.push(assembleRecord(root, { version: tag.replace(/^v/, ""), tag, ref: tag, rangeStart: prevTag, pending: false }, after, before));
292
312
  before = after;
293
313
  }
294
- // laws.before chains from the predecessor's after; the earliest tag keeps null.
314
+ // The pending release: HEAD compiled as if it were the tag `v<version>`, diffed against the last
315
+ // tag (which `before` still holds), marked pending. Same path as a tagged record, so it equals the
316
+ // record that tag would carry save the flag.
317
+ if (opts.pending && pendingTag !== null) {
318
+ const lastTag = tags[tags.length - 1];
319
+ const headSurfaces = surfacesAtTag(root, "HEAD");
320
+ records.push(assembleRecord(root, { version: opts.pending.version, tag: pendingTag, ref: "HEAD", rangeStart: lastTag, pending: true }, headSurfaces, before));
321
+ }
322
+ // laws.before chains from the predecessor's after; the earliest release keeps null.
295
323
  for (let i = 1; i < records.length; i++) {
296
324
  records[i].laws.before = records[i - 1].laws.after;
297
325
  }
298
326
  return records;
299
327
  }
328
+ /** The whole release history as a stable JSON document, NEWEST first — the file the package ships so
329
+ * the changelog UI reads a settled artifact rather than shelling out to git. Pretty-printed (2-space)
330
+ * with a single trailing newline, byte-identical for the same inputs. Same options as
331
+ * `compileReleases`, so a pending version leads the document. */
332
+ export function releasesJson(options) {
333
+ const releases = compileReleases(options).reverse();
334
+ return JSON.stringify({ generated_from: "compileReleases", releases }, null, 2) + "\n";
335
+ }
336
+ /** Resolve a dotted/indexed evidence path (`laws.after`, `surface.cli_flags.added[0]`) against a
337
+ * record. Returns whether the path resolved and the value it reached — the plain way: a segment is a
338
+ * key, and any `[n]` on it is an array index applied in order. A key missing on an object, or an
339
+ * index off the end of an array, does not resolve. */
340
+ function resolveEvidencePath(record, path) {
341
+ let cur = record;
342
+ for (const segment of path.split(".")) {
343
+ const keyMatch = /^[^[\]]*/.exec(segment);
344
+ const key = keyMatch ? keyMatch[0] : "";
345
+ const steps = [];
346
+ if (key !== "")
347
+ steps.push(key);
348
+ const idxRe = /\[(\d+)\]/g;
349
+ let idx;
350
+ while ((idx = idxRe.exec(segment)) !== null)
351
+ steps.push(Number(idx[1]));
352
+ for (const step of steps) {
353
+ if (cur === null || cur === undefined)
354
+ return { resolved: false, value: undefined };
355
+ if (typeof step === "number") {
356
+ if (!Array.isArray(cur) || step >= cur.length)
357
+ return { resolved: false, value: undefined };
358
+ cur = cur[step];
359
+ }
360
+ else {
361
+ if (typeof cur !== "object" || cur === null || !(step in cur)) {
362
+ return { resolved: false, value: undefined };
363
+ }
364
+ cur = cur[step];
365
+ }
366
+ }
367
+ }
368
+ return { resolved: true, value: cur };
369
+ }
370
+ /** The value at an evidence path, as the string a claim's `value` is compared against: a string is
371
+ * itself, anything else is JSON-stringified so `150` reads as `"150"` and an array reads as its JSON. */
372
+ function evidenceValueString(value) {
373
+ return typeof value === "string" ? value : JSON.stringify(value);
374
+ }
375
+ /** Render one release note to markdown: the headline as a heading, then the plain register, then the
376
+ * formal register, then an evidence section with one row per claim. Every field the note declares is
377
+ * rendered; a surface named in `unreadable` is STATED as unreadable, never omitted. A claim whose
378
+ * `evidence` path does not resolve in the record, or resolves to a different value than its `value`,
379
+ * is marked UNSUPPORTED naming what the record actually holds — it is never dropped and never shown
380
+ * as if evidenced. The rendering is derived from the NOTE: no evidence row appears that the note did
381
+ * not claim (I2). */
382
+ export function renderReleaseNote(note, record) {
383
+ const lines = [];
384
+ lines.push(`# ${note.headline}`, "");
385
+ lines.push(note.plain_md, "");
386
+ lines.push(note.formal_md, "");
387
+ lines.push("## Evidence", "");
388
+ for (const claim of note.claims) {
389
+ const { resolved, value } = resolveEvidencePath(record, claim.evidence);
390
+ const held = resolved ? evidenceValueString(value) : null;
391
+ const claimed = claim.value;
392
+ // Supported iff the path resolved AND (no value was claimed, or the claimed value matches what the
393
+ // record holds). Otherwise the row is marked UNSUPPORTED naming what the record actually holds.
394
+ const supported = resolved && (claimed === undefined || held === claimed);
395
+ if (supported) {
396
+ lines.push(`- ${claim.text} — \`${claim.evidence}\` → \`${held ?? ""}\``);
397
+ }
398
+ else if (!resolved) {
399
+ lines.push(`- ${claim.text} — \`${claim.evidence}\` → UNSUPPORTED (the path does not resolve in the record)`);
400
+ }
401
+ else {
402
+ lines.push(`- ${claim.text} — \`${claim.evidence}\` → UNSUPPORTED (the record holds \`${held}\`)`);
403
+ }
404
+ }
405
+ const unreadable = note.unreadable ?? [];
406
+ if (unreadable.length > 0) {
407
+ lines.push("", "## Unreadable surfaces", "");
408
+ for (const surface of unreadable) {
409
+ lines.push(`- \`${surface}\` could not be read at this release`);
410
+ }
411
+ }
412
+ return lines.join("\n") + "\n";
413
+ }
300
414
  //# sourceMappingURL=releases.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"releases.js","sourceRoot":"","sources":["../../src/releases.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"releases.js","sourceRoot":"","sources":["../../src/releases.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /** Engine semver. Keep in lockstep with package.json `version` (enforced by test). */
2
- export declare const COLTRANE_VERSION = "0.24.33";
2
+ export declare const COLTRANE_VERSION = "0.24.34";
3
3
  /**
4
4
  * The commit this engine checkout is sitting on, or null when it can't be determined.
5
5
  *
@@ -17,7 +17,7 @@ import { existsSync, readFileSync, statSync } from "node:fs";
17
17
  import { dirname, join, resolve } from "node:path";
18
18
  import { fileURLToPath } from "node:url";
19
19
  /** Engine semver. Keep in lockstep with package.json `version` (enforced by test). */
20
- export const COLTRANE_VERSION = "0.24.33";
20
+ export const COLTRANE_VERSION = "0.24.34";
21
21
  /**
22
22
  * The commit this engine checkout is sitting on, or null when it can't be determined.
23
23
  *
@@ -0,0 +1,50 @@
1
+ {
2
+ "slug": "release-note-verdict",
3
+ "version": 1,
4
+ "extends": "Verdict",
5
+ "domain": "release",
6
+ "status": "active",
7
+ "schema": {
8
+ "type": "object",
9
+ "properties": {
10
+ "version": {
11
+ "type": "string"
12
+ },
13
+ "pass": {
14
+ "type": "boolean"
15
+ },
16
+ "unsupported_claims": {
17
+ "type": "array",
18
+ "description": "claims whose evidence path is absent from the record, or whose value disagrees with it — verbatim, with what the record actually says",
19
+ "items": {
20
+ "type": "object"
21
+ }
22
+ },
23
+ "missing_from_prose": {
24
+ "type": "array",
25
+ "description": "surface changes the record carries that neither register mentions",
26
+ "items": {
27
+ "type": "string"
28
+ }
29
+ },
30
+ "register_faults": {
31
+ "type": "array",
32
+ "description": "plain prose carrying internal vocabulary, or a formal register disagreeing with the record's own fields",
33
+ "items": {
34
+ "type": "string"
35
+ }
36
+ },
37
+ "checks": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "object"
41
+ }
42
+ }
43
+ }
44
+ },
45
+ "required_fields": [
46
+ "version",
47
+ "pass",
48
+ "checks"
49
+ ]
50
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "slug": "release-note",
3
+ "version": 1,
4
+ "extends": "Artifact",
5
+ "domain": "release",
6
+ "status": "active",
7
+ "schema": {
8
+ "type": "object",
9
+ "properties": {
10
+ "version": {
11
+ "type": "string"
12
+ },
13
+ "headline": {
14
+ "type": "string",
15
+ "description": "one line a reader can scan in a list, in plain language; names what changed, never 'various improvements'"
16
+ },
17
+ "plain_md": {
18
+ "type": "string",
19
+ "description": "the plain register: what this release means for someone using coltrane, in their words (a tool they call, a flag they pass, a variable they set). No internal vocabulary, no gig ids, no costs."
20
+ },
21
+ "formal_md": {
22
+ "type": "string",
23
+ "description": "the formal register: version, tag, date, bump, the commits by subject, the law counts at both ends, and each surface change as it stands in the record"
24
+ },
25
+ "claims": {
26
+ "type": "array",
27
+ "description": "every factual claim the prose makes, each paired with the field of the release-record that supports it. A claim with no evidence is what the verify seat refuses.",
28
+ "items": {
29
+ "type": "object",
30
+ "properties": {
31
+ "text": {
32
+ "type": "string",
33
+ "description": "the claim as the prose states it"
34
+ },
35
+ "evidence": {
36
+ "type": "string",
37
+ "description": "the record path that supports it, e.g. surface.cli_flags.added[0] or laws.after"
38
+ },
39
+ "value": {
40
+ "type": "string",
41
+ "description": "the value read at that path"
42
+ }
43
+ },
44
+ "required": [
45
+ "text",
46
+ "evidence"
47
+ ]
48
+ }
49
+ },
50
+ "unreadable": {
51
+ "type": "array",
52
+ "description": "the surfaces the record marks unread, named for the reader so a gap is stated rather than implied",
53
+ "items": {
54
+ "type": "string"
55
+ }
56
+ }
57
+ }
58
+ },
59
+ "required_fields": [
60
+ "version",
61
+ "headline",
62
+ "plain_md",
63
+ "formal_md",
64
+ "claims"
65
+ ]
66
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "slug": "release-record",
3
+ "version": 1,
4
+ "extends": "Signal",
5
+ "domain": "release",
6
+ "status": "active",
7
+ "schema": {
8
+ "type": "object",
9
+ "properties": {
10
+ "version": {
11
+ "type": "string",
12
+ "description": "the semver this release carries, without the v prefix"
13
+ },
14
+ "tag": {
15
+ "type": "string"
16
+ },
17
+ "date": {
18
+ "type": "string",
19
+ "description": "the tag's commit date, ISO"
20
+ },
21
+ "bump": {
22
+ "type": "string",
23
+ "description": "major | minor | patch, derived from the range's commit subjects"
24
+ },
25
+ "commits": {
26
+ "type": "array",
27
+ "description": "{sha, subject}, oldest first, for the range since the previous tag",
28
+ "items": {
29
+ "type": "object"
30
+ }
31
+ },
32
+ "laws": {
33
+ "type": "object",
34
+ "description": "{before, after, files} read from scripts/laws.sh at each end; null where a count could not be read"
35
+ },
36
+ "surface": {
37
+ "type": "object",
38
+ "description": "per surface (mcp_tools, mcp_tool_args, cli_flags, env_vars, domain_types) a sorted {added, removed}, or null when that surface could not be read at this tag"
39
+ },
40
+ "surface_unread": {
41
+ "type": "array",
42
+ "description": "the surfaces whose file was present but yielded nothing readable",
43
+ "items": {
44
+ "type": "string"
45
+ }
46
+ },
47
+ "source": {
48
+ "type": "string"
49
+ }
50
+ }
51
+ },
52
+ "required_fields": [
53
+ "version",
54
+ "tag",
55
+ "date",
56
+ "commits",
57
+ "surface"
58
+ ]
59
+ }