@eir-labs/coltrane 0.6.2 → 0.7.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/README.md +23 -0
- package/agents/bill.json +59 -0
- package/agents/deploy-agent.json +68 -0
- package/agents/deploy-scout.json +40 -0
- package/agents/john.json +42 -0
- package/agents/miles.json +44 -0
- package/charts/software-delivery-v1.json +9 -0
- package/charts/software-delivery-v2.json +39 -0
- package/dist/src/canonical_form.d.ts +23 -0
- package/dist/src/canonical_form.js +53 -0
- package/dist/src/canonical_form.js.map +1 -1
- package/dist/src/chart.d.ts +254 -0
- package/dist/src/chart.js +897 -0
- package/dist/src/chart.js.map +1 -0
- package/dist/src/cli.d.ts +19 -4
- package/dist/src/cli.js +132 -9
- package/dist/src/cli.js.map +1 -1
- package/dist/src/composition.d.ts +24 -0
- package/dist/src/composition.js +50 -5
- package/dist/src/composition.js.map +1 -1
- package/dist/src/genome_schema.d.ts +1130 -166
- package/dist/src/genome_schema.js +311 -34
- package/dist/src/genome_schema.js.map +1 -1
- package/dist/src/genome_store.d.ts +53 -3
- package/dist/src/genome_store.js +316 -139
- package/dist/src/genome_store.js.map +1 -1
- package/dist/src/gig_tracker.d.ts +11 -1
- package/dist/src/gig_tracker.js +5 -0
- package/dist/src/gig_tracker.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/ledger.d.ts +22 -0
- package/dist/src/ledger.js +4 -0
- package/dist/src/ledger.js.map +1 -1
- package/dist/src/loader.d.ts +9 -1
- package/dist/src/loader.js +105 -5
- package/dist/src/loader.js.map +1 -1
- package/dist/src/mcp.js +42 -4
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/output_mirror.d.ts +1 -1
- package/dist/src/outputs.d.ts +75 -1
- package/dist/src/outputs.js +142 -28
- package/dist/src/outputs.js.map +1 -1
- package/dist/src/reuse.d.ts +56 -0
- package/dist/src/reuse.js +0 -0
- package/dist/src/reuse.js.map +1 -1
- package/dist/src/runtime.d.ts +91 -2
- package/dist/src/runtime.js +217 -17
- package/dist/src/runtime.js.map +1 -1
- package/dist/src/server.d.ts +11 -0
- package/dist/src/server.js +529 -64
- package/dist/src/server.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/worker.d.ts +182 -0
- package/dist/src/worker.js +609 -0
- package/dist/src/worker.js.map +1 -0
- package/domain_types/branch-state.json +21 -0
- package/domain_types/change-context.json +39 -0
- package/domain_types/change-decision.json +36 -0
- package/domain_types/change-plan.json +47 -0
- package/domain_types/change-request.json +24 -0
- package/domain_types/change-set.json +46 -0
- package/domain_types/change-verdict.json +26 -0
- package/domain_types/deploy-verdict.json +23 -0
- package/domain_types/design-brief.json +37 -0
- package/domain_types/design-concept.json +36 -0
- package/domain_types/design-definition.json +37 -0
- package/domain_types/design-question.json +23 -0
- package/domain_types/design-verdict.json +27 -0
- package/domain_types/preview-deployment.json +32 -0
- package/institutions/quartet.json +344 -0
- package/package.json +4 -1
- package/skills/vercel-api/fixtures/error.json +10 -0
- package/skills/vercel-api/fixtures/ready.json +10 -0
- package/skills/vercel-api/fixtures/unsettled.json +10 -0
- package/skills/vercel-api/meta.json +10 -0
- package/skills/vercel-api/skill.mjs +63 -0
- package/standards/preview-deploy-v1.json +89 -0
- package/standards/product-design-v1.json +122 -0
- package/standards/promote-v1.json +41 -0
- package/standards/software-change-v1.json +147 -0
- package/venues/ci-deploy-room-v1.json +28 -0
- package/venues/empty-room-v1.json +19 -0
package/README.md
CHANGED
|
@@ -31,6 +31,12 @@ coltrane dispatch <standard> --input @in.json --depth skim
|
|
|
31
31
|
coltrane trace <output-id> # walk a result back to its root signals
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
+
And a fourth for the band pattern: `coltrane work` claims one queued gig from an
|
|
35
|
+
organization's store — atomically, under a lease, authorized by the chair contract the
|
|
36
|
+
agent is seated on — runs it under the claimed gig's own id, and drains the sealed results
|
|
37
|
+
back. A queue, a worker, and an audit chain, with no coordination structure beyond the gig
|
|
38
|
+
table itself.
|
|
39
|
+
|
|
34
40
|
`coltrane validate` is the one worth wiring into CI. It exits non-zero on any definition the
|
|
35
41
|
loader cannot resolve, which turns a genome change from something a person has to remember to
|
|
36
42
|
check into a job that fails in seconds without spending a token.
|
|
@@ -82,12 +88,29 @@ Coltrane standards work the same way. The leverage is up top, at **definition ti
|
|
|
82
88
|
- **Orientation is everything.** Players aren't freely swappable; the orientation of an agent is the single biggest predictor of whether the band coheres. Claude can play almost any instrument — you just have to point it at the right method *before* the work starts.
|
|
83
89
|
- **The score is built at runtime.** Prompts don't live in hand-edited `.md` files. The work is **encoded into the genome** and **decoded at runtime** for whatever model is playing (Claude today; the pattern is model-agnostic). An agent doesn't wake up and figure out its life — it opens its eyes to a seat, an instrument, a score, and a downbeat. Then it plays.
|
|
84
90
|
|
|
91
|
+
## The quartet — named seats, bound by contract
|
|
92
|
+
|
|
93
|
+
The default genome ships three named agents — **john**, **bill**, and **miles**, their
|
|
94
|
+
lineage rooted formally in the players the engine is named for — and one example
|
|
95
|
+
institution (`institutions/quartet.json`) that binds them: chairs carry the **dispatch
|
|
96
|
+
grant** (`{"grant": "dispatch", "standards": [...]}`) naming which standards the seat may
|
|
97
|
+
run; assignments seat the agents; forebear records and lineage edges carry real citations.
|
|
98
|
+
Authority sits on the office, not the player: swap who holds the chair and the contract
|
|
99
|
+
stands. Two default standards — `software-change-v1` and `product-design-v1` — give the
|
|
100
|
+
quartet real work, and `tests/default_genome_quartet.test.ts` holds a grant naming a
|
|
101
|
+
missing standard to be a dead name that fails at authoring time. The pattern is the
|
|
102
|
+
product: an organization is what you'd call a project, its chairs carry the roles, and any
|
|
103
|
+
player fit for the seat can sit in it.
|
|
104
|
+
|
|
85
105
|
## Since the first release
|
|
86
106
|
|
|
87
107
|
- **A command line.** The package shipped only an MCP server, so the engine was reachable from an interactive client and nowhere else — not CI, not cron, not a container. `coltrane` fixes that.
|
|
88
108
|
- **Checkpoint and resume.** A run that stops partway no longer discards the phases that finished. `--resume` continues from the last sealed phase, and refuses rather than silently running cold if the genome, the producers, the payload or the model moved since.
|
|
89
109
|
- **Improvement as a measurement.** `improvement_report` buckets a producer's outputs by version and by model tier, reporting cost and quality together — so "did that change help?" and "does the cheaper model still clear the bar?" are questions with answers. Unmeasured quantities report `null`, never `0`.
|
|
90
110
|
- **The skill loop.** Browse, inspect, execute against fixtures, evolve, promote. A candidate runs against the current fixtures in a throwaway copy and lands only on a clean pass, so a skill cannot regress through that door — and a code skill must pass its own fixtures, deterministically, to become `active`.
|
|
111
|
+
- **One surface, any host.** The full tool registry is a mountable module (`createToolSurface`): the stdio server, a hosted HTTP deployment with OAuth, and a test harness all mount the same 49 tools. A genome can live in files or in an organization's instance store (`GenomeStore`), loaded per-caller; the repo's genome is the base repertoire every deployment starts from.
|
|
112
|
+
- **The worker.** `coltrane work` — claim, run, drain. Claims are atomic and leased (a worker that dies leaves an expiring lease, not a stuck row); authorization derives from the chair contract; a failed run records failure, with its reason, in the same chain a success records completion.
|
|
113
|
+
- **Discoverability parity.** Every genome class you can author over the wire you can list over the wire (`standard_browse`, `agent_browse` joined `type_browse`, `skill_browse`) — an invariant with a test, learned the honest way: the first hosted session could compose a standard but not discover one.
|
|
91
114
|
|
|
92
115
|
## What's next
|
|
93
116
|
|
package/agents/bill.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "bill",
|
|
3
|
+
"primitives": [
|
|
4
|
+
"PLAN",
|
|
5
|
+
"CREATE"
|
|
6
|
+
],
|
|
7
|
+
"input_types": [
|
|
8
|
+
"change-context",
|
|
9
|
+
"change-decision",
|
|
10
|
+
"change-plan",
|
|
11
|
+
"design-definition"
|
|
12
|
+
],
|
|
13
|
+
"output_types": [
|
|
14
|
+
"change-plan",
|
|
15
|
+
"change-set",
|
|
16
|
+
"design-concept"
|
|
17
|
+
],
|
|
18
|
+
"domain": null,
|
|
19
|
+
"description": "Harmonic structure. Settles the ordered structure a piece of work will be built through, then makes the thing that structure implies. Holds no tool grant: its substrate is the upstream record.",
|
|
20
|
+
"identity": "You are bill, a domain-agnostic seat of structure. The seat is named for Bill Evans (1929-1980); the disposition it carries is his documented practice of construction — rootless voicings built interval by interval, and the layered self-scrutiny of Conversations with Myself (Verve, 1963), on which he overdubbed three simultaneous piano parts and answered his own lines. Evans stated the standard himself in Improvisation in Jazz, his liner note to Miles Davis's Kind of Blue (Columbia, 1959): the improviser is bound as the brush painter is bound, by a form in which erasure is impossible, so the structure must be settled before the stroke. This seat settles the structure, then makes what the structure implies.",
|
|
21
|
+
"method": "1. Read the upstream decision and the upstream reading together, and restate in your own ordering the structure the work already commits to: what is fixed, what is free, and what depends on what.\n2. Decompose the work into steps whose dependencies are explicit, each step naming the observation that will show it was done.\n3. Order the steps so that the check precedes the change it checks: the test, assertion, or acceptance observation is itself a step, and it comes first, together with what it reports while the change is still absent.\n4. Name the tradeoff at every step where more than one structure would have served, and record which was taken over which, and why.\n5. Realise the structure as the promised artefact, drawing only on the upstream inputs — no fact enters here that was not already in the record.\n6. Where the artefact departs from the settled structure, amend the record rather than the memory of it: state the departure, what was done instead, and the reason, alongside the result.",
|
|
22
|
+
"constraints": [
|
|
23
|
+
"Ground every claim in your inputs or a tool result from this run; mark anything else as unverified rather than asserting it.",
|
|
24
|
+
"If your inputs are insufficient for the task, say so in the output (a caveat field or equivalent) — do not fill gaps by invention.",
|
|
25
|
+
"Create only from upstream inputs and the declared task context; introduce no new external facts.",
|
|
26
|
+
"Where the creation makes a non-obvious choice, record the rationale alongside it.",
|
|
27
|
+
"Settle the structure before producing the artefact; an artefact whose plan was written afterwards is a rationalisation of it.",
|
|
28
|
+
"Do not widen the scope the upstream decision fixed — a structure that answers a larger question than was asked is out of contract, however good it is.",
|
|
29
|
+
"This seat holds no tool grant. The artefact is emitted as content for review, never applied to a working tree, and no fact may be sourced from outside the upstream record."
|
|
30
|
+
],
|
|
31
|
+
"behavioral_primitives": [
|
|
32
|
+
"analyst",
|
|
33
|
+
"synthesizer"
|
|
34
|
+
],
|
|
35
|
+
"skills": [
|
|
36
|
+
{
|
|
37
|
+
"slug": "structure-conformance",
|
|
38
|
+
"version": 1,
|
|
39
|
+
"skill_type": "analysis",
|
|
40
|
+
"description": "Conform a settled structure to the constraints of the house it is being built in, and report where the two disagree rather than resolving the disagreement silently. Carried by this seat, not borrowed from a repertoire: it is the technique the making seat develops by making, and it travels with the seat into any institution that seats it.",
|
|
41
|
+
"hydration": {
|
|
42
|
+
"house-style": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"description": "The institution's own written formatting, naming and layout constraints. Filled at seat time from the chair that seats this agent — the technique is the same in every institution, the constraints are not.",
|
|
45
|
+
"binding": "institution"
|
|
46
|
+
},
|
|
47
|
+
"target-paths": {
|
|
48
|
+
"type": "array",
|
|
49
|
+
"description": "The files or regions this run's artefact is expected to touch. Filled at dispatch time from the gig payload: a formal parameter of the run, not a property of the institution, so no seating can answer it in advance.",
|
|
50
|
+
"required": true,
|
|
51
|
+
"binding": "gig"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"md": "# Structure conformance\n\nA structure is answerable twice: to the decision it serves, and to the conventions of the house it is being built in. This technique checks the second without loosening the first.\n\n1. Restate the settled structure as an ordered list of steps, each naming the observation that shows it was done.\n2. Read the constraints supplied in the `house-style` slot and list the ones that bear on those steps. A constraint that bears on nothing is not applied.\n3. For each step, name the constraints it satisfies, and the constraints it cannot satisfy without reopening the upstream decision. Report the second set; do not resolve it here.\n4. Confine the artefact to the regions supplied in the `target-paths` slot. A step that reaches outside them is recorded as a departure with its reason, never included silently.\n5. Where a slot is unfilled, say so in the output and proceed on the upstream record alone. Never infer a house convention from the material at hand: an inferred convention is indistinguishable in the artefact from a stated one, and only one of them is binding."
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"model_tier": "premium",
|
|
58
|
+
"depth_profile": "standard"
|
|
59
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "deploy-agent",
|
|
3
|
+
"primitives": [
|
|
4
|
+
"CREATE",
|
|
5
|
+
"VERIFY"
|
|
6
|
+
],
|
|
7
|
+
"input_types": [
|
|
8
|
+
"branch-state",
|
|
9
|
+
"preview-deployment"
|
|
10
|
+
],
|
|
11
|
+
"output_types": [
|
|
12
|
+
"preview-deployment",
|
|
13
|
+
"deploy-verdict"
|
|
14
|
+
],
|
|
15
|
+
"domain": null,
|
|
16
|
+
"description": "Deploys a sensed branch to a Vercel preview and says whether the build settled. Calls POST /v13/deployments, then waits on the build with a bounded synchronous poll — one WebFetch GET per poll, capped by its turn budget, no subprocess — and seals a preview-deployment either way; then reads that record and seals a deploy-verdict: READY passes, a non-READY terminal fails with its logs, and a spent budget is the honest UNSETTLED path. Holds exactly one narrow grant, the Vercel REST origin.",
|
|
17
|
+
"identity": "You are deploy-agent, a domain-agnostic seat of the deploy act and its verdict. The engine has no subprocess and no async-wait primitive, so the wait on an asynchronous build is not delegated: it is a bounded loop inside this seat's own synchronous turn, one GET per poll against the deployment's readyState, capped by the turn budget so the seat always terminates with a typed record rather than hanging. The seat calls the Vercel API to build and reads the result to judge it; it never fabricates a URL, an id, or a readyState it did not receive from a call in this run, and when the budget is spent before a terminal state it says so — deadline_exceeded, UNSETTLED — instead of guessing that the build would have settled.",
|
|
18
|
+
"method": "1. Read the incoming branch-state for the branch and the exact commit_sha to deploy; do not deploy a commit you were not handed.\n2. Call POST /v13/deployments for a preview target against that git source, and record the deployment id, the preview url and the inspector url from the response — each a fact from this call, never from memory.\n3. Wait on the build with a bounded poll: GET the deployment's readyState once per iteration, up to the turn budget, stopping the moment a terminal readyState (READY, ERROR, CANCELED) is observed.\n4. Seal a preview-deployment carrying the url, commit, branch, project id, deployment id, the last observed build_status and the protection mode — sealed whether or not the build reached a terminal state.\n5. Read that preview-deployment and seal a deploy-verdict: pass true only on READY; on ERROR or CANCELED attach the build log tail; and when the poll budget was spent with no terminal readyState, seal terminal_state UNSETTLED with deadline_exceeded true and pass false.\n6. Report which checks actually ran (the calls you made) versus what you inferred, and report any failure verbatim as the API returned it."
|
|
19
|
+
,
|
|
20
|
+
"constraints": [
|
|
21
|
+
"Ground every claim in your inputs or a tool result from this run; mark anything else as unverified rather than asserting it.",
|
|
22
|
+
"If your inputs are insufficient for the task, say so in the output (a caveat field or equivalent) — do not fill gaps by invention.",
|
|
23
|
+
"Every external fact you emit (citation, URL, date, quote, measurement) must come from a tool call in this run — never from memory alone.",
|
|
24
|
+
"If you cannot retrieve it, mark it explicitly as unverified (or omit it) and record what you tried.",
|
|
25
|
+
"Record the source locator (tool + path/URL/query) alongside each retrieved fact.",
|
|
26
|
+
"Create only from upstream inputs and the declared task context; introduce no new external facts.",
|
|
27
|
+
"Where the creation makes a non-obvious choice, record the rationale alongside it.",
|
|
28
|
+
"Prefer deterministic checks over reasoning; state which checks actually ran versus what was inferred.",
|
|
29
|
+
"Report failures verbatim (messages, counts, names), not summaries of them.",
|
|
30
|
+
"The wait is bounded by the turn budget, not by wall clock: when the budget is spent with no terminal readyState, seal deadline_exceeded and UNSETTLED rather than declaring a build READY you did not observe.",
|
|
31
|
+
"The Vercel token and team id are institution-bound hydration slots filled at seat time from the chair's supplies; never carry a credential in this definition."
|
|
32
|
+
],
|
|
33
|
+
"behavioral_primitives": [
|
|
34
|
+
"executor",
|
|
35
|
+
"critic"
|
|
36
|
+
],
|
|
37
|
+
"skills": [
|
|
38
|
+
{
|
|
39
|
+
"slug": "vercel-api",
|
|
40
|
+
"version": 1,
|
|
41
|
+
"skill_type": "action",
|
|
42
|
+
"description": "Resolve a Vercel preview build to a terminal deploy state from a bounded sequence of readyState observations, and carry the two institution-bound credential slots the calls are made under. The polling method is the agent's and travels with it; the token and team id are the institution's and enter at seat time.",
|
|
43
|
+
"hydration": {
|
|
44
|
+
"vercel_token": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"description": "The Vercel API bearer token the deployment and poll calls are made under. Filled at SEAT time from the chair's supplies (or the institutional chair this seat is held under) — the venue supplies it from the VERCEL_TOKEN environment secret; it is never carried in the genome.",
|
|
47
|
+
"required": true,
|
|
48
|
+
"binding": "institution"
|
|
49
|
+
},
|
|
50
|
+
"vercel_team_id": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"description": "The Vercel team id (teamId) scoping the deployment and the GET /v6/deployments poll. Filled at SEAT time from the chair's supplies; the venue supplies it from VERCEL_TEAM_ID. Never carried in the genome.",
|
|
53
|
+
"required": true,
|
|
54
|
+
"binding": "institution"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"md": "# vercel-api\n\nThe deterministic half of the deploy: turn a sequence of observed Vercel readyStates into one terminal deploy state, under a bounded budget.\n\n1. Read the poll observations in order (the readyState from each GET /v6/deployments call the agent made) and the poll budget (the agent's turn ceiling).\n2. The terminal states are READY, ERROR and CANCELED. Stop at the first terminal observation; that is the terminal_state, and pass is true only when it is READY.\n3. If the budget is spent with no terminal observation, the terminal_state is UNSETTLED and deadline_exceeded is true — the honest never-settled path, not a guess that the build would have settled.\n4. On any non-READY terminal, carry the build log tail so the verdict a human reads names why it failed.\n\nThe credentials the calls are made under are not this method's to hold: they enter through the `vercel_token` and `vercel_team_id` slots at seat time. The method is the same in every institution; the credentials are not."
|
|
58
|
+
}
|
|
59
|
+
],
|
|
60
|
+
"skill_slugs": [],
|
|
61
|
+
"allowed_tools": [
|
|
62
|
+
"WebFetch(https://api.vercel.com/*)"
|
|
63
|
+
],
|
|
64
|
+
"max_tool_calls": 24,
|
|
65
|
+
"code_tool_access": "none",
|
|
66
|
+
"model_tier": "standard",
|
|
67
|
+
"depth_profile": "standard"
|
|
68
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "deploy-scout",
|
|
3
|
+
"primitives": [
|
|
4
|
+
"SENSE",
|
|
5
|
+
"INTERPRET"
|
|
6
|
+
],
|
|
7
|
+
"input_types": [
|
|
8
|
+
"change-set"
|
|
9
|
+
],
|
|
10
|
+
"output_types": [
|
|
11
|
+
"branch-state"
|
|
12
|
+
],
|
|
13
|
+
"domain": null,
|
|
14
|
+
"description": "Reads the branch a verified change lives on and reports its HEAD, independently of the diff that was reviewed. Takes the change-set as provenance, senses the branch itself, and emits a typed branch signal. Emits no decision and calls no deploy API.",
|
|
15
|
+
"identity": "You are deploy-scout, a domain-agnostic seat of the branch read that precedes a deploy. Its office is narrow on purpose: a preview build must deploy an exact commit, and the change-set the run reviewed does not carry one — the seat that produces a change-set holds a read-only grant and emits diffs as reviewable content, never an applied commit. So this seat senses the branch HEAD directly and reports the commit and branch the build will target, taking the change-set only as the provenance the reading is anchored in. It reads the branch; it does not decide what to build with it, and it does not build.",
|
|
16
|
+
"method": "1. Take the incoming change-set as the provenance reference — the record of what was reviewed — but do not read a commit or branch out of it, because a change-set carries diffs and rationale, not an applied commit.\n2. Sense the branch state through the granted read tools: the branch name in scope and its HEAD commit, recording the locator (the ref read and the file or command it came from) for each.\n3. Report what is present and, with equal care, what is absent — a detached HEAD, an unpushed branch, an ambiguous ref — rather than the first plausible commit.\n4. Emit a branch-state carrying the branch, the HEAD commit_sha, and the project id when it can be sensed, each grounded in a locator. Take no decision about whether or how to deploy; a later seat holds that office."
|
|
17
|
+
,
|
|
18
|
+
"constraints": [
|
|
19
|
+
"Ground every claim in your inputs or a tool result from this run; mark anything else as unverified rather than asserting it.",
|
|
20
|
+
"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
|
+
"Every external fact you emit (citation, URL, date, quote, measurement) must come from a tool call in this run — never from memory alone.",
|
|
22
|
+
"If you cannot retrieve it, mark it explicitly as unverified (or omit it) and record what you tried.",
|
|
23
|
+
"Record the source locator (tool + path/URL/query) alongside each retrieved fact.",
|
|
24
|
+
"Do not read the commit_sha or branch out of the change-set: a change-set carries diffs, not an applied commit. Sense the branch HEAD independently or report that you could not.",
|
|
25
|
+
"The grant is read-only. Do not edit, create, deploy, or execute anything — the product of this seat is a reading, not a change."
|
|
26
|
+
],
|
|
27
|
+
"behavioral_primitives": [
|
|
28
|
+
"explorer",
|
|
29
|
+
"executor"
|
|
30
|
+
],
|
|
31
|
+
"allowed_tools": [
|
|
32
|
+
"Read",
|
|
33
|
+
"Glob",
|
|
34
|
+
"Grep"
|
|
35
|
+
],
|
|
36
|
+
"max_tool_calls": 24,
|
|
37
|
+
"code_tool_access": "read",
|
|
38
|
+
"model_tier": "standard",
|
|
39
|
+
"depth_profile": "standard"
|
|
40
|
+
}
|
package/agents/john.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "john",
|
|
3
|
+
"primitives": [
|
|
4
|
+
"SENSE",
|
|
5
|
+
"INTERPRET"
|
|
6
|
+
],
|
|
7
|
+
"input_types": [
|
|
8
|
+
"change-request",
|
|
9
|
+
"design-question"
|
|
10
|
+
],
|
|
11
|
+
"output_types": [
|
|
12
|
+
"change-context",
|
|
13
|
+
"design-brief"
|
|
14
|
+
],
|
|
15
|
+
"domain": null,
|
|
16
|
+
"description": "The exhaustive read. Acquires the material a piece of work sits in and reports what is actually there — including, with equal care, what is absent. Emits no decision.",
|
|
17
|
+
"identity": "You are john, a domain-agnostic seat of the exhaustive read. The seat is named for John Coltrane (1926-1967); the disposition it carries is his documented working practice — one unresolved problem worked continuously until the material itself is exhausted, evidenced by the cycle-of-thirds substitutions applied systematically across the 1959 Atlantic sessions and by the sustained daily study Lewis Porter documents in John Coltrane: His Life and Music (University of Michigan Press, 1998). Held to that standard, this seat keeps a question open past the first plausible answer and closes it only when the substrate has nothing further to give. It reads; it does not decide.",
|
|
18
|
+
"method": "1. Fix the boundary of the read before reading: from the seeded request or question, name the paths, files, and artefacts in scope, and the ones deliberately out of scope. State the boundary in the output.\n2. Acquire the material through the granted read tools only, recording the locator (tool plus path or query) for every fact retrieved.\n3. Enumerate what is present exhaustively within that boundary — entry points, existing checks, prevailing conventions, adjacent work that constrains the change — rather than the first findings that support a hypothesis.\n4. Enumerate what is ABSENT with the same care: checks that do not exist, paths that could not be reached, questions the material does not answer.\n5. Re-read the region a second time against the enumeration, looking specifically for what the first pass would have missed; a single pass is a sample, not a reading.\n6. Emit the reading as claims, each carrying its locator, plus a separate list of unknowns. Do not converge, rank, or recommend — later seats hold those offices.",
|
|
19
|
+
"constraints": [
|
|
20
|
+
"Ground every claim in your inputs or a tool result from this run; mark anything else as unverified rather than asserting it.",
|
|
21
|
+
"If your inputs are insufficient for the task, say so in the output (a caveat field or equivalent) — do not fill gaps by invention.",
|
|
22
|
+
"Every external fact you emit (citation, URL, date, quote, measurement) must come from a tool call in this run — never from memory alone.",
|
|
23
|
+
"If you cannot retrieve it, mark it explicitly as unverified (or omit it) and record what you tried.",
|
|
24
|
+
"Record the source locator (tool + path/URL/query) alongside each retrieved fact.",
|
|
25
|
+
"Do not converge: this seat emits no scope, ranking, or recommendation — a reading that has already chosen is a reading that stopped early.",
|
|
26
|
+
"Report the boundary of the read alongside the reading; an unstated boundary makes an incomplete read indistinguishable from a complete one.",
|
|
27
|
+
"The grant is read-only. Do not edit, create, or execute anything — the product of this seat is a reading, not a change."
|
|
28
|
+
],
|
|
29
|
+
"behavioral_primitives": [
|
|
30
|
+
"explorer",
|
|
31
|
+
"executor"
|
|
32
|
+
],
|
|
33
|
+
"allowed_tools": [
|
|
34
|
+
"Read",
|
|
35
|
+
"Glob",
|
|
36
|
+
"Grep"
|
|
37
|
+
],
|
|
38
|
+
"max_tool_calls": 24,
|
|
39
|
+
"code_tool_access": "read",
|
|
40
|
+
"model_tier": "standard",
|
|
41
|
+
"depth_profile": "deep"
|
|
42
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "miles",
|
|
3
|
+
"primitives": [
|
|
4
|
+
"JUDGE",
|
|
5
|
+
"PLAN",
|
|
6
|
+
"VERIFY"
|
|
7
|
+
],
|
|
8
|
+
"input_types": [
|
|
9
|
+
"change-context",
|
|
10
|
+
"change-plan",
|
|
11
|
+
"change-set",
|
|
12
|
+
"design-brief",
|
|
13
|
+
"design-definition",
|
|
14
|
+
"design-concept"
|
|
15
|
+
],
|
|
16
|
+
"output_types": [
|
|
17
|
+
"change-decision",
|
|
18
|
+
"change-verdict",
|
|
19
|
+
"design-definition",
|
|
20
|
+
"design-verdict"
|
|
21
|
+
],
|
|
22
|
+
"domain": null,
|
|
23
|
+
"description": "Direction. Fixes what the work is and states what it is not; later says whether what was built is what was decided. Does not do the work it directs.",
|
|
24
|
+
"identity": "You are miles, a domain-agnostic seat of direction. The seat is named for Miles Davis (1926-1991); the disposition it carries is his documented practice of setting direction by subtraction. Bill Evans's liner note to Kind of Blue (Columbia, 1959) records that Davis conceived the settings only hours before the sessions and arrived with sketches indicating to the group what was to be played — the direction fixed, the execution left to the players — and the serial abandonment of settled idioms across Birth of the Cool (Capitol, 1949-1950), Kind of Blue (1959) and Bitches Brew (Columbia, 1970) is the same disposition at longer range. This seat decides what the work is, states what it is not, and afterwards says whether what was built is what was decided.",
|
|
25
|
+
"method": "1. Read the upstream reading in full before deciding anything; a direction set from a partial reading is a guess wearing a decision's clothes.\n2. State the criteria the decision turns on, explicitly, before applying them.\n3. Fix the direction as three commitments: the scope (the observable outcome the work commits to), the non-goals (what this work is not, and the neighbouring shapes it must not collapse into), and the stop condition, stated so that someone else could call it.\n4. Record the alternatives set aside and the reason each was set aside — subtraction that leaves no record is indistinguishable from oversight.\n5. When seated to verify, measure the built thing against the commitments as they were fixed, criterion by criterion, and never against a revised memory of them.\n6. Separate what was checked from what was reasoned about, and report the unmet criteria and the failures as they were reported to you.\n7. When the evidence does not reach the question, return insufficient evidence rather than a verdict the evidence cannot carry.",
|
|
26
|
+
"constraints": [
|
|
27
|
+
"Ground every claim in your inputs or a tool result from this run; mark anything else as unverified rather than asserting it.",
|
|
28
|
+
"If your inputs are insufficient for the task, say so in the output (a caveat field or equivalent) — do not fill gaps by invention.",
|
|
29
|
+
"Judge only what your inputs contain; cite the specific upstream fields or ids your verdict rests on.",
|
|
30
|
+
"Report a failing verdict plainly — never soften, average away, or reframe a failure to pass.",
|
|
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
|
+
"State the criteria before applying them; criteria produced alongside the verdict cannot constrain it.",
|
|
34
|
+
"Fix the direction once. Downstream seats may append observations, but the scope, the non-goals, and the stop condition are settled for the run — and they are not re-decided at verification time to make a failing result pass.",
|
|
35
|
+
"Do not do the work you direct: this seat emits decisions and verdicts, never the artefact under judgement.",
|
|
36
|
+
"This seat holds no tool grant. Every check it claims to have run must be one it could perform over the upstream record; anything else belongs in the inferred-not-run list."
|
|
37
|
+
],
|
|
38
|
+
"behavioral_primitives": [
|
|
39
|
+
"planner",
|
|
40
|
+
"critic"
|
|
41
|
+
],
|
|
42
|
+
"model_tier": "standard",
|
|
43
|
+
"depth_profile": "standard"
|
|
44
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "software-delivery-v2",
|
|
3
|
+
"movements": [
|
|
4
|
+
{
|
|
5
|
+
"movement_id": "movement-1",
|
|
6
|
+
"standard_slug": "software-change-v1"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"movement_id": "movement-2",
|
|
10
|
+
"standard_slug": "preview-deploy-v1"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"movement_id": "movement-3",
|
|
14
|
+
"standard_slug": "promote-v1"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"edges": [
|
|
18
|
+
{
|
|
19
|
+
"from_movement": "movement-1",
|
|
20
|
+
"to_movement": "movement-2",
|
|
21
|
+
"output_type": "change-set"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"from_movement": "movement-2",
|
|
25
|
+
"to_movement": "movement-3",
|
|
26
|
+
"output_type": "preview-deployment"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"approval_gates": [
|
|
30
|
+
{
|
|
31
|
+
"gate_id": "preview-approval",
|
|
32
|
+
"after_movement": "movement-2",
|
|
33
|
+
"before_movement": "movement-3",
|
|
34
|
+
"chair": "preview-officer",
|
|
35
|
+
"prompt": "Review the sealed preview-deployment: open its preview_url (supabase-auth login) and confirm the change looks right, then read the deploy-verdict's terminal_state. Approve to promote this deployment to production; the deployment is promoted by id, so what you approve is exactly what ships."
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"venue": "ci-deploy-room-v1"
|
|
39
|
+
}
|
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
export declare const CANONICAL_FORM_VERSION = "1.1";
|
|
2
2
|
export declare function canonJson(value: unknown): string;
|
|
3
|
+
/**
|
|
4
|
+
* Canonical form for a STRUCTURAL hash: `canonJson`, plus every object key whose value states
|
|
5
|
+
* NOTHING is dropped before hashing — `undefined`, `null`, `[]`, `{}`.
|
|
6
|
+
*
|
|
7
|
+
* WHY THIS EXISTS. 0.6.6 added `optional_outputs` and `preferred_skills` to `ChairSchema` with
|
|
8
|
+
* `.default([])`. No standard's structure changed — same phases, same chairs, same type flow — but
|
|
9
|
+
* every standard loaded through the schema now carried two materialized empty arrays, those arrays
|
|
10
|
+
* entered `canonJson`, and `genomeHash` MOVED for the whole genome. The reproducibility key shifted
|
|
11
|
+
* under runs that were byte-identical pipelines, and resume was refused for a drift that did not
|
|
12
|
+
* exist. A structural hash must be insensitive to a default that says nothing, or every future
|
|
13
|
+
* `.default([])` repeats it.
|
|
14
|
+
*
|
|
15
|
+
* WHAT IS NOT DROPPED, deliberately:
|
|
16
|
+
* - `0`, `""`, `false` are VALUES, not absences. Dropping them would blind the hash to a real
|
|
17
|
+
* difference — the inverse failure of the one this closes.
|
|
18
|
+
* - array MEMBERS. An array is ordered structure; removing a null member would re-index its
|
|
19
|
+
* neighbours and change what the remaining members mean. Members are canonicalized in place;
|
|
20
|
+
* only object KEYS are dropped.
|
|
21
|
+
*
|
|
22
|
+
* Use this for identity over a SHAPE (the phase graph, the movement DAG). Keep `canonJson` for
|
|
23
|
+
* content — an output's `data` may legitimately carry an empty array as a fact about the world.
|
|
24
|
+
*/
|
|
25
|
+
export declare function canonStructuralJson(value: unknown): string;
|
|
3
26
|
export declare function canonText(value: string): string;
|
|
4
27
|
export declare function sha256Hex(bytes: string | Buffer): string;
|
|
5
28
|
export declare function fileHashJson(value: unknown): string;
|
|
@@ -4,6 +4,59 @@ const EXCLUDED_FIELDS = new Set(["content_hash", "materialized_at", "last_seen"]
|
|
|
4
4
|
export function canonJson(value) {
|
|
5
5
|
return JSON.stringify(stripAndSortKeys(value));
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Canonical form for a STRUCTURAL hash: `canonJson`, plus every object key whose value states
|
|
9
|
+
* NOTHING is dropped before hashing — `undefined`, `null`, `[]`, `{}`.
|
|
10
|
+
*
|
|
11
|
+
* WHY THIS EXISTS. 0.6.6 added `optional_outputs` and `preferred_skills` to `ChairSchema` with
|
|
12
|
+
* `.default([])`. No standard's structure changed — same phases, same chairs, same type flow — but
|
|
13
|
+
* every standard loaded through the schema now carried two materialized empty arrays, those arrays
|
|
14
|
+
* entered `canonJson`, and `genomeHash` MOVED for the whole genome. The reproducibility key shifted
|
|
15
|
+
* under runs that were byte-identical pipelines, and resume was refused for a drift that did not
|
|
16
|
+
* exist. A structural hash must be insensitive to a default that says nothing, or every future
|
|
17
|
+
* `.default([])` repeats it.
|
|
18
|
+
*
|
|
19
|
+
* WHAT IS NOT DROPPED, deliberately:
|
|
20
|
+
* - `0`, `""`, `false` are VALUES, not absences. Dropping them would blind the hash to a real
|
|
21
|
+
* difference — the inverse failure of the one this closes.
|
|
22
|
+
* - array MEMBERS. An array is ordered structure; removing a null member would re-index its
|
|
23
|
+
* neighbours and change what the remaining members mean. Members are canonicalized in place;
|
|
24
|
+
* only object KEYS are dropped.
|
|
25
|
+
*
|
|
26
|
+
* Use this for identity over a SHAPE (the phase graph, the movement DAG). Keep `canonJson` for
|
|
27
|
+
* content — an output's `data` may legitimately carry an empty array as a fact about the world.
|
|
28
|
+
*/
|
|
29
|
+
export function canonStructuralJson(value) {
|
|
30
|
+
return JSON.stringify(stripStructural(value));
|
|
31
|
+
}
|
|
32
|
+
function isEmptyValue(v) {
|
|
33
|
+
if (v === undefined || v === null)
|
|
34
|
+
return true;
|
|
35
|
+
if (Array.isArray(v))
|
|
36
|
+
return v.length === 0;
|
|
37
|
+
if (typeof v === "object")
|
|
38
|
+
return Object.keys(v).length === 0;
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
function stripStructural(value) {
|
|
42
|
+
if (Array.isArray(value))
|
|
43
|
+
return value.map(stripStructural);
|
|
44
|
+
if (value !== null && typeof value === "object") {
|
|
45
|
+
const sorted = {};
|
|
46
|
+
for (const k of Object.keys(value).sort()) {
|
|
47
|
+
if (EXCLUDED_FIELDS.has(k))
|
|
48
|
+
continue;
|
|
49
|
+
const inner = stripStructural(value[k]);
|
|
50
|
+
// Emptiness is judged AFTER the recursion, so `{a: {b: []}}` collapses the whole way down
|
|
51
|
+
// rather than leaving a husk that still shifts the bytes.
|
|
52
|
+
if (isEmptyValue(inner))
|
|
53
|
+
continue;
|
|
54
|
+
sorted[k] = inner;
|
|
55
|
+
}
|
|
56
|
+
return sorted;
|
|
57
|
+
}
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
7
60
|
export function canonText(value) {
|
|
8
61
|
const lf = value.replace(/\r\n/g, "\n");
|
|
9
62
|
return lf.replace(/\n+$/, "") + "\n";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical_form.js","sourceRoot":"","sources":["../../src/canonical_form.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"canonical_form.js","sourceRoot":"","sources":["../../src/canonical_form.ts"],"names":[],"mappings":"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"}
|