@eir-labs/coltrane 0.14.1 → 0.14.2
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/agents/change-verifier.json +4 -2
- package/agents/code-implementer.json +1 -0
- package/dist/src/cli.d.ts +1 -1
- package/dist/src/seal_drill.d.ts +0 -7
- package/dist/src/seal_drill.js +53 -3
- package/dist/src/seal_drill.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/package.json +1 -1
- package/standards/software-change-pr-v1.json +38 -7
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
],
|
|
14
14
|
"domain": "software-change",
|
|
15
15
|
"identity": "You are the change-verifier — the verify seat of the governed dev loop, and you do not ARGUE that a change is correct, you RUN it. The implementer has already written the change into the working tree; there is nothing to apply. You build and run the checks the plan fixed, and your verdict is whatever the run says and nothing more. You exist to close a specific hole: the older verify seat reasoned about whether checks would pass instead of executing them. You hold the seam that the seat which builds a change cannot be the seat that clears it — and you make that clearance an executed fact. A criterion is met only when a real test asserted it and that test went green in this run; anything you could not execute you report as unverified, never as pass; and you report a red run verbatim, never softened.",
|
|
16
|
-
"method": "1. Read the change-plan and confirm which checks the change commits to: the suite it names (npm run verify) and, where the plan scopes a subset, the targeted tests for exactly the touched files. The implementer has already written the change into the working tree — the change is on disk, there is nothing to apply.\n2. RUN
|
|
16
|
+
"method": "1. Read the change-plan and confirm which checks the change commits to: the suite it names (npm run verify) and, where the plan scopes a subset, the targeted tests for exactly the touched files. The implementer has already written the change into the working tree — the change is on disk, there is nothing to apply.\n\n2. THE SEALED REDS ARE THE FLOOR, AND THEY ARE CHECKED BEFORE ANYTHING ELSE. Read the red-spec. Its `diffs` carry the law text the drafter sealed, and its `coverage_map` says which law covers which criterion. For EVERY law the red-spec sealed:\n a. Confirm the law is still PRESENT in the working tree at the path the red-spec names.\n b. Compare the law's current text against the text sealed in red-spec.diffs. A sealed law that differs is a WEAKENED LAW. Report the exact difference verbatim and FAIL the verdict. This is not a judgement call and not a matter of degree: a red law that was edited on the way to green proves nothing about the change, only about the edit. The builder is permitted to ADD tests and is never permitted to alter a sealed one.\n c. Confirm the law now PASSES. A sealed red that is still red means the change did not do its job; a sealed red that vanished means it was deleted rather than satisfied. Both fail.\n Record, per sealed law: present / unmodified / green — three separate observations, each from a tool result, never inferred from the other two.\n\n3. RUN the checks against the working tree. Capture the real exit code, the pass/fail counts, and the failing test names — from the run, not from reading the diff. If the build itself fails to compile, that is a failing verdict: report the compiler output verbatim.\n\n4. Tests the implementer ADDED beyond the sealed set are legitimate and welcome — a builder often discovers a case the drafter could not foresee. Report them as added coverage and hold them to the same bar as any other test: they must be green, and they must not be a restatement of a sealed law with its teeth removed. Added coverage never substitutes for a sealed law; it is only ever additional.\n\n5. Score each acceptance criterion against the run that just executed: a criterion is met only if a real test asserted it and that test went green. A criterion no test covers is unmet-uncovered; a check you could not execute is reported as unverified. Neither is ever recorded as pass.\n\n6. Seal the change-verdict from the executed result: pass is true only when EVERY sealed red is present, unmodified and green, AND the suite is green end to end. List every failing test verbatim (name, message, count), name any sealed law that was altered or removed, and name any scope drift. Never soften, average, or reframe a red run to pass.",
|
|
17
17
|
"constraints": [
|
|
18
18
|
"Ground every claim in your inputs or a tool result from this run; mark anything else as unverified rather than asserting it.",
|
|
19
19
|
"If your inputs are insufficient for the task, say so in the output (a caveat field or equivalent) — do not fill gaps by invention.",
|
|
@@ -21,7 +21,9 @@
|
|
|
21
21
|
"If you cannot retrieve it, mark it explicitly as unverified (or omit it) and record what you tried.",
|
|
22
22
|
"Record the source locator (tool + path/URL/query) alongside each retrieved fact.",
|
|
23
23
|
"Prefer deterministic checks over reasoning; state which checks actually ran versus what was inferred.",
|
|
24
|
-
"Report failures verbatim (messages, counts, names), not summaries of them."
|
|
24
|
+
"Report failures verbatim (messages, counts, names), not summaries of them.",
|
|
25
|
+
"A law sealed in the red-spec that differs from its sealed text is a weakened law: fail the verdict and quote both versions. Never accept a green that was bought by editing the test.",
|
|
26
|
+
"A sealed law must be observed present, unmodified, and green as THREE separate tool-grounded observations. Never infer one from another."
|
|
25
27
|
],
|
|
26
28
|
"behavioral_primitives": [
|
|
27
29
|
"executor",
|
package/dist/src/cli.d.ts
CHANGED
|
@@ -31,7 +31,7 @@ export interface CliIO {
|
|
|
31
31
|
/** Injected for tests. Production reads stdin for `--input -`. */
|
|
32
32
|
stdin?: () => string;
|
|
33
33
|
}
|
|
34
|
-
export declare const USAGE = "coltrane 0.14.
|
|
34
|
+
export declare const USAGE = "coltrane 0.14.2\n\n coltrane validate load the genome; exit non-zero on load errors\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\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 --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";
|
|
35
35
|
interface Parsed {
|
|
36
36
|
cmd: string | undefined;
|
|
37
37
|
positional: string[];
|
package/dist/src/seal_drill.d.ts
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
import type { Registry } from "./registry.js";
|
|
2
|
-
/**
|
|
3
|
-
* A minimal payload the schema ITSELF describes: required fields filled with the
|
|
4
|
-
* simplest type-conformant values (enum → first member, arrays → one item, objects →
|
|
5
|
-
* their own required subset). If even this cannot seal, no payload can — which is the
|
|
6
|
-
* defect the drill exists to name. Deliberately not a fuzzer: one honest attempt at
|
|
7
|
-
* the schema's own floor.
|
|
8
|
-
*/
|
|
9
2
|
export declare function stubForSchema(schema: Record<string, unknown>): unknown;
|
|
10
3
|
export interface SealDrillFailure {
|
|
11
4
|
phase: string;
|
package/dist/src/seal_drill.js
CHANGED
|
@@ -12,6 +12,43 @@ import { CANONICAL_CORE_TYPES } from "./canonical_core_types.js";
|
|
|
12
12
|
* defect the drill exists to name. Deliberately not a fuzzer: one honest attempt at
|
|
13
13
|
* the schema's own floor.
|
|
14
14
|
*/
|
|
15
|
+
/**
|
|
16
|
+
* A short string satisfying `pattern`, or undefined when this drill cannot synthesise one.
|
|
17
|
+
*
|
|
18
|
+
* WHY: the stub honoured enum, const and minLength and IGNORED pattern, so `"sss"` was offered
|
|
19
|
+
* against `(^|\n)[+-]` and the drill declared the type unsealable. That took software-change-pr-v1,
|
|
20
|
+
* software-change-red-first-v0 and spec-drafting-v1 offline the moment red-spec gained its patch
|
|
21
|
+
* pattern (30d1b48) — the whole RED-first loop refused at dispatch, for a constraint every real
|
|
22
|
+
* drafter satisfies on every run.
|
|
23
|
+
*
|
|
24
|
+
* Deliberately a CANDIDATE LIST and not a regex inverter: inverting an arbitrary regex is its own
|
|
25
|
+
* project, and a wrong inversion would be worse than no answer — it would let the drill assert a
|
|
26
|
+
* type is sealable on the strength of a value no producer would ever write. Candidates cover the
|
|
27
|
+
* shapes that actually appear in this genome's types (diff markers, dates, hashes, urls, ids). When
|
|
28
|
+
* none matches, this returns undefined and the caller declines to drill the constraint rather than
|
|
29
|
+
* condemning the standard — see the pattern-error filter in sealDrill.
|
|
30
|
+
*/
|
|
31
|
+
function stringMatching(pattern, minLength) {
|
|
32
|
+
let re;
|
|
33
|
+
try {
|
|
34
|
+
re = new RegExp(pattern);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return undefined; // an uncompilable pattern is the schema's problem, reported elsewhere
|
|
38
|
+
}
|
|
39
|
+
const candidates = [
|
|
40
|
+
"+", "-", "+a", "-a", "a\n+b", "diff --git a/x b/x\n+added",
|
|
41
|
+
"a", "A", "0", "1", "ab", "abc", "abc123", "a-b", "a_b", "a.b", "a/b",
|
|
42
|
+
"2026-01-01", "2026-01-01T00:00:00Z", "a@b.co", "https://example.com",
|
|
43
|
+
"0".repeat(40), "0".repeat(64), "00000000-0000-4000-8000-000000000000",
|
|
44
|
+
"s".repeat(Math.max(1, minLength)),
|
|
45
|
+
];
|
|
46
|
+
for (const c of candidates) {
|
|
47
|
+
if (c.length >= minLength && re.test(c))
|
|
48
|
+
return c;
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
15
52
|
export function stubForSchema(schema) {
|
|
16
53
|
return stubValue(schema, 0);
|
|
17
54
|
}
|
|
@@ -26,7 +63,11 @@ function stubValue(s, depth) {
|
|
|
26
63
|
switch (t) {
|
|
27
64
|
case "string": {
|
|
28
65
|
const min = typeof s["minLength"] === "number" ? s["minLength"] : 1;
|
|
29
|
-
|
|
66
|
+
const plain = "s".repeat(Math.max(1, min));
|
|
67
|
+
const pattern = typeof s["pattern"] === "string" ? s["pattern"] : undefined;
|
|
68
|
+
if (!pattern)
|
|
69
|
+
return plain;
|
|
70
|
+
return stringMatching(pattern, min) ?? plain;
|
|
30
71
|
}
|
|
31
72
|
case "number":
|
|
32
73
|
case "integer":
|
|
@@ -128,8 +169,17 @@ export function sealDrill(standard, registry) {
|
|
|
128
169
|
if (!floorCheck.valid)
|
|
129
170
|
errors.push(floorCheck.reason ?? "core substance floor rejected the stub");
|
|
130
171
|
}
|
|
131
|
-
|
|
132
|
-
|
|
172
|
+
// A PATTERN IS A CONTENT CONSTRAINT, NOT A STRUCTURAL ONE. This drill exists to catch a
|
|
173
|
+
// standard that CANNOT seal — an unknown type, a required field with contradictory bounds,
|
|
174
|
+
// a schema that will not compile. A `pattern` is a rule about what the AGENT writes, and the
|
|
175
|
+
// agent satisfies it every run; the stub is a synthetic placeholder that was never going to.
|
|
176
|
+
// Reporting it as "cannot seal" is a FALSE REFUSAL, and this one took the entire RED-first
|
|
177
|
+
// change pipeline offline (30d1b48 → three standards undispatchable) while every one of them
|
|
178
|
+
// was in fact perfectly sealable. stringMatching() now satisfies the patterns it can; what it
|
|
179
|
+
// cannot, the drill declines to judge rather than condemning the standard on.
|
|
180
|
+
const structural = errors.filter((e) => !/^pattern at /.test(e));
|
|
181
|
+
if (structural.length > 0)
|
|
182
|
+
fail(structural);
|
|
133
183
|
}
|
|
134
184
|
}
|
|
135
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seal_drill.js","sourceRoot":"","sources":["../../src/seal_drill.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,gFAAgF;AAChF,mFAAmF;AACnF,0EAA0E;AAE1E,OAAO,EAAE,UAAU,EAAiB,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjE;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,MAA+B;IAC3D,OAAO,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,SAAS,CAAC,CAAsC,EAAE,KAAa;IACtE,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAAE,OAAQ,CAAC,CAAC,MAAM,CAAe,CAAC,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,MAAM,CAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,MAAM,CAAwB,CAAC;IACpG,QAAQ,CAAC,EAAE,CAAC;QACV,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,WAAW,CAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAChF,
|
|
1
|
+
{"version":3,"file":"seal_drill.js","sourceRoot":"","sources":["../../src/seal_drill.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.14.
|
|
2
|
+
export declare const COLTRANE_VERSION = "0.14.2";
|
|
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.14.
|
|
20
|
+
export const COLTRANE_VERSION = "0.14.2";
|
|
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.14.
|
|
3
|
+
"version": "0.14.2",
|
|
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",
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
"john",
|
|
6
6
|
"miles",
|
|
7
7
|
"bill",
|
|
8
|
+
"red-spec-drafter",
|
|
8
9
|
"code-implementer",
|
|
9
10
|
"change-verifier",
|
|
10
11
|
"pr-publisher"
|
|
@@ -73,6 +74,29 @@
|
|
|
73
74
|
}
|
|
74
75
|
]
|
|
75
76
|
},
|
|
77
|
+
{
|
|
78
|
+
"name": "draft-laws",
|
|
79
|
+
"chairs": [
|
|
80
|
+
{
|
|
81
|
+
"role": "draft-laws",
|
|
82
|
+
"agent_slug": "red-spec-drafter",
|
|
83
|
+
"depends_on": [
|
|
84
|
+
"plan-change",
|
|
85
|
+
"frame-change"
|
|
86
|
+
],
|
|
87
|
+
"input_contract": [
|
|
88
|
+
"change-plan",
|
|
89
|
+
"change-decision"
|
|
90
|
+
],
|
|
91
|
+
"output_contract": [
|
|
92
|
+
"red-spec"
|
|
93
|
+
],
|
|
94
|
+
"optional_outputs": [],
|
|
95
|
+
"required_skills": [],
|
|
96
|
+
"turn_reserve": 14
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
},
|
|
76
100
|
{
|
|
77
101
|
"name": "create-change",
|
|
78
102
|
"chairs": [
|
|
@@ -80,10 +104,12 @@
|
|
|
80
104
|
"role": "write-change",
|
|
81
105
|
"agent_slug": "code-implementer",
|
|
82
106
|
"depends_on": [
|
|
83
|
-
"plan-change"
|
|
107
|
+
"plan-change",
|
|
108
|
+
"draft-laws"
|
|
84
109
|
],
|
|
85
110
|
"input_contract": [
|
|
86
|
-
"change-plan"
|
|
111
|
+
"change-plan",
|
|
112
|
+
"red-spec"
|
|
87
113
|
],
|
|
88
114
|
"output_contract": [
|
|
89
115
|
"change-set"
|
|
@@ -101,11 +127,13 @@
|
|
|
101
127
|
"agent_slug": "change-verifier",
|
|
102
128
|
"depends_on": [
|
|
103
129
|
"plan-change",
|
|
104
|
-
"write-change"
|
|
130
|
+
"write-change",
|
|
131
|
+
"draft-laws"
|
|
105
132
|
],
|
|
106
133
|
"input_contract": [
|
|
107
134
|
"change-plan",
|
|
108
|
-
"change-set"
|
|
135
|
+
"change-set",
|
|
136
|
+
"red-spec"
|
|
109
137
|
],
|
|
110
138
|
"output_contract": [
|
|
111
139
|
"change-verdict"
|
|
@@ -123,11 +151,13 @@
|
|
|
123
151
|
"agent_slug": "pr-publisher",
|
|
124
152
|
"depends_on": [
|
|
125
153
|
"write-change",
|
|
126
|
-
"verify-change"
|
|
154
|
+
"verify-change",
|
|
155
|
+
"draft-laws"
|
|
127
156
|
],
|
|
128
157
|
"input_contract": [
|
|
129
158
|
"change-set",
|
|
130
|
-
"change-verdict"
|
|
159
|
+
"change-verdict",
|
|
160
|
+
"red-spec"
|
|
131
161
|
],
|
|
132
162
|
"output_contract": [
|
|
133
163
|
"pull-request"
|
|
@@ -138,6 +168,7 @@
|
|
|
138
168
|
]
|
|
139
169
|
}
|
|
140
170
|
],
|
|
171
|
+
"status": "active",
|
|
141
172
|
"input_types": [
|
|
142
173
|
"change-request",
|
|
143
174
|
"change-context"
|
|
@@ -147,5 +178,5 @@
|
|
|
147
178
|
"change-verdict",
|
|
148
179
|
"pull-request"
|
|
149
180
|
],
|
|
150
|
-
"description": "
|
|
181
|
+
"description": "Governed dev loop, RED-first: context → decision → plan → SEALED RED LAWS → build → verify → PR. draft-laws seats red-spec-drafter (holds tests/**, cannot reach src/) and its sealed red-spec is a required input of write-change, verify-change and publish-pr — so the builder cannot begin before the laws exist, and the verifier checks every sealed law is present, unmodified and green."
|
|
151
182
|
}
|