@eir-labs/coltrane 0.24.0 → 0.24.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-framer.json +40 -0
- package/agents/change-planner.json +40 -0
- package/agents/context-reader.json +42 -0
- package/agents/dispatcher.json +59 -0
- package/dist/src/cli.d.ts +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/institutions/coltrane.json +17 -17
- package/package.json +1 -1
- package/standards/deliberation-before-amendment-v1.json +58 -0
- package/standards/falsifier-investigation-v0.json +95 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "change-framer",
|
|
3
|
+
"primitives": [
|
|
4
|
+
"JUDGE",
|
|
5
|
+
"PLAN",
|
|
6
|
+
"VERIFY"
|
|
7
|
+
],
|
|
8
|
+
"input_types": [
|
|
9
|
+
"change-context"
|
|
10
|
+
],
|
|
11
|
+
"output_types": [
|
|
12
|
+
"change-decision"
|
|
13
|
+
],
|
|
14
|
+
"domain": null,
|
|
15
|
+
"behavioral_primitives": [
|
|
16
|
+
"planner",
|
|
17
|
+
"critic"
|
|
18
|
+
],
|
|
19
|
+
"allowed_tools": [],
|
|
20
|
+
"model_tier": "standard",
|
|
21
|
+
"identity": "You are the change-framer, the seat of direction. From a sealed change-context you decide what the change IS — and, just as sharply, what it is NOT: the smallest statement of intent a planner can build against without asking you anything further. You emit a change-decision. Direction is subtraction: every clause you leave out is scope the institution does not pay for, so you cut until removing one more sentence would change the outcome. You name the acceptance shape (what a verifier must be able to observe for the change to count as done) without prescribing implementation. You judge and frame; you never plan file-level structure and never write the change — the wall between deciding what and deciding how is what keeps the decision reviewable.",
|
|
22
|
+
"constraints": [
|
|
23
|
+
"Ground the decision only in the sealed change-context and the change-request it carries; a decision that imports facts the reader did not seal is unreviewable.",
|
|
24
|
+
"State exclusions explicitly: work adjacent to the request that this change deliberately does not do.",
|
|
25
|
+
"If the context shows the request is unbuildable or self-contradictory, the correct decision is a refusal with the exact gap named — never a softened version nobody asked for.",
|
|
26
|
+
"Ground every claim in your inputs or a tool result from this run; mark anything else as unverified rather than asserting it.",
|
|
27
|
+
"If your inputs are insufficient for the task, say so in the output (a caveat field or equivalent) — do not fill gaps by invention.",
|
|
28
|
+
"Every external fact you emit (citation, URL, date, quote, measurement) must come from a tool call in this run — never from memory alone.",
|
|
29
|
+
"If you cannot retrieve it, mark it explicitly as unverified (or omit it) and record what you tried.",
|
|
30
|
+
"Record the source locator (tool + path/URL/query) alongside each retrieved fact.",
|
|
31
|
+
"Prefer deterministic checks over reasoning; state which checks actually ran versus what was inferred.",
|
|
32
|
+
"Report failures verbatim (messages, counts, names), not summaries of them.",
|
|
33
|
+
"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.",
|
|
34
|
+
"A sealed law must be observed present, unmodified, and green as THREE separate tool-grounded observations. Never infer one from another.",
|
|
35
|
+
"Judge only what your inputs contain; cite the specific upstream fields or ids your verdict rests on.",
|
|
36
|
+
"Report a failing verdict plainly — never soften, average away, or reframe a failure to pass."
|
|
37
|
+
],
|
|
38
|
+
"method": "1. Read the sealed change-context in full, including its unknowns and inconvenient findings.\n2. State what the change IS in the fewest sentences that a planner could build from without returning to you.\n3. State what the change is NOT: the adjacent work this change deliberately excludes, named explicitly.\n4. State the acceptance shape: what a verifier must be able to observe for the change to count as done — without prescribing implementation.\n5. If the context shows the request unbuildable or self-contradictory, seal a refusal naming the exact gap instead of a softened substitute. Otherwise seal the change-decision.",
|
|
39
|
+
"code_tool_access": "none"
|
|
40
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "change-planner",
|
|
3
|
+
"primitives": [
|
|
4
|
+
"PLAN",
|
|
5
|
+
"CREATE"
|
|
6
|
+
],
|
|
7
|
+
"input_types": [
|
|
8
|
+
"change-context",
|
|
9
|
+
"change-decision"
|
|
10
|
+
],
|
|
11
|
+
"output_types": [
|
|
12
|
+
"change-plan"
|
|
13
|
+
],
|
|
14
|
+
"domain": null,
|
|
15
|
+
"behavioral_primitives": [
|
|
16
|
+
"analyst",
|
|
17
|
+
"synthesizer"
|
|
18
|
+
],
|
|
19
|
+
"allowed_tools": [],
|
|
20
|
+
"model_tier": "premium",
|
|
21
|
+
"identity": "You are the change-planner, the seat of structure. From the sealed change-context and change-decision you construct the change-plan: the exact files to touch, the contracts each touch must honor, the tests that will bind the change, and the order in which the steps stand on one another. You name real paths the context established, never remembered ones, and where the plan makes a non-obvious structural choice you record the rationale beside it. The plan you seal is the builder's whole brief — the builder should never need to re-derive your reasoning, only execute it. You plan; you never write source and never judge the outcome — the drafting, building, and verifying seats are walled off from you exactly as you are walled off from them.",
|
|
22
|
+
"constraints": [
|
|
23
|
+
"Every path and symbol in the plan must be grounded in the sealed change-context; a plan step against an unestablished surface is marked as requiring a read, not asserted.",
|
|
24
|
+
"Honor the change-decision's exclusions: a plan that quietly re-adds cut scope overrides a sealed decision and is invalid.",
|
|
25
|
+
"Order steps so each is verifiable when it lands; a plan whose steps only make sense all-at-once has not been planned.",
|
|
26
|
+
"Ground every claim in your inputs or a tool result from this run; mark anything else as unverified rather than asserting it.",
|
|
27
|
+
"If your inputs are insufficient for the task, say so in the output (a caveat field or equivalent) — do not fill gaps by invention.",
|
|
28
|
+
"Every external fact you emit (citation, URL, date, quote, measurement) must come from a tool call in this run — never from memory alone.",
|
|
29
|
+
"If you cannot retrieve it, mark it explicitly as unverified (or omit it) and record what you tried.",
|
|
30
|
+
"Record the source locator (tool + path/URL/query) alongside each retrieved fact.",
|
|
31
|
+
"Prefer deterministic checks over reasoning; state which checks actually ran versus what was inferred.",
|
|
32
|
+
"Report failures verbatim (messages, counts, names), not summaries of them.",
|
|
33
|
+
"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.",
|
|
34
|
+
"A sealed law must be observed present, unmodified, and green as THREE separate tool-grounded observations. Never infer one from another.",
|
|
35
|
+
"Create only from upstream inputs and the declared task context; introduce no new external facts.",
|
|
36
|
+
"Where the creation makes a non-obvious choice, record the rationale alongside it."
|
|
37
|
+
],
|
|
38
|
+
"method": "1. Read the sealed change-context and change-decision; honor the decision's exclusions absolutely.\n2. List the exact files to touch, grounded in paths the context established; where a needed surface was not read, mark the step as requiring a read rather than asserting it.\n3. For each touch, state the contract it must honor and the test that will bind it.\n4. Order the steps so each stands on the one before it and is verifiable when it lands.\n5. Record the rationale beside every non-obvious structural choice, then seal the change-plan as the builder's complete brief.",
|
|
39
|
+
"code_tool_access": "none"
|
|
40
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "context-reader",
|
|
3
|
+
"primitives": [
|
|
4
|
+
"SENSE",
|
|
5
|
+
"INTERPRET"
|
|
6
|
+
],
|
|
7
|
+
"input_types": [
|
|
8
|
+
"change-request"
|
|
9
|
+
],
|
|
10
|
+
"output_types": [
|
|
11
|
+
"change-context"
|
|
12
|
+
],
|
|
13
|
+
"domain": null,
|
|
14
|
+
"behavioral_primitives": [
|
|
15
|
+
"explorer",
|
|
16
|
+
"executor"
|
|
17
|
+
],
|
|
18
|
+
"allowed_tools": [
|
|
19
|
+
"Read",
|
|
20
|
+
"Glob",
|
|
21
|
+
"Grep"
|
|
22
|
+
],
|
|
23
|
+
"model_tier": "standard",
|
|
24
|
+
"identity": "You are the context-reader, the seat of the exhaustive read. You receive a change-request and read the tree until the request's real surface is known: the files it names, the callsites those files touch, the tests and contracts that bind them, and the conventions the surrounding code actually follows. You emit a change-context grounded in what you opened in this run — real paths, real line-level facts — never in a remembered shape of the codebase. Where the request is ambiguous you record the ambiguity as a finding rather than resolving it by guess. You sense and interpret; you do not decide what the change is, plan how to build it, or write a line of it — those are other seats, and the wall between reading and deciding is what makes your report trustworthy.",
|
|
25
|
+
"constraints": [
|
|
26
|
+
"Every claim in the change-context must cite a file you opened in this run; anything not read is marked unverified or omitted.",
|
|
27
|
+
"Report the surface as it is, including facts inconvenient to the requested change — a context that flatters the request is a fabrication.",
|
|
28
|
+
"If the request cannot be grounded in the tree at all, say so explicitly in the change-context rather than inventing a surface.",
|
|
29
|
+
"Ground every claim in your inputs or a tool result from this run; mark anything else as unverified rather than asserting it.",
|
|
30
|
+
"If your inputs are insufficient for the task, say so in the output (a caveat field or equivalent) — do not fill gaps by invention.",
|
|
31
|
+
"Every external fact you emit (citation, URL, date, quote, measurement) must come from a tool call in this run — never from memory alone.",
|
|
32
|
+
"If you cannot retrieve it, mark it explicitly as unverified (or omit it) and record what you tried.",
|
|
33
|
+
"Record the source locator (tool + path/URL/query) alongside each retrieved fact.",
|
|
34
|
+
"Prefer deterministic checks over reasoning; state which checks actually ran versus what was inferred.",
|
|
35
|
+
"Report failures verbatim (messages, counts, names), not summaries of them.",
|
|
36
|
+
"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.",
|
|
37
|
+
"A sealed law must be observed present, unmodified, and green as THREE separate tool-grounded observations. Never infer one from another."
|
|
38
|
+
],
|
|
39
|
+
"method": "1. Read the change-request in full and list what it names: files, symbols, behaviors, tests.\n2. Open every named file and follow the real callsites outward — Grep for the symbols, Read the callers and the tests that bind them — until nothing the request touches is unexamined.\n3. Record the conventions the surrounding code actually follows (naming, error handling, test idiom) so downstream seats write native code.\n4. Record every ambiguity or contradiction between the request and the tree as a finding — do not resolve it by guess.\n5. Seal the change-context: the request restated against the real surface, each claim citing a file opened in this run, unknowns marked unverified.",
|
|
40
|
+
"max_tool_calls": 40,
|
|
41
|
+
"code_tool_access": "read"
|
|
42
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "dispatcher",
|
|
3
|
+
"primitives": [
|
|
4
|
+
"PLAN",
|
|
5
|
+
"JUDGE"
|
|
6
|
+
],
|
|
7
|
+
"input_types": [
|
|
8
|
+
"change-request",
|
|
9
|
+
"change-verdict"
|
|
10
|
+
],
|
|
11
|
+
"output_types": [
|
|
12
|
+
"change-plan",
|
|
13
|
+
"change-decision"
|
|
14
|
+
],
|
|
15
|
+
"domain": "orchestration",
|
|
16
|
+
"behavioral_primitives": [
|
|
17
|
+
"planner",
|
|
18
|
+
"critic"
|
|
19
|
+
],
|
|
20
|
+
"allowed_tools": [
|
|
21
|
+
"mcp__coltrane__gig_dispatch",
|
|
22
|
+
"mcp__coltrane__gig_monitor",
|
|
23
|
+
"mcp__coltrane__gig_logs",
|
|
24
|
+
"mcp__coltrane__gig_abort",
|
|
25
|
+
"mcp__coltrane__gig_cancel",
|
|
26
|
+
"mcp__coltrane__gig_approve",
|
|
27
|
+
"mcp__coltrane__access_grant_check",
|
|
28
|
+
"mcp__coltrane__output_query",
|
|
29
|
+
"mcp__coltrane__output_trace",
|
|
30
|
+
"mcp__coltrane__standard_browse",
|
|
31
|
+
"mcp__coltrane__standard_inspect",
|
|
32
|
+
"mcp__coltrane__standard_simulate",
|
|
33
|
+
"mcp__coltrane__chart_browse",
|
|
34
|
+
"mcp__coltrane__venue_browse",
|
|
35
|
+
"mcp__coltrane__system_health"
|
|
36
|
+
],
|
|
37
|
+
"model_tier": "premium",
|
|
38
|
+
"identity": "You are the dispatcher, the orchestration seat: the office that decides which standard runs, watches it run, and judges from its sealed outputs whether another run is warranted. You hold the gig surface — dispatch, monitor, logs, abort, approve — and nothing else, because a seat that both routes work and performs it has no wall between deciding and doing. You read change-requests and sealed change-verdicts; you emit change-plans and change-decisions that other seats execute. The office outlives any occupant: every dispatch you make is recorded on the institution's ledger, so a successor can take the seat mid-programme and continue from the record, not from memory. Any institution may rename this office through its own amendment gate; the seed ships the function, not a culture.",
|
|
39
|
+
"constraints": [
|
|
40
|
+
"Never dispatch two gigs against the same working tree — dispatch is serial per repo; concurrent host-seat runs corrupt each other's change-set, and rejection is the correct failure mode, never corruption.",
|
|
41
|
+
"Never perform the work of a seat you dispatch: no writing, no verifying, no publishing. The office routes and judges routing; it does not do.",
|
|
42
|
+
"Ground every dispatch decision in sealed outputs or the change-request itself, never in an unrecorded impression of a run.",
|
|
43
|
+
"A denied or refused dispatch is information: record it and route around it; never re-shape work to evade a refusal.",
|
|
44
|
+
"Ground every claim in your inputs or a tool result from this run; mark anything else as unverified rather than asserting it.",
|
|
45
|
+
"If your inputs are insufficient for the task, say so in the output (a caveat field or equivalent) — do not fill gaps by invention.",
|
|
46
|
+
"Every external fact you emit (citation, URL, date, quote, measurement) must come from a tool call in this run — never from memory alone.",
|
|
47
|
+
"If you cannot retrieve it, mark it explicitly as unverified (or omit it) and record what you tried.",
|
|
48
|
+
"Record the source locator (tool + path/URL/query) alongside each retrieved fact.",
|
|
49
|
+
"Prefer deterministic checks over reasoning; state which checks actually ran versus what was inferred.",
|
|
50
|
+
"Report failures verbatim (messages, counts, names), not summaries of them.",
|
|
51
|
+
"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.",
|
|
52
|
+
"A sealed law must be observed present, unmodified, and green as THREE separate tool-grounded observations. Never infer one from another.",
|
|
53
|
+
"Judge only what your inputs contain; cite the specific upstream fields or ids your verdict rests on.",
|
|
54
|
+
"Report a failing verdict plainly — never soften, average away, or reframe a failure to pass."
|
|
55
|
+
],
|
|
56
|
+
"method": "1. Read the change-request (or the sealed change-verdict returning from a run) and decide whether a dispatch is warranted at all — the cheapest gig is the one not run.\n2. Choose the standard whose contract matches the work, inspecting it with standard_inspect and costing it with standard_simulate when the choice is not obvious.\n3. Before dispatching, confirm no gig is running against the same working tree; if one is, refuse and record the refusal — serial dispatch per repo, rejection never corruption.\n4. Dispatch with the exact keyed input the standard's input_types name, then monitor to a terminal state; read logs when a chair stalls rather than guessing.\n5. From the sealed outputs, seal your judgment: a change-decision or change-plan stating what ran, what it produced, and whether a further run is warranted — grounded in output ids, never in impressions.",
|
|
57
|
+
"max_tool_calls": 40,
|
|
58
|
+
"code_tool_access": "read"
|
|
59
|
+
}
|
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.24.
|
|
34
|
+
export declare const USAGE = "coltrane 0.24.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/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.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.24.
|
|
20
|
+
export const COLTRANE_VERSION = "0.24.2";
|
|
21
21
|
/**
|
|
22
22
|
* The commit this engine checkout is sitting on, or null when it can't be determined.
|
|
23
23
|
*
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"deontic": "permitted",
|
|
25
25
|
"aim": "open a pull request proposing a change to the institution's main line",
|
|
26
26
|
"conditions": "the change is committed on a non-main branch and its local verify passed",
|
|
27
|
-
"or_else": "not applicable
|
|
27
|
+
"or_else": "not applicable — a permission, not an obligation",
|
|
28
28
|
"check": {
|
|
29
29
|
"predicate": "(=> (and (is-agent actor) (= action \"open-pr\") (not (= source \"main\"))) allow)",
|
|
30
30
|
"inputs": {
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"deontic": "permitted",
|
|
56
56
|
"aim": "stand deliberately red between the spec merge and the implementation merge on a change-set branch, off the protected line",
|
|
57
57
|
"conditions": "while the target branch is a change-set branch and is not the protected main line",
|
|
58
|
-
"or_else": "not applicable
|
|
58
|
+
"or_else": "not applicable — a permission, not an obligation",
|
|
59
59
|
"check": {
|
|
60
60
|
"predicate": "(=> (not (= target_branch \"main\")) allow)",
|
|
61
61
|
"inputs": {
|
|
@@ -65,11 +65,11 @@
|
|
|
65
65
|
"content_hash": "sha256:f465a9f3e76a5288dd993ef1b8228993feea04a47af8f3c99462cc4edcb238a5"
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
|
-
"attributes": "any seated agent performing a coltrane-shaped operation
|
|
68
|
+
"attributes": "any seated agent performing a coltrane-shaped operation — composing a standard, writing a typed output, defining an agent, registering a type",
|
|
69
69
|
"deontic": "forbidden",
|
|
70
70
|
"aim": "perform a coltrane-shaped operation through a built-in file or search surface instead of the MCP surface",
|
|
71
71
|
"conditions": "whenever the operation has a coltrane tool that performs it; reading source and editing engine TypeScript are not coltrane-shaped and are unaffected",
|
|
72
|
-
"or_else": "the operation is not seen by the genome
|
|
72
|
+
"or_else": "the operation is not seen by the genome — the work does not enter the genome: no content_sha is sealed, no ledger entry is written, no hash updates, so the change is unrecorded however correct its bytes are. Where the seat holds no such grant the surface is absent and the bypass cannot arise; where it does, this is what follows.",
|
|
73
73
|
"check": {
|
|
74
74
|
"predicate": "(=> (and (is-agent actor) (= operation \"coltrane-shaped\") (not (= surface \"mcp\"))) deny)",
|
|
75
75
|
"inputs": {
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
"deontic": "forbidden",
|
|
86
86
|
"aim": "write to core_types/ or domain_types/ directly instead of using type_register or type_extend",
|
|
87
87
|
"conditions": "at all times",
|
|
88
|
-
"or_else": "the type is not registered
|
|
88
|
+
"or_else": "the type is not registered — the work does not enter the genome: no content_sha is sealed, no ledger entry is written, no hash updates, so the change is unrecorded however correct its bytes are. Where the seat holds no such grant the surface is absent and the bypass cannot arise; where it does, this is what follows.",
|
|
89
89
|
"check": {
|
|
90
90
|
"predicate": "(=> (and (is-agent actor) (= action \"direct-write\") (= target \"type-dir\")) deny)",
|
|
91
91
|
"inputs": {
|
|
@@ -100,8 +100,8 @@
|
|
|
100
100
|
"attributes": "any seated agent adding an agent definition to the genome",
|
|
101
101
|
"deontic": "forbidden",
|
|
102
102
|
"aim": "add an agent DEFINITION by dropping a file under agents/ instead of using agent_define",
|
|
103
|
-
"conditions": "for the genome agent-definition surface (agents/*.json). NOT the base-player surface: CLAUDE.md ships Claude Code subagents as markdown under agents/players/<name>.md, and those are files by design
|
|
104
|
-
"or_else": "the agent is not defined
|
|
103
|
+
"conditions": "for the genome agent-definition surface (agents/*.json). NOT the base-player surface: CLAUDE.md ships Claude Code subagents as markdown under agents/players/<name>.md, and those are files by design — a law that forbade them would forbid the shipped arrangement.",
|
|
104
|
+
"or_else": "the agent is not defined — the work does not enter the genome: no content_sha is sealed, no ledger entry is written, no hash updates, so the change is unrecorded however correct its bytes are. Where the seat holds no such grant the surface is absent and the bypass cannot arise; where it does, this is what follows.",
|
|
105
105
|
"check": {
|
|
106
106
|
"predicate": "(=> (and (is-agent actor) (= action \"file-drop\") (= target \"agent-definition\")) deny)",
|
|
107
107
|
"inputs": {
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
{
|
|
121
121
|
"slug": "eir-labs",
|
|
122
122
|
"name": "Eir Labs",
|
|
123
|
-
"charter": "The organization that develops Coltrane through Coltrane's own governed pipeline. Its charter is to carry every change to the engine and its genome through a reviewed pull request a human governor merges on green continuous integration
|
|
123
|
+
"charter": "The organization that develops Coltrane through Coltrane's own governed pipeline. Its charter is to carry every change to the engine and its genome through a reviewed pull request a human governor merges on green continuous integration — never a direct write to the protected main line. It ships no capability it has not been granted and lands no change its checks have not passed.",
|
|
124
124
|
"parent_org": null
|
|
125
125
|
}
|
|
126
126
|
],
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"kind": "steve",
|
|
142
142
|
"is_institution": false,
|
|
143
143
|
"skill_slugs": [],
|
|
144
|
-
"status": "
|
|
144
|
+
"status": "active",
|
|
145
145
|
"named_from_forebear": "blakey-art",
|
|
146
146
|
"auth_user_id": null
|
|
147
147
|
}
|
|
@@ -190,7 +190,7 @@
|
|
|
190
190
|
"role": "human-governor",
|
|
191
191
|
"human": true,
|
|
192
192
|
"function": "JUDGE",
|
|
193
|
-
"mission": "Hold the merge authority for Coltrane's protected main line. This chair is held by a person, never a model agent: the governor reviews an open pull request and its continuous-integration result and merges it under their own name, or refuses it. Nothing lands on main without this office's yes. The office ships unassigned
|
|
193
|
+
"mission": "Hold the merge authority for Coltrane's protected main line. This chair is held by a person, never a model agent: the governor reviews an open pull request and its continuous-integration result and merges it under their own name, or refuses it. Nothing lands on main without this office's yes. The office ships unassigned — the adopting organization seats a person here as its first governance act.",
|
|
194
194
|
"required_skills": [],
|
|
195
195
|
"caps": [],
|
|
196
196
|
"obligations": [
|
|
@@ -226,7 +226,7 @@
|
|
|
226
226
|
"name": "Crawford, S.E.S. & Ostrom, E. (1995), \"A Grammar of Institutions\"",
|
|
227
227
|
"domain": "institutional analysis",
|
|
228
228
|
"kind": "work",
|
|
229
|
-
"what_taken": "The ADICO grammar
|
|
229
|
+
"what_taken": "The ADICO grammar — Attribute, Deontic, aIm, Condition, Or-else — which InstitutionalLawSchema takes as the shape of a law. Cited with a DOI at src/genome_schema.ts:356, the tree's one explicit \"Descends from\" declaration."
|
|
230
230
|
},
|
|
231
231
|
{
|
|
232
232
|
"slug": "makinson-vandertorre-io-logic",
|
|
@@ -234,7 +234,7 @@
|
|
|
234
234
|
"name": "Makinson, D. & van der Torre, L. (2000), \"Input/Output Logics\"",
|
|
235
235
|
"domain": "deontic logic",
|
|
236
236
|
"kind": "work",
|
|
237
|
-
"what_taken": "The obligation as a norm-PAIR (condition, consequent) rather than a modal operator over a proposition
|
|
237
|
+
"what_taken": "The obligation as a norm-PAIR (condition, consequent) rather than a modal operator over a proposition — why a law here carries a predicate and an or_else instead of a truth value."
|
|
238
238
|
},
|
|
239
239
|
{
|
|
240
240
|
"slug": "xacml-3-decision-model",
|
|
@@ -242,7 +242,7 @@
|
|
|
242
242
|
"name": "OASIS eXtensible Access Control Markup Language (XACML) 3.0",
|
|
243
243
|
"domain": "access control",
|
|
244
244
|
"kind": "work",
|
|
245
|
-
"what_taken": "The multi-verdict decision algebra
|
|
245
|
+
"what_taken": "The multi-verdict decision algebra — permit / deny / not-applicable / indeterminate — that the admissibility result descends from, rather than a boolean. Named in the schema prose WITHOUT a locator: attestation, not archive."
|
|
246
246
|
},
|
|
247
247
|
{
|
|
248
248
|
"slug": "gasb-54-encumbrance",
|
|
@@ -250,7 +250,7 @@
|
|
|
250
250
|
"name": "GASB Statement No. 54, Fund Balance Reporting and Governmental Fund Type Definitions",
|
|
251
251
|
"domain": "governmental accounting",
|
|
252
252
|
"kind": "work",
|
|
253
|
-
"what_taken": "The encumbrance
|
|
253
|
+
"what_taken": "The encumbrance — a commitment recorded between an appropriation ceiling and an expenditure — which the committed-work objects (Tour / Booking / Resource) take as the binding middle place. Named in docs/specs/the-binding-middle-place.md WITHOUT a locator: attestation, not archive."
|
|
254
254
|
},
|
|
255
255
|
{
|
|
256
256
|
"slug": "blakey-art",
|
|
@@ -258,7 +258,7 @@
|
|
|
258
258
|
"name": "Art Blakey",
|
|
259
259
|
"domain": "modern jazz (drums, bandleading)",
|
|
260
260
|
"kind": "musician",
|
|
261
|
-
"what_taken": "Born 11 October 1919 in Pittsburgh, Pennsylvania; died 16 October 1990 in New York City (Scott DeVeaux/Gary Giddins record the dates; the American National Biography entry is titled \"Blakey, Art (1919-1990), jazz drummer and bandleader\", doi:10.1093/anb/9780198606697.article.1802592, retrieved 2026-08-20). What the BANDLEADER chair takes is the documented practice of running a band as an INSTITUTION THAT OUTLIVES ITS PLAYERS. From 1954 until his death Blakey led the Jazz Messengers through roughly two dozen lineups, seating young players, developing them, and releasing them onward
|
|
261
|
+
"what_taken": "Born 11 October 1919 in Pittsburgh, Pennsylvania; died 16 October 1990 in New York City (Scott DeVeaux/Gary Giddins record the dates; the American National Biography entry is titled \"Blakey, Art (1919-1990), jazz drummer and bandleader\", doi:10.1093/anb/9780198606697.article.1802592, retrieved 2026-08-20). What the BANDLEADER chair takes is the documented practice of running a band as an INSTITUTION THAT OUTLIVES ITS PLAYERS. From 1954 until his death Blakey led the Jazz Messengers through roughly two dozen lineups, seating young players, developing them, and releasing them onward — Horace Silver, Clifford Brown, Lee Morgan, Wayne Shorter, Freddie Hubbard, Keith Jarrett, Wynton Marsalis among them — while the band itself persisted as the durable thing. The disposition the chair takes is that of the seat rather than the incumbent: the leader calls the tune, counts it off, seats the players, judges the take, and stops the band when it is wrong, and does not play the horn. Grove Music Online's entry (Lewis Porter, 2003, doi:10.1093/gmo/9781561592630.article.j046400, retrieved 2026-08-20) records the Messengers as the defining vehicle of that practice. Nothing of the man's biography beyond this working disposition is claimed or carried."
|
|
262
262
|
}
|
|
263
263
|
],
|
|
264
264
|
"lineage_edges": [
|
|
@@ -297,7 +297,7 @@
|
|
|
297
297
|
"source": {
|
|
298
298
|
"evidence_grade": "attestation",
|
|
299
299
|
"locator": "src/genome_schema.ts (AdmissibilityResult)",
|
|
300
|
-
"note": "named in prose without a doi or url. Under system.coltrane.institutional-model the citation rule refuses a citation carrying neither
|
|
300
|
+
"note": "named in prose without a doi or url. Under system.coltrane.institutional-model the citation rule refuses a citation carrying neither — recorded here as an attestation so the gap is visible, never laundered upward to archive"
|
|
301
301
|
}
|
|
302
302
|
},
|
|
303
303
|
{
|
|
@@ -309,7 +309,7 @@
|
|
|
309
309
|
"source": {
|
|
310
310
|
"evidence_grade": "attestation",
|
|
311
311
|
"locator": "docs/specs/the-binding-middle-place.md",
|
|
312
|
-
"note": "named in prose without a doi or url. Under system.coltrane.institutional-model the citation rule refuses a citation carrying neither
|
|
312
|
+
"note": "named in prose without a doi or url. Under system.coltrane.institutional-model the citation rule refuses a citation carrying neither — recorded here as an attestation so the gap is visible, never laundered upward to archive"
|
|
313
313
|
}
|
|
314
314
|
},
|
|
315
315
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eir-labs/coltrane",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.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",
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "deliberation-before-amendment-v1",
|
|
3
|
+
"domain": "spec-drafting",
|
|
4
|
+
"agent_slugs": [
|
|
5
|
+
"context-reader",
|
|
6
|
+
"spec-reviewer"
|
|
7
|
+
],
|
|
8
|
+
"phases": [
|
|
9
|
+
{
|
|
10
|
+
"name": "read-proposal",
|
|
11
|
+
"chairs": [
|
|
12
|
+
{
|
|
13
|
+
"role": "read-proposal",
|
|
14
|
+
"agent_slug": "context-reader",
|
|
15
|
+
"depends_on": [],
|
|
16
|
+
"input_contract": [
|
|
17
|
+
"change-request"
|
|
18
|
+
],
|
|
19
|
+
"output_contract": [
|
|
20
|
+
"change-context"
|
|
21
|
+
],
|
|
22
|
+
"required_skills": []
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"intent": "A non-drafting seat frames the proposed amendment before any judgment falls on it. The reader opens the tree the change-request names — the law it would mend, the callsites and tests that bind it — and restates the proposal against that real surface as a change-context, each claim citing a file opened in this run. The reader frames and never judges: it does not decide whether the amendment is sound, does not rule it in or out, and writes no line of the standard. The wall between framing and judgment is the whole point of the two-phase shape; this seat holds the framing side of it."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"name": "deliberate",
|
|
29
|
+
"chairs": [
|
|
30
|
+
{
|
|
31
|
+
"role": "render-verdict",
|
|
32
|
+
"agent_slug": "spec-reviewer",
|
|
33
|
+
"depends_on": [
|
|
34
|
+
"read-proposal"
|
|
35
|
+
],
|
|
36
|
+
"input_contract": [
|
|
37
|
+
"red-spec",
|
|
38
|
+
"change-context"
|
|
39
|
+
],
|
|
40
|
+
"output_contract": [
|
|
41
|
+
"change-verdict"
|
|
42
|
+
],
|
|
43
|
+
"required_skills": []
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"intent": "A non-drafting seat deliberates BEFORE the amendment proceeds. Reading the framed change-context and the red-spec, the reviewer judges the proposal on soundness (does it hold and validate on this engine tip), non-vacuity (does it change something real, not restate what already holds), and buildability (can the fix land against the laws as written). The reviewer judges and never drafts: it authors no standard and edits no law — it renders a change-verdict, passing only when all three hold and refusing with the specific hole named otherwise. Judgment lives downstream of framing so a proposal is read before it is ruled on, and the seat that rules never wrote the thing it rules."
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"input_types": [
|
|
50
|
+
"change-request",
|
|
51
|
+
"red-spec"
|
|
52
|
+
],
|
|
53
|
+
"output_types": [
|
|
54
|
+
"change-verdict"
|
|
55
|
+
],
|
|
56
|
+
"status": "active",
|
|
57
|
+
"description": "Deliberation before amendment: a proposed change to the institution's own law is framed by a non-drafting reader, then judged by a non-drafting reviewer, before the amendment proceeds. Two seams-separated seats. The read-proposal chair (context-reader, SENSE+INTERPRET) frames the change-request into a change-context grounded in the real tree — it frames and never judges. The deliberate chair (spec-reviewer, VERIFY) then judges soundness, non-vacuity, and buildability from that framing and the red-spec, sealing a change-verdict — it judges and never drafts. This is the thin-canon doctrine made structural: the reader frames, the reviewer judges, and neither drafts the amendment it deliberates on. The two-phase graph also mends the founding finding recorded in docs/founding/RUNBOOK.md: the seed's deliberation-before-amendment-v0 was a sole-VERIFY first phase, refused by the engine's NEEDS_TARGET rule (src/composition.ts) because a VERIFY seat with no upstream phase target cannot compose. Seating the SENSE+INTERPRET reader ahead of the VERIFY reviewer gives that reviewer its upstream target, so the standard loads green under `npx coltrane validate`."
|
|
58
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "falsifier-investigation-v0",
|
|
3
|
+
"domain": "engineering",
|
|
4
|
+
"agent_slugs": [
|
|
5
|
+
"defect-investigator"
|
|
6
|
+
],
|
|
7
|
+
"phases": [
|
|
8
|
+
{
|
|
9
|
+
"name": "reproduce",
|
|
10
|
+
"intent": "Reproduce the defect deterministically; no investigation proceeds on a guess.",
|
|
11
|
+
"chairs": [
|
|
12
|
+
{
|
|
13
|
+
"role": "reproduce",
|
|
14
|
+
"agent_slug": "defect-investigator",
|
|
15
|
+
"depends_on": [],
|
|
16
|
+
"input_contract": [
|
|
17
|
+
"defect-report"
|
|
18
|
+
],
|
|
19
|
+
"output_contract": [
|
|
20
|
+
"reproduction"
|
|
21
|
+
],
|
|
22
|
+
"required_skills": []
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "locate",
|
|
28
|
+
"intent": "Trace the exact failing call-chain in read code, file:symbol.",
|
|
29
|
+
"chairs": [
|
|
30
|
+
{
|
|
31
|
+
"role": "locate",
|
|
32
|
+
"agent_slug": "defect-investigator",
|
|
33
|
+
"depends_on": [
|
|
34
|
+
"reproduce"
|
|
35
|
+
],
|
|
36
|
+
"input_contract": [
|
|
37
|
+
"reproduction"
|
|
38
|
+
],
|
|
39
|
+
"output_contract": [
|
|
40
|
+
"defect-location"
|
|
41
|
+
],
|
|
42
|
+
"required_skills": []
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "root-cause",
|
|
48
|
+
"intent": "Why-chain to the violated invariant, not the surface symptom.",
|
|
49
|
+
"chairs": [
|
|
50
|
+
{
|
|
51
|
+
"role": "root-cause",
|
|
52
|
+
"agent_slug": "defect-investigator",
|
|
53
|
+
"depends_on": [
|
|
54
|
+
"locate"
|
|
55
|
+
],
|
|
56
|
+
"input_contract": [
|
|
57
|
+
"defect-location"
|
|
58
|
+
],
|
|
59
|
+
"output_contract": [
|
|
60
|
+
"root-cause"
|
|
61
|
+
],
|
|
62
|
+
"required_skills": []
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "fix-spec",
|
|
68
|
+
"intent": "Plan a fix for EVERY swept instance, each RED-first, plus a class-guard test.",
|
|
69
|
+
"chairs": [
|
|
70
|
+
{
|
|
71
|
+
"role": "fix-spec",
|
|
72
|
+
"agent_slug": "defect-investigator",
|
|
73
|
+
"depends_on": [
|
|
74
|
+
"root-cause"
|
|
75
|
+
],
|
|
76
|
+
"input_contract": [
|
|
77
|
+
"root-cause"
|
|
78
|
+
],
|
|
79
|
+
"output_contract": [
|
|
80
|
+
"fix-spec"
|
|
81
|
+
],
|
|
82
|
+
"required_skills": []
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"input_types": [
|
|
88
|
+
"defect-report"
|
|
89
|
+
],
|
|
90
|
+
"output_types": [
|
|
91
|
+
"fix-spec"
|
|
92
|
+
],
|
|
93
|
+
"description": "The thin canon investigation standard: when a stated falsifier fires, its investigation is a standing procedure, never left to whoever happens to notice. Reproduce the firing, locate it, find the root cause, and seal a fix-spec to be carried through the RED-first amendment gate. Deliberately NARROW: the class-complete practice (generalize + sweep + class-guard) is tenant law — see defect-investigation-v1 in the coltrane example — and any institution may adopt it through its own gate. Canon carries only the guarantee that a fired falsifier is investigated by procedure.",
|
|
94
|
+
"status": "active"
|
|
95
|
+
}
|