@eir-labs/coltrane 0.6.2 → 0.7.3

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.
Files changed (106) hide show
  1. package/README.md +23 -0
  2. package/agents/bill.json +59 -0
  3. package/agents/deploy-agent.json +68 -0
  4. package/agents/deploy-scout.json +40 -0
  5. package/agents/john.json +42 -0
  6. package/agents/lineage-scout-external.json +25 -0
  7. package/agents/lineage-scout-internal.json +32 -0
  8. package/agents/lineage-scribe.json +21 -0
  9. package/agents/lineage-weaver.json +23 -0
  10. package/agents/miles.json +44 -0
  11. package/charts/software-delivery-v1.json +9 -0
  12. package/charts/software-delivery-v2.json +39 -0
  13. package/dist/src/canonical_form.d.ts +23 -0
  14. package/dist/src/canonical_form.js +53 -0
  15. package/dist/src/canonical_form.js.map +1 -1
  16. package/dist/src/chart.d.ts +254 -0
  17. package/dist/src/chart.js +897 -0
  18. package/dist/src/chart.js.map +1 -0
  19. package/dist/src/cli.d.ts +19 -4
  20. package/dist/src/cli.js +132 -9
  21. package/dist/src/cli.js.map +1 -1
  22. package/dist/src/composition.d.ts +24 -0
  23. package/dist/src/composition.js +50 -5
  24. package/dist/src/composition.js.map +1 -1
  25. package/dist/src/genome_schema.d.ts +1203 -166
  26. package/dist/src/genome_schema.js +344 -34
  27. package/dist/src/genome_schema.js.map +1 -1
  28. package/dist/src/genome_store.d.ts +53 -3
  29. package/dist/src/genome_store.js +316 -139
  30. package/dist/src/genome_store.js.map +1 -1
  31. package/dist/src/gig_tracker.d.ts +11 -1
  32. package/dist/src/gig_tracker.js +5 -0
  33. package/dist/src/gig_tracker.js.map +1 -1
  34. package/dist/src/index.d.ts +1 -0
  35. package/dist/src/index.js +1 -0
  36. package/dist/src/index.js.map +1 -1
  37. package/dist/src/ledger.d.ts +22 -0
  38. package/dist/src/ledger.js +4 -0
  39. package/dist/src/ledger.js.map +1 -1
  40. package/dist/src/loader.d.ts +9 -1
  41. package/dist/src/loader.js +105 -5
  42. package/dist/src/loader.js.map +1 -1
  43. package/dist/src/mcp.js +54 -4
  44. package/dist/src/mcp.js.map +1 -1
  45. package/dist/src/output_mirror.d.ts +1 -1
  46. package/dist/src/outputs.d.ts +75 -1
  47. package/dist/src/outputs.js +142 -28
  48. package/dist/src/outputs.js.map +1 -1
  49. package/dist/src/reuse.d.ts +71 -0
  50. package/dist/src/reuse.js +0 -0
  51. package/dist/src/reuse.js.map +1 -1
  52. package/dist/src/runtime.d.ts +91 -2
  53. package/dist/src/runtime.js +236 -18
  54. package/dist/src/runtime.js.map +1 -1
  55. package/dist/src/server.d.ts +16 -0
  56. package/dist/src/server.js +600 -64
  57. package/dist/src/server.js.map +1 -1
  58. package/dist/src/version.d.ts +1 -1
  59. package/dist/src/version.js +1 -1
  60. package/dist/src/worker.d.ts +228 -0
  61. package/dist/src/worker.js +737 -0
  62. package/dist/src/worker.js.map +1 -0
  63. package/domain_types/alignment-plan.json +16 -0
  64. package/domain_types/branch-state.json +21 -0
  65. package/domain_types/change-context.json +39 -0
  66. package/domain_types/change-decision.json +36 -0
  67. package/domain_types/change-plan.json +47 -0
  68. package/domain_types/change-request.json +24 -0
  69. package/domain_types/change-set.json +46 -0
  70. package/domain_types/change-verdict.json +26 -0
  71. package/domain_types/deploy-verdict.json +23 -0
  72. package/domain_types/design-brief.json +37 -0
  73. package/domain_types/design-concept.json +36 -0
  74. package/domain_types/design-definition.json +37 -0
  75. package/domain_types/design-question.json +23 -0
  76. package/domain_types/design-verdict.json +27 -0
  77. package/domain_types/internal-inventory.json +26 -0
  78. package/domain_types/lineage-hit.json +19 -0
  79. package/domain_types/lineage-map.json +32 -0
  80. package/domain_types/lineage-question.json +17 -0
  81. package/domain_types/lineage-record.json +19 -0
  82. package/domain_types/lineage-verdict.json +16 -0
  83. package/domain_types/preview-deployment.json +32 -0
  84. package/institutions/quartet.json +344 -0
  85. package/package.json +4 -1
  86. package/skills/vercel-api/fixtures/error.json +10 -0
  87. package/skills/vercel-api/fixtures/ready.json +10 -0
  88. package/skills/vercel-api/fixtures/unsettled.json +10 -0
  89. package/skills/vercel-api/meta.json +10 -0
  90. package/skills/vercel-api/skill.mjs +63 -0
  91. package/standards/lineage-pass-v1.json +96 -0
  92. package/standards/preview-deploy-v1.json +89 -0
  93. package/standards/product-design-v1.json +122 -0
  94. package/standards/promote-v1.json +41 -0
  95. package/standards/software-change-v1.json +147 -0
  96. package/venues/ci-deploy-room-v1.json +28 -0
  97. package/venues/empty-room-v1.json +19 -0
  98. package/dist/src/conduct_daemon.d.ts +0 -59
  99. package/dist/src/conduct_daemon.js +0 -178
  100. package/dist/src/conduct_daemon.js.map +0 -1
  101. package/dist/src/play_worker.d.ts +0 -24
  102. package/dist/src/play_worker.js +0 -49
  103. package/dist/src/play_worker.js.map +0 -1
  104. package/dist/src/supabase_genome.d.ts +0 -28
  105. package/dist/src/supabase_genome.js +0 -49
  106. package/dist/src/supabase_genome.js.map +0 -1
@@ -0,0 +1,89 @@
1
+ {
2
+ "slug": "preview-deploy-v1",
3
+ "domain": "preview-deploy",
4
+ "status": "active",
5
+ "description": "The phone conducts, Vercel builds, the officer seals. Sense the branch HEAD → deploy it to a Vercel preview and wait on the build with a bounded in-turn poll → verify the terminal state. Three seams: the seat that senses the branch does not deploy, the seat that deploys reads the build it made, and the verdict is the honest terminal state — READY passes, a non-READY terminal fails with its logs, a spent poll budget is UNSETTLED. The branch commit is sensed independently rather than read out of the change-set, because a change-set carries diffs, never an applied commit. The deploy seat holds exactly one narrow WebFetch grant, the Vercel REST origin, and its credentials are institution-bound slots filled at seat time — never in the genome.",
6
+ "agent_slugs": [
7
+ "deploy-scout",
8
+ "deploy-agent"
9
+ ],
10
+ "phases": [
11
+ {
12
+ "name": "sense-branch",
13
+ "chairs": [
14
+ {
15
+ "role": "sense-branch",
16
+ "agent_slug": "deploy-scout",
17
+ "depends_on": [],
18
+ "input_contract": [
19
+ "change-set"
20
+ ],
21
+ "output_contract": [
22
+ "branch-state"
23
+ ],
24
+ "required_skills": []
25
+ }
26
+ ],
27
+ "intent": "Read the branch HEAD the verified change lives on and report the commit and branch the preview will build. The incoming change-set is provenance only — the commit is sensed directly, because a change-set carries diffs and rationale, not an applied commit. No deploy is made here."
28
+ },
29
+ {
30
+ "name": "deploy-branch",
31
+ "chairs": [
32
+ {
33
+ "role": "deploy-branch",
34
+ "agent_slug": "deploy-agent",
35
+ "depends_on": [
36
+ "sense-branch"
37
+ ],
38
+ "input_contract": [
39
+ "branch-state"
40
+ ],
41
+ "output_contract": [
42
+ "preview-deployment"
43
+ ],
44
+ "required_skills": [
45
+ "vercel-api"
46
+ ],
47
+ "supplies": {
48
+ "vercel_token": "env:VERCEL_TOKEN",
49
+ "vercel_team_id": "env:VERCEL_TEAM_ID"
50
+ }
51
+ }
52
+ ],
53
+ "intent": "Call POST /v13/deployments for a preview target against the sensed commit, then wait on the build with a bounded synchronous poll — one WebFetch GET /v6/deployments per iteration, capped by the turn budget, no subprocess — until a terminal readyState is observed or the budget is spent. Seal a preview-deployment either way, carrying the url, commit, branch, project id, deployment id, the last observed build_status and the protection mode. The Vercel token and team id enter here from the chair's supplies; the venue fills them from environment secrets."
54
+ },
55
+ {
56
+ "name": "verify-build",
57
+ "chairs": [
58
+ {
59
+ "role": "verify-build",
60
+ "agent_slug": "deploy-agent",
61
+ "depends_on": [
62
+ "deploy-branch"
63
+ ],
64
+ "input_contract": [
65
+ "preview-deployment"
66
+ ],
67
+ "output_contract": [
68
+ "deploy-verdict"
69
+ ],
70
+ "required_skills": [
71
+ "vercel-api"
72
+ ],
73
+ "supplies": {
74
+ "vercel_token": "env:VERCEL_TOKEN",
75
+ "vercel_team_id": "env:VERCEL_TEAM_ID"
76
+ }
77
+ }
78
+ ],
79
+ "intent": "Read the sealed preview-deployment and say whether the build settled. pass is true only on READY; a non-READY terminal (ERROR, CANCELED) fails and carries the build log tail; and when the poll budget was spent with no terminal readyState, the verdict is terminal_state UNSETTLED with deadline_exceeded true and pass false — the honest never-settled path, visible in the ledger rather than a guessed READY."
80
+ }
81
+ ],
82
+ "input_types": [
83
+ "change-set"
84
+ ],
85
+ "output_types": [
86
+ "preview-deployment",
87
+ "deploy-verdict"
88
+ ]
89
+ }
@@ -0,0 +1,122 @@
1
+ {
2
+ "slug": "product-design-v1",
3
+ "domain": "product-design",
4
+ "status": "active",
5
+ "description": "The default product-design standard: a double diamond mapped onto the cognitive primitives without embellishment. Discover diverges (SENSE then INTERPRET); define converges (JUDGE, sealing a Plan); develop diverges again and builds (PLAN then CREATE); deliver converges (VERIFY). The two convergences are held by the same seat and the two divergences by different ones, so a widening pass is never marked complete by the seat that narrowed it.",
6
+ "agent_slugs": [
7
+ "john",
8
+ "bill",
9
+ "miles"
10
+ ],
11
+ "phases": [
12
+ {
13
+ "name": "discover",
14
+ "chairs": [
15
+ {
16
+ "role": "discover",
17
+ "agent_slug": "john",
18
+ "depends_on": [],
19
+ "input_contract": [
20
+ "design-question"
21
+ ],
22
+ "output_contract": [
23
+ "design-brief"
24
+ ],
25
+ "required_skills": []
26
+ }
27
+ ],
28
+ "intent": "First divergence. Hold the question open: observations with their locators, the audience segments it lands differently for, the needs the current state does not serve, the adjacent questions the exploration surfaced, and an honest statement of how far the exploration actually reached. Findings only \u2014 nothing is chosen here."
29
+ },
30
+ {
31
+ "name": "define",
32
+ "chairs": [
33
+ {
34
+ "role": "define",
35
+ "agent_slug": "miles",
36
+ "depends_on": [
37
+ "discover"
38
+ ],
39
+ "input_contract": [
40
+ "design-brief"
41
+ ],
42
+ "output_contract": [
43
+ "design-definition"
44
+ ],
45
+ "required_skills": []
46
+ }
47
+ ],
48
+ "intent": "First convergence, and the seam between the diamonds. Name the ONE problem the second diamond opens on, what is out of scope, the success criteria a stranger could check \u2014 and, explicitly, the problems the brief surfaced that this definition discarded, each with its reason. Sealed as a Plan because the definition sequences what follows."
49
+ },
50
+ {
51
+ "name": "develop",
52
+ "chairs": [
53
+ {
54
+ "role": "develop",
55
+ "agent_slug": "bill",
56
+ "depends_on": [
57
+ "define"
58
+ ],
59
+ "input_contract": [
60
+ "design-definition"
61
+ ],
62
+ "output_contract": [
63
+ "design-concept"
64
+ ],
65
+ "required_skills": [],
66
+ "preferred_skills": [
67
+ "structure-conformance"
68
+ ]
69
+ }
70
+ ],
71
+ "intent": "Second divergence, built rather than described. The concept states its mechanism step by step, names which success criteria it answers, and carries its tradeoffs and open questions \u2014 a concept presented as settled cannot be evaluated against the contest it hides."
72
+ },
73
+ {
74
+ "name": "deliver",
75
+ "chairs": [
76
+ {
77
+ "role": "deliver",
78
+ "agent_slug": "miles",
79
+ "depends_on": [
80
+ "define",
81
+ "develop"
82
+ ],
83
+ "input_contract": [
84
+ "design-definition",
85
+ "design-concept"
86
+ ],
87
+ "output_contract": [
88
+ "design-verdict"
89
+ ],
90
+ "required_skills": []
91
+ }
92
+ ],
93
+ "intent": "Second convergence. Measure the concept against the definition as sealed, criterion by criterion, and separate what was observed from what was reasoned about \u2014 most design criteria cannot be executed, so a verdict that does not say so overstates its own evidence. Where the concept is sound but the problem was the wrong one, the recommendation returns the run to the first seam."
94
+ },
95
+ {
96
+ "name": "approve",
97
+ "chairs": [
98
+ {
99
+ "role": "approve",
100
+ "agent_slug": "",
101
+ "human": true,
102
+ "depends_on": [
103
+ "deliver"
104
+ ],
105
+ "input_contract": [],
106
+ "output_contract": [
107
+ "Judgment"
108
+ ],
109
+ "optional_outputs": [],
110
+ "required_skills": []
111
+ }
112
+ ]
113
+ }
114
+ ],
115
+ "input_types": [
116
+ "design-question"
117
+ ],
118
+ "output_types": [
119
+ "design-concept",
120
+ "design-verdict"
121
+ ]
122
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "slug": "promote-v1",
3
+ "domain": "preview-deploy",
4
+ "status": "active",
5
+ "description": "A minimal promote stub — the third movement of software-delivery-v2. It declares preview-deployment in its input_types so the chart's movement-2 → movement-3 edge is a satisfied hard edge (R7), and its one chair reads the deployment_id from the sealed preview-deployment to promote it to production, sealing a deploy-verdict for the production build's terminal state. Its FULL phase graph is deferred by the sealed design (gig 0538105e names movement-3 as a contract boundary only, requiring its own design run); this file is built only to the extent the chart's honest edge and the approval gate before it require. The gate's Judgment is offered to this movement as a seed at runtime — the approver's decision lands in the production deploy's ledger ancestry — without being declared in input_contract, because declaring it as a standard input would make it an outside-need the chart has no edge to satisfy.",
6
+ "agent_slugs": [
7
+ "deploy-agent"
8
+ ],
9
+ "phases": [
10
+ {
11
+ "name": "promote",
12
+ "chairs": [
13
+ {
14
+ "role": "promote-preview",
15
+ "agent_slug": "deploy-agent",
16
+ "depends_on": [],
17
+ "input_contract": [
18
+ "preview-deployment"
19
+ ],
20
+ "output_contract": [
21
+ "deploy-verdict"
22
+ ],
23
+ "required_skills": [
24
+ "vercel-api"
25
+ ],
26
+ "supplies": {
27
+ "vercel_token": "env:VERCEL_TOKEN",
28
+ "vercel_team_id": "env:VERCEL_TEAM_ID"
29
+ }
30
+ }
31
+ ],
32
+ "intent": "Read the deployment_id from the sealed preview-deployment, promote that deployment to production through the Vercel promote API, and wait on the production build with the same bounded poll, sealing a deploy-verdict for its terminal state. STUB: the full promote phase graph is deferred to its own design run per the sealed design's boundary."
33
+ }
34
+ ],
35
+ "input_types": [
36
+ "preview-deployment"
37
+ ],
38
+ "output_types": [
39
+ "deploy-verdict"
40
+ ]
41
+ }
@@ -0,0 +1,147 @@
1
+ {
2
+ "slug": "software-change-v1",
3
+ "domain": "software-change",
4
+ "status": "active",
5
+ "description": "The default software-change standard. Read the material exhaustively, fix the direction, settle the structure, make the change, then say whether what was built is what was decided. The seams are deliberate: the seat that reads does not decide, the seat that decides does not build, and the seat that builds does not judge its own work. Only the reading seat holds a tool grant, and it is read-only \u2014 the change is emitted as reviewable content, never applied.",
6
+ "agent_slugs": [
7
+ "john",
8
+ "bill",
9
+ "miles"
10
+ ],
11
+ "phases": [
12
+ {
13
+ "name": "sense-context",
14
+ "chairs": [
15
+ {
16
+ "role": "read-context",
17
+ "agent_slug": "john",
18
+ "depends_on": [],
19
+ "input_contract": [
20
+ "change-request"
21
+ ],
22
+ "output_contract": [
23
+ "change-context"
24
+ ],
25
+ "required_skills": []
26
+ }
27
+ ],
28
+ "intent": "Read the material the change lands in, to the declared boundary and no further: entry points, the files the change plausibly touches, the checks that already cover the region, the conventions it must hold to \u2014 and the unknowns, which are part of the reading, not a failure of it. No decision is taken here."
29
+ },
30
+ {
31
+ "name": "frame-change",
32
+ "chairs": [
33
+ {
34
+ "role": "frame-change",
35
+ "agent_slug": "miles",
36
+ "depends_on": [
37
+ "read-context"
38
+ ],
39
+ "input_contract": [
40
+ "change-context"
41
+ ],
42
+ "output_contract": [
43
+ "change-decision"
44
+ ],
45
+ "required_skills": []
46
+ }
47
+ ],
48
+ "intent": "Fix the direction from the reading: scope, non-goals, stop condition, and the alternatives set aside with their reasons. Stated before any structure exists, so the structure is answerable to it. Settled for the run \u2014 later phases append observations, never revisions."
49
+ },
50
+ {
51
+ "name": "plan-change",
52
+ "chairs": [
53
+ {
54
+ "role": "plan-change",
55
+ "agent_slug": "bill",
56
+ "depends_on": [
57
+ "read-context",
58
+ "frame-change"
59
+ ],
60
+ "input_contract": [
61
+ "change-context",
62
+ "change-decision"
63
+ ],
64
+ "output_contract": [
65
+ "change-plan"
66
+ ],
67
+ "required_skills": [],
68
+ "preferred_skills": [
69
+ "structure-conformance"
70
+ ]
71
+ }
72
+ ],
73
+ "intent": "Settle the structure the change will be built through: ordered steps with explicit dependencies, the checks that land FIRST together with what each reports while the change is absent, the paths the plan commits to touching, and the tradeoff at every step where more than one structure would have served."
74
+ },
75
+ {
76
+ "name": "create-change",
77
+ "chairs": [
78
+ {
79
+ "role": "write-change",
80
+ "agent_slug": "bill",
81
+ "depends_on": [
82
+ "plan-change"
83
+ ],
84
+ "input_contract": [
85
+ "change-plan"
86
+ ],
87
+ "output_contract": [
88
+ "change-set"
89
+ ],
90
+ "required_skills": [],
91
+ "preferred_skills": [
92
+ "structure-conformance"
93
+ ]
94
+ }
95
+ ],
96
+ "intent": "Make the change the structure implies, as patch content plus the checks it introduces. Where the artefact left the plan, the departure is recorded with its reason \u2014 the same seat that settled the structure is the one accountable for saying where it did not hold."
97
+ },
98
+ {
99
+ "name": "verify-change",
100
+ "chairs": [
101
+ {
102
+ "role": "verify-change",
103
+ "agent_slug": "miles",
104
+ "depends_on": [
105
+ "plan-change",
106
+ "write-change"
107
+ ],
108
+ "input_contract": [
109
+ "change-plan",
110
+ "change-set"
111
+ ],
112
+ "output_contract": [
113
+ "change-verdict"
114
+ ],
115
+ "required_skills": []
116
+ }
117
+ ],
118
+ "intent": "Measure the change against the commitments as fixed, criterion by criterion: which acceptance criteria are unmet, where the scope drifted, and \u2014 separately and always \u2014 which checks could not be executed and were reasoned about instead. When the evidence does not reach the question, the verdict is insufficient evidence, not a pass."
119
+ },
120
+ {
121
+ "name": "approve",
122
+ "chairs": [
123
+ {
124
+ "role": "approve",
125
+ "agent_slug": "",
126
+ "human": true,
127
+ "depends_on": [
128
+ "verify-change"
129
+ ],
130
+ "input_contract": [],
131
+ "output_contract": [
132
+ "Judgment"
133
+ ],
134
+ "optional_outputs": [],
135
+ "required_skills": []
136
+ }
137
+ ]
138
+ }
139
+ ],
140
+ "input_types": [
141
+ "change-request"
142
+ ],
143
+ "output_types": [
144
+ "change-set",
145
+ "change-verdict"
146
+ ]
147
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "slug": "ci-deploy-room-v1",
3
+ "institution_slug": "quartet",
4
+ "flavor": "ci-deploy",
5
+ "description": "The room a change-to-preview arrangement is held in. It equips exactly what the movements need and nothing more: read-only filesystem tools so the reading and branch-sensing seats can read the working tree, and the Vercel REST origin so the deploy seat can build and poll — a ceiling, not a grant, so it can only narrow a seated agent's own charter, never widen it. The one egress door names api.vercel.com; the only credential class it admits is the Vercel token, filled at seat time from the environment. Ephemeral, because a room that stood between runs would carry one gig's branch state and warm credentials into the next.",
6
+ "equipment": {
7
+ "tools": [
8
+ "Read",
9
+ "Glob",
10
+ "Grep",
11
+ "WebFetch(https://api.vercel.com/*)"
12
+ ]
13
+ },
14
+ "doors": {
15
+ "ingress": [],
16
+ "egress": [
17
+ "api.vercel.com"
18
+ ]
19
+ },
20
+ "installs": [],
21
+ "credential_surface": [
22
+ "vercel-token"
23
+ ],
24
+ "lifecycle": {
25
+ "policy": "ephemeral"
26
+ },
27
+ "responsible_chair": "quartet.chair.responsible-officer"
28
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "slug": "empty-room-v1",
3
+ "institution_slug": "quartet",
4
+ "flavor": "ingest-empty",
5
+ "description": "The goods entrance. This is the room for reading third-party content — mail, chat platforms, web pages, vendor documents — and it is bare because bareness is the control. Untrusted text cannot be reliably separated from instruction by the model reading it, so the constraint has to be structural: it holds NO tools (not read-only tools; none), no egress door of any kind, no credential surface, and nothing installed. One ingress door names the single source it reads from. A chair seated here can do exactly one thing: emit a typed record of what it read, whose provenance says the content is untrusted and never instruction, into a spool a LATER phase drains from a different room — one that holds interpretation capability and no ingress from this source. Private data is absent (no credentials, nothing mounted) and there is no attacker-steerable exit (no egress, and the one write goes to a fixed engine-chosen destination the content cannot redirect), so two of the three conditions that make injected instructions consequential are structurally missing rather than argued away. What remains is the spool write itself, which is a channel: fixed destination, declared type, no attacker-chosen route. The claim is a BOUNDED residual channel, not the absence of one. Ephemeral because a room that persists between ingestions carries the previous ingestion's content forward into whoever sits here next.",
6
+ "equipment": {
7
+ "tools": []
8
+ },
9
+ "doors": {
10
+ "ingress": ["mail.example.com"],
11
+ "egress": []
12
+ },
13
+ "installs": [],
14
+ "credential_surface": [],
15
+ "lifecycle": {
16
+ "policy": "ephemeral"
17
+ },
18
+ "responsible_chair": "quartet.chair.responsible-officer"
19
+ }
@@ -1,59 +0,0 @@
1
- import type { AgentInvoker, ChairSelector } from "./runtime.js";
2
- export type { ChairSelector };
3
- export interface MaintainerPort {
4
- ask(question: string, options: readonly string[]): Promise<{
5
- choice: string;
6
- }>;
7
- }
8
- export interface PersonaRouter {
9
- /** Default sink for member requests — personal instance only. */
10
- to_personal(payload: unknown): Promise<void>;
11
- /** The ONLY institutional sink; reachable solely through publish_to_institution. */
12
- to_signal_input(payload: unknown): Promise<void>;
13
- }
14
- export interface RigorGate {
15
- admits(payload: unknown): boolean | Promise<boolean>;
16
- }
17
- export interface ConductDaemonOptions {
18
- invoke: AgentInvoker;
19
- maintainer: MaintainerPort;
20
- /** Routing law seam — deny-by-default when omitted. */
21
- router?: PersonaRouter | undefined;
22
- /** Rigor gate seam — deny-by-default (admits=false) when omitted. */
23
- rigor?: RigorGate | undefined;
24
- /** Optional routing hook wired to the existing ChairSelector seam. */
25
- selectChairs?: ChairSelector | undefined;
26
- }
27
- interface StanceTask {
28
- stance: string;
29
- result?: Record<string, unknown>;
30
- }
31
- export interface ConductStop {
32
- maxIterations: number;
33
- }
34
- export interface ConductDaemon {
35
- fan_out(stances: string[]): Promise<StanceTask[]>;
36
- cross_review(): Promise<void>;
37
- synthesize(): Promise<void>;
38
- /** Non-blocking background merge of a settled result into the artifact. */
39
- fold_back(result: Record<string, unknown>): void;
40
- adjudicate(): Promise<{
41
- choice: string;
42
- } | null>;
43
- settle(): Promise<string>;
44
- duetto_declare(payload: unknown): string;
45
- duetto_receive(id: string): Promise<unknown>;
46
- /** Resident loop: fan_out → cross_review → synthesize → adjudicate → settle. */
47
- run(stop: ConductStop): Promise<string>;
48
- /** Test hook — forces the artifact into a non-unanimous state. */
49
- _forceNonUnanimous(): void;
50
- /** Routes member request to personal instance only; appends to shared scratchpad. */
51
- route_member_request(payload: unknown): Promise<void>;
52
- /** The rigor gate — the ONLY path to router.to_signal_input. */
53
- publish_to_institution(payload: unknown): Promise<{
54
- published: boolean;
55
- }>;
56
- /** Read-only view of the single shared scratchpad accumulator. */
57
- read_scratchpad(): readonly unknown[];
58
- }
59
- export declare function makeConductDaemon(opts: ConductDaemonOptions): ConductDaemon;