@eir-labs/coltrane 0.24.32 → 0.24.33
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/dist/src/cli.d.ts +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/releases.d.ts +57 -0
- package/dist/src/releases.js +300 -0
- package/dist/src/releases.js.map +1 -0
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +1 -1
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.
|
|
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";
|
|
38
38
|
interface Parsed {
|
|
39
39
|
cmd: string | undefined;
|
|
40
40
|
positional: string[];
|
package/dist/src/index.d.ts
CHANGED
package/dist/src/index.js
CHANGED
|
@@ -57,4 +57,8 @@ export * from "./document_factory.js";
|
|
|
57
57
|
// caller: "wire it or export it." Wiring is a separate act; reachability is not.
|
|
58
58
|
export * from "./local_queue.js";
|
|
59
59
|
export * from "./residency.js";
|
|
60
|
+
// The release-record compiler — reads, at each v* tag, the surface an integrator sees (MCP tools, CLI
|
|
61
|
+
// flags, worker env, domain-type versions, law counts) and reports what each release changed. A public
|
|
62
|
+
// entrypoint, exported here so the public-entrypoint rule can name it.
|
|
63
|
+
export * from "./releases.js";
|
|
60
64
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,6FAA6F;AAC7F,iGAAiG;AACjG,qFAAqF;AACrF,2FAA2F;AAC3F,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AAEtC,8FAA8F;AAC9F,mGAAmG;AACnG,8FAA8F;AAC9F,oGAAoG;AACpG,+FAA+F;AAC/F,iFAAiF;AACjF,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,6FAA6F;AAC7F,iGAAiG;AACjG,qFAAqF;AACrF,2FAA2F;AAC3F,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AAEtC,8FAA8F;AAC9F,mGAAmG;AACnG,8FAA8F;AAC9F,oGAAoG;AACpG,+FAA+F;AAC/F,iFAAiF;AACjF,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAE/B,sGAAsG;AACtG,uGAAuG;AACvG,uEAAuE;AACvE,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/** One commit in a release's range: its full sha and its subject line. */
|
|
2
|
+
export interface Commit {
|
|
3
|
+
sha: string;
|
|
4
|
+
subject: string;
|
|
5
|
+
}
|
|
6
|
+
/** A surface delta against the predecessor tag: both lists sorted, plain strings. `null` when the
|
|
7
|
+
* file the list is read from was absent or unparseable AT THE TAG — distinguishable from an empty
|
|
8
|
+
* list, which means "present and nothing changed". */
|
|
9
|
+
export type SurfaceList = {
|
|
10
|
+
added: string[];
|
|
11
|
+
removed: string[];
|
|
12
|
+
} | null;
|
|
13
|
+
/** The surface an integrator sees, keyed by what it is read from. */
|
|
14
|
+
export interface ReleaseSurface {
|
|
15
|
+
mcp_tools: SurfaceList;
|
|
16
|
+
mcp_tool_args: SurfaceList;
|
|
17
|
+
cli_flags: SurfaceList;
|
|
18
|
+
env_vars: SurfaceList;
|
|
19
|
+
domain_types: SurfaceList;
|
|
20
|
+
}
|
|
21
|
+
/** One release, compiled from git at a v* tag. */
|
|
22
|
+
export interface ReleaseRecord {
|
|
23
|
+
/** The semver — the tag without its `v`. */
|
|
24
|
+
version: string;
|
|
25
|
+
/** The ref. */
|
|
26
|
+
tag: string;
|
|
27
|
+
/** The tag's commit date, ISO. */
|
|
28
|
+
date: string;
|
|
29
|
+
/** The range since the previous tag, oldest first; the earliest tag's range is every commit up to it. */
|
|
30
|
+
commits: Commit[];
|
|
31
|
+
/** Derived the scripts/next_version.mjs way from the range's subjects and trailers, never the tag numbers. */
|
|
32
|
+
bump: "major" | "minor" | "patch";
|
|
33
|
+
/** Law/file counts read from scripts/laws.sh: `after` at this tag, `before` the predecessor's `after`
|
|
34
|
+
* (`null` for the earliest tag — there is no predecessor count, and `0` would falsely claim an
|
|
35
|
+
* empty suite the day before). */
|
|
36
|
+
laws: {
|
|
37
|
+
before: number | null;
|
|
38
|
+
after: number | null;
|
|
39
|
+
files: number | null;
|
|
40
|
+
};
|
|
41
|
+
surface: ReleaseSurface;
|
|
42
|
+
/** The surface keys that were PRESENT at the tag but yielded no readable entry, sorted. A surface
|
|
43
|
+
* whose FILE is absent is NOT unread — it is simply absent, and its list is `null` for that reason;
|
|
44
|
+
* only a file that was there and could not be parsed is named here. Always present, empty when
|
|
45
|
+
* every present surface read. Named so a changelog can say "could not read the tool registry here"
|
|
46
|
+
* instead of showing a silent gap that reads as "nothing changed". */
|
|
47
|
+
surface_unread: string[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Compile a ReleaseRecord per v* tag, oldest first, reading every field AT the tag. Throws — never
|
|
51
|
+
* returns `[]` — when `tree_root` is not a git repository, or is one that holds no v* tag: an empty
|
|
52
|
+
* list would read as "this project has no releases", a different and false claim from "there is no
|
|
53
|
+
* repository to read" or "there are no tags yet".
|
|
54
|
+
*/
|
|
55
|
+
export declare function compileReleases(opts: {
|
|
56
|
+
tree_root: string;
|
|
57
|
+
}): ReleaseRecord[];
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
// THE RELEASE RECORD, COMPILED FROM GIT (contract-release-record-v1).
|
|
2
|
+
//
|
|
3
|
+
// The measured problem: `.github/workflows/publish.yml` cuts a release on every push to main and
|
|
4
|
+
// derives the version from conventional-commit prefixes. Across v0.24.20..v0.24.31, 0 of 11 subjects
|
|
5
|
+
// carried a prefix, so every tag shipped as a patch — including one that added a domain-type version,
|
|
6
|
+
// two CLI flags, a gig_dispatch argument and three refusal kinds. A changelog grouped by the bump
|
|
7
|
+
// renders one flat list, and the bump cannot be trusted to say what changed.
|
|
8
|
+
//
|
|
9
|
+
// So the repo answers the question MECHANICALLY. Every surface an integrator sees is data readable at
|
|
10
|
+
// any tag with `git show <tag>:<path>`: the MCP tool registry (src/mcp.ts), the CLI help block
|
|
11
|
+
// (src/cli.ts), the worker env table (src/worker_env.ts), each domain type's version
|
|
12
|
+
// (domain_types/*.json) and the law/file counts (scripts/laws.sh). `compileReleases({ tree_root })`
|
|
13
|
+
// reads those at each v* tag and reports a ReleaseRecord per tag: derived, deterministic, refusing
|
|
14
|
+
// rather than guessing.
|
|
15
|
+
//
|
|
16
|
+
// Every git read goes through execFileSync("git", ["-C", tree_root, ...]) — no network, no shell
|
|
17
|
+
// string, no process.cwd(), and everything is read AT THE TAG so a record compiled today equals the
|
|
18
|
+
// record compiled the day the tag was cut. The parse is regex over the text at that revision, in the
|
|
19
|
+
// style of src/repo_index.ts (no AST): an old tag's module may not compile against today's types, so
|
|
20
|
+
// the surface is text at that revision, never an import of it.
|
|
21
|
+
import { execFileSync } from "node:child_process";
|
|
22
|
+
// ── the conventional-commit bump rule, byte-for-byte scripts/next_version.mjs ────────────────────────
|
|
23
|
+
const BREAKING = /^[a-zA-Z]+(\([^)]*\))?!:/;
|
|
24
|
+
const BREAKING_TRAILER = /^BREAKING[ -]CHANGE:/;
|
|
25
|
+
const FEAT = /^feat(\([^)]*\))?:/;
|
|
26
|
+
/** Run git under `tree_root`, capturing stdout. Throws on a non-zero exit (an absent path, a bad ref),
|
|
27
|
+
* which the surface readers catch and turn into `null`. stderr is discarded so a missing file does not
|
|
28
|
+
* spam the caller's console. */
|
|
29
|
+
function gitCapture(root, args) {
|
|
30
|
+
return execFileSync("git", ["-C", root, ...args], {
|
|
31
|
+
encoding: "utf8",
|
|
32
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
33
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/** The text of `<path>` AT `<tag>`, or `null` when it does not exist there. */
|
|
37
|
+
function showAtTag(root, tag, path) {
|
|
38
|
+
try {
|
|
39
|
+
return gitCapture(root, ["show", `${tag}:${path}`]);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** The MCP tool slugs and their advertised argument names from src/mcp.ts. Read from the tool
|
|
46
|
+
* ENTRIES themselves — any `{ slug: "<name>" … input_schema: obj({ … }) }` object — so the array's
|
|
47
|
+
* NAME, its type annotation and any `.map()` export are irrelevant: the real registry is a typed
|
|
48
|
+
* `TOOL_DEFS` array exported through `.map()`, and the simplified control fixture is
|
|
49
|
+
* `export const MCP_TOOLS = [`, and both parse the same way. `null` when no such entry can be read
|
|
50
|
+
* (the file is absent, or present but not a tool registry). Args are `"<slug>.<argument>"`. */
|
|
51
|
+
function parseMcp(content) {
|
|
52
|
+
if (content === null)
|
|
53
|
+
return null;
|
|
54
|
+
const tools = new Set();
|
|
55
|
+
const args = new Set();
|
|
56
|
+
const toolRe = /slug:\s*"([^"]+)"[\s\S]*?input_schema:\s*obj\(\{([\s\S]*?)\}\)/g;
|
|
57
|
+
let m;
|
|
58
|
+
while ((m = toolRe.exec(content)) !== null) {
|
|
59
|
+
const slug = m[1];
|
|
60
|
+
tools.add(slug);
|
|
61
|
+
// TOP-LEVEL keys only. A nested object argument (`budget: { type: "object", properties: { … } }`)
|
|
62
|
+
// carries JSON-Schema keywords, and a flat scan reports `type` and `properties` as arguments the
|
|
63
|
+
// tool accepts — measured on this repo's own gig_dispatch. Walk the body tracking brace depth and
|
|
64
|
+
// take a key only at depth 0; the nested argument is still named, by its own key.
|
|
65
|
+
const body = m[2];
|
|
66
|
+
let depth = 0;
|
|
67
|
+
let key = "";
|
|
68
|
+
for (let i = 0; i < body.length; i++) {
|
|
69
|
+
const ch = body[i];
|
|
70
|
+
if (ch === "{" || ch === "(" || ch === "[") {
|
|
71
|
+
depth++;
|
|
72
|
+
key = "";
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (ch === "}" || ch === ")" || ch === "]") {
|
|
76
|
+
depth = Math.max(0, depth - 1);
|
|
77
|
+
key = "";
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (depth > 0)
|
|
81
|
+
continue;
|
|
82
|
+
if (/[A-Za-z0-9_$]/.test(ch)) {
|
|
83
|
+
key += ch;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (ch === ":" && key.length > 0)
|
|
87
|
+
args.add(`${slug}.${key}`);
|
|
88
|
+
if (!/\s/.test(ch) || ch === ",")
|
|
89
|
+
key = "";
|
|
90
|
+
if (/\s/.test(ch) && key.length > 0)
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// No tool ENTRY could be read — the file is present but not a tool registry. `null`, so the record
|
|
95
|
+
// NAMES it unread rather than passing an empty tool set off as "nothing changed".
|
|
96
|
+
if (tools.size === 0)
|
|
97
|
+
return null;
|
|
98
|
+
return { tools, args };
|
|
99
|
+
}
|
|
100
|
+
/** The long `--flags` from src/cli.ts. A flag is any line whose FIRST non-space characters are
|
|
101
|
+
* `--<name>`, anywhere in the file; the leading token is taken WITHOUT its `<placeholder>`
|
|
102
|
+
* (`--effort <low|…>` → `--effort`). No `HELP`/`USAGE` constant is required — the real block is a
|
|
103
|
+
* `USAGE` template literal — and a `--` token that is NOT the start of its line (`--check` inside a
|
|
104
|
+
* `coltrane …` usage example) is not a flag. `null` when no flag line can be read. */
|
|
105
|
+
function parseCli(content) {
|
|
106
|
+
if (content === null)
|
|
107
|
+
return null;
|
|
108
|
+
const flags = new Set();
|
|
109
|
+
const lineRe = /^[ \t]*(--[a-z][a-z0-9-]*)/;
|
|
110
|
+
for (const line of content.split("\n")) {
|
|
111
|
+
const m = lineRe.exec(line);
|
|
112
|
+
if (m)
|
|
113
|
+
flags.add(m[1]);
|
|
114
|
+
}
|
|
115
|
+
if (flags.size === 0)
|
|
116
|
+
return null;
|
|
117
|
+
return flags;
|
|
118
|
+
}
|
|
119
|
+
/** The variable names from the worker environment contract in src/worker_env.ts, read from the
|
|
120
|
+
* `name: "…"` values of the ENTRIES — not from the bare identifier. A file that only MENTIONS
|
|
121
|
+
* WORKER_ENV_CONTRACT (a comment, a type whose `name: string;` field carries no quotes) but declares
|
|
122
|
+
* no entry array yields nothing, so it reads `null` (present-but-unread, NAMED by the record) rather
|
|
123
|
+
* than an empty set that would render the predecessor's whole env table as removed. `null` also when
|
|
124
|
+
* the file is absent. */
|
|
125
|
+
function parseEnv(content) {
|
|
126
|
+
if (content === null)
|
|
127
|
+
return null;
|
|
128
|
+
const names = new Set();
|
|
129
|
+
const re = /name:\s*"([^"]+)"/g;
|
|
130
|
+
let m;
|
|
131
|
+
while ((m = re.exec(content)) !== null)
|
|
132
|
+
names.add(m[1]);
|
|
133
|
+
if (names.size === 0)
|
|
134
|
+
return null;
|
|
135
|
+
return names;
|
|
136
|
+
}
|
|
137
|
+
/** EXPECTED_LAWS and EXPECTED_FILES from scripts/laws.sh, each `null` when the count is absent. */
|
|
138
|
+
function parseLaws(content) {
|
|
139
|
+
if (content === null)
|
|
140
|
+
return { laws: null, files: null };
|
|
141
|
+
const lm = /EXPECTED_LAWS="\$\{EXPECTED_LAWS:-(\d+)\}"/.exec(content);
|
|
142
|
+
const fm = /EXPECTED_FILES="\$\{EXPECTED_FILES:-(\d+)\}"/.exec(content);
|
|
143
|
+
return { laws: lm ? Number(lm[1]) : null, files: fm ? Number(fm[1]) : null };
|
|
144
|
+
}
|
|
145
|
+
/** `"<slug>@<version>"` per file under domain_types/ AT `<tag>`. `null` when no domain_types directory
|
|
146
|
+
* exists at the tag; an individual unparseable file contributes nothing rather than nulling the set. */
|
|
147
|
+
function parseDomainTypes(root, tag) {
|
|
148
|
+
let listing;
|
|
149
|
+
try {
|
|
150
|
+
listing = gitCapture(root, ["ls-tree", "-r", "--name-only", tag, "domain_types"]);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
const files = listing.split("\n").filter((p) => p.endsWith(".json"));
|
|
156
|
+
if (files.length === 0)
|
|
157
|
+
return null;
|
|
158
|
+
const set = new Set();
|
|
159
|
+
for (const file of files) {
|
|
160
|
+
const content = showAtTag(root, tag, file);
|
|
161
|
+
if (content === null)
|
|
162
|
+
continue;
|
|
163
|
+
try {
|
|
164
|
+
const j = JSON.parse(content);
|
|
165
|
+
if (j.slug !== undefined && j.version !== undefined)
|
|
166
|
+
set.add(`${j.slug}@${j.version}`);
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
/* an unparseable domain-type file contributes nothing */
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return set;
|
|
173
|
+
}
|
|
174
|
+
/** The surface delta: everything in `after` not in `before` is added, and vice versa, both sorted.
|
|
175
|
+
* `null` when the file is absent/unparseable AT THE TAG (`after` is `null`); a `before` that is
|
|
176
|
+
* absent (an older release predating the file, or no predecessor at all) counts as the empty set, so
|
|
177
|
+
* the tag that introduced a file reports its whole contents as `added`, never `null`. */
|
|
178
|
+
function diffSurface(after, before) {
|
|
179
|
+
if (after === null)
|
|
180
|
+
return null;
|
|
181
|
+
const prev = before ?? new Set();
|
|
182
|
+
const added = [...after].filter((x) => !prev.has(x)).sort();
|
|
183
|
+
const removed = [...prev].filter((x) => !after.has(x)).sort();
|
|
184
|
+
return { added, removed };
|
|
185
|
+
}
|
|
186
|
+
/** The commits in `prev..tag`, oldest first; the earliest tag's range is every commit up to it. */
|
|
187
|
+
function rangeCommits(root, prevTag, tag) {
|
|
188
|
+
const range = prevTag ? `${prevTag}..${tag}` : tag;
|
|
189
|
+
const out = gitCapture(root, ["log", "--reverse", "--format=%H%x09%s", range]);
|
|
190
|
+
return out
|
|
191
|
+
.split("\n")
|
|
192
|
+
.filter(Boolean)
|
|
193
|
+
.map((line) => {
|
|
194
|
+
const tab = line.indexOf("\t");
|
|
195
|
+
return { sha: line.slice(0, tab), subject: line.slice(tab + 1) };
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
/** The bump for `prev..tag`, derived the scripts/next_version.mjs way over the range's full commit
|
|
199
|
+
* bodies (subjects and trailers): a `!:` prefix or a BREAKING-CHANGE trailer is major, a feat: is
|
|
200
|
+
* minor, everything else is patch. Highest bump wins. */
|
|
201
|
+
function rangeBump(root, prevTag, tag) {
|
|
202
|
+
const range = prevTag ? `${prevTag}..${tag}` : tag;
|
|
203
|
+
const body = gitCapture(root, ["log", "--format=%B", range]);
|
|
204
|
+
const lines = body.split("\n").map((l) => l.trim()).filter(Boolean);
|
|
205
|
+
let bump = "patch";
|
|
206
|
+
for (const line of lines) {
|
|
207
|
+
if (BREAKING.test(line) || BREAKING_TRAILER.test(line))
|
|
208
|
+
return "major";
|
|
209
|
+
if (FEAT.test(line))
|
|
210
|
+
bump = "minor";
|
|
211
|
+
}
|
|
212
|
+
return bump;
|
|
213
|
+
}
|
|
214
|
+
/** Read and parse every surface at `tag` with the minimum number of git reads — one `git show` per
|
|
215
|
+
* text surface, one `ls-tree` (+ a show per domain-type file) for domain_types, one for laws.sh. */
|
|
216
|
+
function surfacesAtTag(root, tag) {
|
|
217
|
+
const mcpContent = showAtTag(root, tag, "src/mcp.ts");
|
|
218
|
+
const cliContent = showAtTag(root, tag, "src/cli.ts");
|
|
219
|
+
const envContent = showAtTag(root, tag, "src/worker_env.ts");
|
|
220
|
+
return {
|
|
221
|
+
mcp: parseMcp(mcpContent),
|
|
222
|
+
mcpPresent: mcpContent !== null,
|
|
223
|
+
cli: parseCli(cliContent),
|
|
224
|
+
cliPresent: cliContent !== null,
|
|
225
|
+
env: parseEnv(envContent),
|
|
226
|
+
envPresent: envContent !== null,
|
|
227
|
+
domainTypes: parseDomainTypes(root, tag),
|
|
228
|
+
laws: parseLaws(showAtTag(root, tag, "scripts/laws.sh")),
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Compile a ReleaseRecord per v* tag, oldest first, reading every field AT the tag. Throws — never
|
|
233
|
+
* returns `[]` — when `tree_root` is not a git repository, or is one that holds no v* tag: an empty
|
|
234
|
+
* list would read as "this project has no releases", a different and false claim from "there is no
|
|
235
|
+
* repository to read" or "there are no tags yet".
|
|
236
|
+
*/
|
|
237
|
+
export function compileReleases(opts) {
|
|
238
|
+
const root = opts.tree_root;
|
|
239
|
+
// F2 — a tree_root that is not a git repository. Refuse by name rather than return [].
|
|
240
|
+
try {
|
|
241
|
+
execFileSync("git", ["-C", root, "rev-parse", "--git-dir"], {
|
|
242
|
+
stdio: ["ignore", "ignore", "ignore"],
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
throw new Error(`compileReleases: "${root}" is not a git repository — no releases to compile`);
|
|
247
|
+
}
|
|
248
|
+
// Tags in version order, oldest first.
|
|
249
|
+
const tags = gitCapture(root, ["tag", "--list", "v*", "--sort=version:refname"])
|
|
250
|
+
.split("\n")
|
|
251
|
+
.filter(Boolean);
|
|
252
|
+
// F2 — a git repository with no v* tag. Refuse by name rather than return [].
|
|
253
|
+
if (tags.length === 0) {
|
|
254
|
+
throw new Error(`compileReleases: "${root}" is a git repository but holds no v* tags — there are no releases to compile`);
|
|
255
|
+
}
|
|
256
|
+
const records = [];
|
|
257
|
+
let before = null;
|
|
258
|
+
for (let i = 0; i < tags.length; i++) {
|
|
259
|
+
const tag = tags[i];
|
|
260
|
+
const prevTag = i > 0 ? tags[i - 1] : null;
|
|
261
|
+
// 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.
|
|
264
|
+
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
|
+
});
|
|
292
|
+
before = after;
|
|
293
|
+
}
|
|
294
|
+
// laws.before chains from the predecessor's after; the earliest tag keeps null.
|
|
295
|
+
for (let i = 1; i < records.length; i++) {
|
|
296
|
+
records[i].laws.before = records[i - 1].laws.after;
|
|
297
|
+
}
|
|
298
|
+
return records;
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=releases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"releases.js","sourceRoot":"","sources":["../../src/releases.ts"],"names":[],"mappings":"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"}
|
package/dist/src/version.d.ts
CHANGED
|
@@ -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.
|
|
2
|
+
export declare const COLTRANE_VERSION = "0.24.33";
|
|
3
3
|
/**
|
|
4
4
|
* The commit this engine checkout is sitting on, or null when it can't be determined.
|
|
5
5
|
*
|
package/dist/src/version.js
CHANGED
|
@@ -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.
|
|
20
|
+
export const COLTRANE_VERSION = "0.24.33";
|
|
21
21
|
/**
|
|
22
22
|
* The commit this engine checkout is sitting on, or null when it can't be determined.
|
|
23
23
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eir-labs/coltrane",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.33",
|
|
4
4
|
"description": "A methodology engine \u2014 a typed substrate for defining agents, composing multi-phase standards, dispatching gigs, and sealing every output to a content-addressed ledger. Ships as an MCP server.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|