@eir-labs/coltrane 0.24.14 → 0.24.15

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 (60) hide show
  1. package/agents/bandleader.json +5 -5
  2. package/agents/default-adjudicator.json +39 -0
  3. package/agents/deploy-agent.json +1 -2
  4. package/agents/deploy-scout.json +1 -2
  5. package/agents/lineage-scout-internal.json +14 -4
  6. package/agents/lineage-scribe.json +6 -6
  7. package/agents/lineage-weaver.json +8 -8
  8. package/agents/patent-browser-scout.json +3 -1
  9. package/agents/proof-composer.json +38 -0
  10. package/agents/receipt-mapper.json +39 -0
  11. package/agents/reconciliation-auditor.json +45 -0
  12. package/dist/src/cli.d.ts +1 -1
  13. package/dist/src/version.d.ts +1 -1
  14. package/dist/src/version.js +1 -1
  15. package/domain_types/alignment-plan.json +9 -3
  16. package/domain_types/branch-state.json +12 -3
  17. package/domain_types/change-decision.json +32 -7
  18. package/domain_types/change-plan.json +41 -12
  19. package/domain_types/change-request.json +37 -7
  20. package/domain_types/change-set.json +40 -11
  21. package/domain_types/change-verdict.json +42 -6
  22. package/domain_types/deploy-verdict.json +21 -3
  23. package/domain_types/design-brief.json +48 -9
  24. package/domain_types/design-concept.json +40 -9
  25. package/domain_types/design-definition.json +40 -9
  26. package/domain_types/design-question.json +26 -5
  27. package/domain_types/design-verdict.json +42 -6
  28. package/domain_types/draft-agent-profile.json +75 -14
  29. package/domain_types/draft-domain-type.json +56 -11
  30. package/domain_types/draft-standard.json +57 -15
  31. package/domain_types/internal-inventory.json +15 -5
  32. package/domain_types/lineage-adoption-target.json +4 -1
  33. package/domain_types/lineage-hit.json +19 -6
  34. package/domain_types/lineage-map.json +35 -8
  35. package/domain_types/lineage-question.json +13 -4
  36. package/domain_types/lineage-record.json +71 -18
  37. package/domain_types/lineage-verdict.json +9 -3
  38. package/domain_types/parsed-conversation-trace.json +54 -13
  39. package/domain_types/pattern-extraction.json +91 -21
  40. package/domain_types/preview-deployment.json +37 -8
  41. package/domain_types/project-charter.json +59 -16
  42. package/domain_types/proof-of-work-contract.json +86 -0
  43. package/domain_types/reconciliation-map.json +90 -0
  44. package/domain_types/reconciliation-record.json +52 -0
  45. package/domain_types/red-spec.json +2 -2
  46. package/domain_types/repo-survey.json +84 -14
  47. package/domain_types/seeding-verdict.json +93 -27
  48. package/domain_types/soft-verdict.json +45 -10
  49. package/domain_types/user-flow-transcript.json +36 -10
  50. package/domain_types/user-flow-verdict.json +57 -13
  51. package/package.json +1 -1
  52. package/standards/lineage-adopt-v0.json +2 -2
  53. package/standards/lineage-deepen-v0.json +12 -4
  54. package/standards/lineage-pass-v1.json +60 -17
  55. package/standards/lineage-reweave-v0.json +34 -10
  56. package/standards/patent-triage-v1.json +170 -12
  57. package/standards/product-design-v1.json +4 -4
  58. package/standards/reconcile-work-order-v0.json +137 -0
  59. package/standards/software-change-v1.json +5 -5
  60. package/standards/user_flow_correctness.json +3 -3
@@ -8,21 +8,91 @@
8
8
  "schema": {
9
9
  "type": "object",
10
10
  "properties": {
11
- "repo_path": { "type": "string", "description": "Absolute path to the repo on disk." },
12
- "repo_name": { "type": "string", "description": "Basename of the repo directory." },
13
- "primary_language": { "type": ["string", "null"], "description": "Inferred from file-extension distribution + manifest files. Null if mixed/unclear." },
14
- "manifest_files": { "type": "array", "items": { "type": "string" }, "description": "Detected manifest files: package.json, pyproject.toml, Cargo.toml, go.mod, etc." },
15
- "readme_h1": { "type": ["string", "null"], "description": "First H1 line of README (≤200 chars), if present." },
16
- "readme_first_lines": { "type": ["string", "null"], "description": "First 200 chars of README body for context." },
17
- "has_claude_md": { "type": "boolean", "description": "Whether the repo has a CLAUDE.md." },
18
- "has_dot_claude": { "type": "boolean", "description": "Whether the repo has a .claude/ directory (subagents, commands, hooks)." },
19
- "has_dot_coltrane": { "type": "boolean", "description": "Whether the repo has a .coltrane/ directory (already coltrane-flavored)." },
20
- "commit_rhythm_30d": { "type": ["integer", "null"], "description": "Number of commits in the last 30 days." },
21
- "last_commit_at": { "type": ["string", "null"], "format": "date-time" },
22
- "top_directories": { "type": "array", "items": { "type": "string" }, "description": "Top-level subdirectory names (e.g. src/, tests/, docs/) — structural hint." },
23
- "survey_completeness": { "type": "string", "enum": ["complete", "partial", "shallow"], "description": "Honest signal-bound: did we hit the scan limits or get clean reads on every channel?" }
11
+ "repo_path": {
12
+ "type": "string",
13
+ "description": "Absolute path to the repo on disk."
14
+ },
15
+ "repo_name": {
16
+ "type": "string",
17
+ "description": "Basename of the repo directory."
18
+ },
19
+ "primary_language": {
20
+ "type": [
21
+ "string",
22
+ "null"
23
+ ],
24
+ "description": "Inferred from file-extension distribution + manifest files. Null if mixed/unclear."
25
+ },
26
+ "manifest_files": {
27
+ "type": "array",
28
+ "items": {
29
+ "type": "string"
30
+ },
31
+ "description": "Detected manifest files: package.json, pyproject.toml, Cargo.toml, go.mod, etc."
32
+ },
33
+ "readme_h1": {
34
+ "type": [
35
+ "string",
36
+ "null"
37
+ ],
38
+ "description": "First H1 line of README (≤200 chars), if present."
39
+ },
40
+ "readme_first_lines": {
41
+ "type": [
42
+ "string",
43
+ "null"
44
+ ],
45
+ "description": "First 200 chars of README body for context."
46
+ },
47
+ "has_claude_md": {
48
+ "type": "boolean",
49
+ "description": "Whether the repo has a CLAUDE.md."
50
+ },
51
+ "has_dot_claude": {
52
+ "type": "boolean",
53
+ "description": "Whether the repo has a .claude/ directory (subagents, commands, hooks)."
54
+ },
55
+ "has_dot_coltrane": {
56
+ "type": "boolean",
57
+ "description": "Whether the repo has a .coltrane/ directory (already coltrane-flavored)."
58
+ },
59
+ "commit_rhythm_30d": {
60
+ "type": [
61
+ "integer",
62
+ "null"
63
+ ],
64
+ "description": "Number of commits in the last 30 days."
65
+ },
66
+ "last_commit_at": {
67
+ "type": [
68
+ "string",
69
+ "null"
70
+ ],
71
+ "format": "date-time"
72
+ },
73
+ "top_directories": {
74
+ "type": "array",
75
+ "items": {
76
+ "type": "string"
77
+ },
78
+ "description": "Top-level subdirectory names (e.g. src/, tests/, docs/) — structural hint."
79
+ },
80
+ "survey_completeness": {
81
+ "type": "string",
82
+ "enum": [
83
+ "complete",
84
+ "partial",
85
+ "shallow"
86
+ ],
87
+ "description": "Honest signal-bound: did we hit the scan limits or get clean reads on every channel?"
88
+ }
24
89
  },
25
- "required": ["repo_path", "repo_name", "survey_completeness", "source"]
90
+ "required": [
91
+ "repo_path",
92
+ "repo_name",
93
+ "survey_completeness",
94
+ "source"
95
+ ]
26
96
  },
27
97
  "required_fields": []
28
98
  }
@@ -8,63 +8,129 @@
8
8
  "schema": {
9
9
  "type": "object",
10
10
  "properties": {
11
- "input_refs": { "type": "array", "items": { "type": "string" }, "description": "References to all draft-* outputs this verdict resolves." },
12
- "repos_surveyed": { "type": "integer", "description": "Total repo-survey signals consumed." },
13
- "patterns_extracted": { "type": "integer", "description": "Total pattern-extraction interpretations produced." },
14
-
11
+ "input_refs": {
12
+ "type": "array",
13
+ "items": {
14
+ "type": "string"
15
+ },
16
+ "description": "References to all draft-* outputs this verdict resolves."
17
+ },
18
+ "repos_surveyed": {
19
+ "type": "integer",
20
+ "description": "Total repo-survey signals consumed."
21
+ },
22
+ "patterns_extracted": {
23
+ "type": "integer",
24
+ "description": "Total pattern-extraction interpretations produced."
25
+ },
15
26
  "drafts_proposed": {
16
27
  "type": "object",
17
28
  "properties": {
18
- "agents": { "type": "integer" },
19
- "standards": { "type": "integer" },
20
- "domain_types": { "type": "integer" }
29
+ "agents": {
30
+ "type": "integer"
31
+ },
32
+ "standards": {
33
+ "type": "integer"
34
+ },
35
+ "domain_types": {
36
+ "type": "integer"
37
+ }
21
38
  }
22
39
  },
23
40
  "drafts_accepted": {
24
41
  "type": "object",
25
42
  "properties": {
26
- "agents": { "type": "integer" },
27
- "standards": { "type": "integer" },
28
- "domain_types": { "type": "integer" }
43
+ "agents": {
44
+ "type": "integer"
45
+ },
46
+ "standards": {
47
+ "type": "integer"
48
+ },
49
+ "domain_types": {
50
+ "type": "integer"
51
+ }
29
52
  }
30
53
  },
31
54
  "drafts_rejected": {
32
55
  "type": "object",
33
56
  "properties": {
34
- "agents": { "type": "integer" },
35
- "standards": { "type": "integer" },
36
- "domain_types": { "type": "integer" }
57
+ "agents": {
58
+ "type": "integer"
59
+ },
60
+ "standards": {
61
+ "type": "integer"
62
+ },
63
+ "domain_types": {
64
+ "type": "integer"
65
+ }
37
66
  }
38
67
  },
39
68
  "drafts_refined": {
40
69
  "type": "object",
41
70
  "description": "Drafts the user edited before accepting — re-proposed and adopted in modified form.",
42
71
  "properties": {
43
- "agents": { "type": "integer" },
44
- "standards": { "type": "integer" },
45
- "domain_types": { "type": "integer" }
72
+ "agents": {
73
+ "type": "integer"
74
+ },
75
+ "standards": {
76
+ "type": "integer"
77
+ },
78
+ "domain_types": {
79
+ "type": "integer"
80
+ }
46
81
  }
47
82
  },
48
-
49
- "pass": { "type": "boolean", "description": "True if ≥1 draft of each kind (agent/standard/type) was accepted, OR the user explicitly approves the empty-result verdict." },
83
+ "pass": {
84
+ "type": "boolean",
85
+ "description": "True if ≥1 draft of each kind (agent/standard/type) was accepted, OR the user explicitly approves the empty-result verdict."
86
+ },
50
87
  "checks": {
51
88
  "type": "array",
52
89
  "items": {
53
90
  "type": "object",
54
91
  "properties": {
55
- "name": { "type": "string" },
56
- "method": { "type": "string", "description": "How the check was performed. Required by the Verdict core invariant (#227/#228) — this item schema previously omitted it, so a maximally schema-valid seeding-verdict was unsealable." },
57
- "passed": { "type": "boolean" },
58
- "note": { "type": "string" }
92
+ "name": {
93
+ "type": "string"
94
+ },
95
+ "method": {
96
+ "type": "string",
97
+ "description": "How the check was performed. Required by the Verdict core invariant (#227/#228) — this item schema previously omitted it, so a maximally schema-valid seeding-verdict was unsealable."
98
+ },
99
+ "passed": {
100
+ "type": "boolean"
101
+ },
102
+ "note": {
103
+ "type": "string"
104
+ }
59
105
  },
60
- "required": ["name", "method", "passed"]
106
+ "required": [
107
+ "name",
108
+ "method",
109
+ "passed"
110
+ ]
61
111
  }
62
112
  },
63
-
64
- "outcome": { "type": "string", "enum": ["completed", "partial", "refined", "aborted"] },
65
- "next_step_hint": { "type": "string", "description": "What to run next." }
113
+ "outcome": {
114
+ "type": "string",
115
+ "enum": [
116
+ "completed",
117
+ "partial",
118
+ "refined",
119
+ "aborted"
120
+ ]
121
+ },
122
+ "next_step_hint": {
123
+ "type": "string",
124
+ "description": "What to run next."
125
+ }
66
126
  },
67
- "required": ["input_refs", "repos_surveyed", "pass", "checks", "outcome"]
127
+ "required": [
128
+ "input_refs",
129
+ "repos_surveyed",
130
+ "pass",
131
+ "checks",
132
+ "outcome"
133
+ ]
68
134
  },
69
135
  "required_fields": []
70
136
  }
@@ -13,38 +13,73 @@
13
13
  "parent_context_preservation": {
14
14
  "type": "object",
15
15
  "properties": {
16
- "score": { "type": ["number", "null"] },
17
- "rationale": { "type": "string" }
16
+ "score": {
17
+ "type": [
18
+ "number",
19
+ "null"
20
+ ]
21
+ },
22
+ "rationale": {
23
+ "type": "string"
24
+ }
18
25
  }
19
26
  },
20
27
  "child_stay_on_task": {
21
28
  "type": "object",
22
29
  "properties": {
23
- "score": { "type": ["number", "null"] },
24
- "rationale": { "type": "string" }
30
+ "score": {
31
+ "type": [
32
+ "number",
33
+ "null"
34
+ ]
35
+ },
36
+ "rationale": {
37
+ "type": "string"
38
+ }
25
39
  }
26
40
  },
27
41
  "inter_turn_coherence": {
28
42
  "type": "object",
29
43
  "properties": {
30
- "score": { "type": ["number", "null"] },
31
- "rationale": { "type": "string" }
44
+ "score": {
45
+ "type": [
46
+ "number",
47
+ "null"
48
+ ]
49
+ },
50
+ "rationale": {
51
+ "type": "string"
52
+ }
32
53
  }
33
54
  },
34
55
  "graceful_degradation": {
35
56
  "type": "object",
36
57
  "properties": {
37
- "score": { "type": ["number", "null"] },
38
- "rationale": { "type": "string" }
58
+ "score": {
59
+ "type": [
60
+ "number",
61
+ "null"
62
+ ]
63
+ },
64
+ "rationale": {
65
+ "type": "string"
66
+ }
39
67
  }
40
68
  }
41
69
  }
42
70
  },
43
71
  "overall_verdict_shade": {
44
72
  "type": "string",
45
- "enum": ["pass", "mixed", "fail", "not-judgeable"]
73
+ "enum": [
74
+ "pass",
75
+ "mixed",
76
+ "fail",
77
+ "not-judgeable"
78
+ ]
46
79
  },
47
- "top_insight": { "type": "string" }
80
+ "top_insight": {
81
+ "type": "string"
82
+ }
48
83
  }
49
84
  },
50
85
  "required_fields": [
@@ -7,32 +7,58 @@
7
7
  "schema": {
8
8
  "type": "object",
9
9
  "properties": {
10
- "transcript_present": { "type": "boolean" },
11
- "turn_count": { "type": "number" },
10
+ "transcript_present": {
11
+ "type": "boolean"
12
+ },
13
+ "turn_count": {
14
+ "type": "number"
15
+ },
12
16
  "turns": {
13
17
  "type": "array",
14
18
  "items": {
15
19
  "type": "object",
16
20
  "properties": {
17
- "turn_idx": { "type": "number" },
18
- "user_intent": { "type": "string" },
19
- "claude_response": { "type": "string" },
21
+ "turn_idx": {
22
+ "type": "number"
23
+ },
24
+ "user_intent": {
25
+ "type": "string"
26
+ },
27
+ "claude_response": {
28
+ "type": "string"
29
+ },
20
30
  "tool_calls": {
21
31
  "type": "array",
22
32
  "items": {
23
33
  "type": "object",
24
34
  "properties": {
25
- "tool_name": { "type": "string" },
26
- "args": { "type": ["object", "null"] }
35
+ "tool_name": {
36
+ "type": "string"
37
+ },
38
+ "args": {
39
+ "type": [
40
+ "object",
41
+ "null"
42
+ ]
43
+ }
27
44
  }
28
45
  }
29
46
  },
30
- "post_turn_genome_state": { "type": ["object", "null"] },
31
- "malformed_input": { "type": "boolean" }
47
+ "post_turn_genome_state": {
48
+ "type": [
49
+ "object",
50
+ "null"
51
+ ]
52
+ },
53
+ "malformed_input": {
54
+ "type": "boolean"
55
+ }
32
56
  }
33
57
  }
34
58
  },
35
- "notes": { "type": "string" }
59
+ "notes": {
60
+ "type": "string"
61
+ }
36
62
  }
37
63
  },
38
64
  "required_fields": [
@@ -13,43 +13,87 @@
13
13
  "tool_pick_appropriate": {
14
14
  "type": "object",
15
15
  "properties": {
16
- "score": { "type": ["number", "null"] },
17
- "rationale": { "type": "string" }
16
+ "score": {
17
+ "type": [
18
+ "number",
19
+ "null"
20
+ ]
21
+ },
22
+ "rationale": {
23
+ "type": "string"
24
+ }
18
25
  }
19
26
  },
20
27
  "response_faithful": {
21
28
  "type": "object",
22
29
  "properties": {
23
- "score": { "type": ["number", "null"] },
24
- "rationale": { "type": "string" }
30
+ "score": {
31
+ "type": [
32
+ "number",
33
+ "null"
34
+ ]
35
+ },
36
+ "rationale": {
37
+ "type": "string"
38
+ }
25
39
  }
26
40
  },
27
41
  "genome_state_valid": {
28
42
  "type": "object",
29
43
  "properties": {
30
- "score": { "type": ["number", "null"] },
31
- "rationale": { "type": "string" }
44
+ "score": {
45
+ "type": [
46
+ "number",
47
+ "null"
48
+ ]
49
+ },
50
+ "rationale": {
51
+ "type": "string"
52
+ }
32
53
  }
33
54
  },
34
55
  "typed_error_on_malformed": {
35
56
  "type": "object",
36
57
  "properties": {
37
- "score": { "type": ["number", "null"] },
38
- "rationale": { "type": "string" }
58
+ "score": {
59
+ "type": [
60
+ "number",
61
+ "null"
62
+ ]
63
+ },
64
+ "rationale": {
65
+ "type": "string"
66
+ }
39
67
  }
40
68
  },
41
69
  "multi_turn_continuity": {
42
70
  "type": "object",
43
71
  "properties": {
44
- "score": { "type": ["number", "null"] },
45
- "rationale": { "type": "string" }
72
+ "score": {
73
+ "type": [
74
+ "number",
75
+ "null"
76
+ ]
77
+ },
78
+ "rationale": {
79
+ "type": "string"
80
+ }
46
81
  }
47
82
  }
48
83
  }
49
84
  },
50
- "overall_score": { "type": ["number", "null"] },
51
- "overall_pass": { "type": "boolean" },
52
- "top_finding": { "type": "string" }
85
+ "overall_score": {
86
+ "type": [
87
+ "number",
88
+ "null"
89
+ ]
90
+ },
91
+ "overall_pass": {
92
+ "type": "boolean"
93
+ },
94
+ "top_finding": {
95
+ "type": "string"
96
+ }
53
97
  }
54
98
  },
55
99
  "required_fields": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eir-labs/coltrane",
3
- "version": "0.24.14",
3
+ "version": "0.24.15",
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",
@@ -2,7 +2,7 @@
2
2
  "slug": "lineage-adopt-v0",
3
3
  "domain": "lineage",
4
4
  "status": "active",
5
- "description": "A LINEAGE ADOPTION brings an already-composed lineage-record to a human seat and nowhere else. It runs no scout, draws no edge, and composes nothing: its single chair is the approval office, seeded directly with the record under review. It exists because the approve office was reachable only as the tail of lineage-pass-v1, which meant a record composed by any other route could never be promoted. lineage-reweave-v0 is exactly that route \u2014 it re-draws the synthesis over reused and deepened seeds and seals a lineage-record with no human chair anywhere in its phase graph, so the strongest record a lineage effort produces was structurally unadoptable. A composition standard should not have to carry an approval office to make its output signable, and an approval office should not have to re-run a synthesis to reach a record. This standard is that seam, held once.",
5
+ "description": "A LINEAGE ADOPTION brings an already-composed lineage-record to a human seat and nowhere else. It runs no scout, draws no edge, and composes nothing: its single chair is the approval office, seeded directly with the record under review. It exists because the approve office was reachable only as the tail of lineage-pass-v1, which meant a record composed by any other route could never be promoted. lineage-reweave-v0 is exactly that route it re-draws the synthesis over reused and deepened seeds and seals a lineage-record with no human chair anywhere in its phase graph, so the strongest record a lineage effort produces was structurally unadoptable. A composition standard should not have to carry an approval office to make its output signable, and an approval office should not have to re-run a synthesis to reach a record. This standard is that seam, held once.",
6
6
  "agent_slugs": [],
7
7
  "phases": [
8
8
  {
@@ -24,7 +24,7 @@
24
24
  "required_skills": []
25
25
  }
26
26
  ],
27
- "intent": "A human approval office, and the only seat in this standard. The incumbent reviews the seeded lineage-record and either seals a passing lineage-verdict \u2014 which is what promotes the record to first-class lineage attached to an institution \u2014 or refuses it. An ENTRY chair (depends_on []): the record is supplied by the dispatch payload rather than produced upstream, which is the whole point \u2014 a record composed anywhere, by a pass or by a reweave, can be brought here without re-running the work that made it. The chair is seeded with BOTH the record under review and the adoption target naming which institution it would ground \u2014 the attachment is a property of this act, not of the record or the verdict, so it arrives here and nowhere else. A run that reaches this office unapproved PARKS awaiting the seal; nothing is adopted on an absent yes, and a refusal is a decision that gets recorded rather than a silence that gets forgotten."
27
+ "intent": "A human approval office, and the only seat in this standard. The incumbent reviews the seeded lineage-record and either seals a passing lineage-verdict which is what promotes the record to first-class lineage attached to an institution or refuses it. An ENTRY chair (depends_on []): the record is supplied by the dispatch payload rather than produced upstream, which is the whole point a record composed anywhere, by a pass or by a reweave, can be brought here without re-running the work that made it. The chair is seeded with BOTH the record under review and the adoption target naming which institution it would ground the attachment is a property of this act, not of the record or the verdict, so it arrives here and nowhere else. A run that reaches this office unapproved PARKS awaiting the seal; nothing is adopted on an absent yes, and a refusal is a decision that gets recorded rather than a silence that gets forgotten."
28
28
  }
29
29
  ],
30
30
  "input_types": [
@@ -14,14 +14,22 @@
14
14
  "role": "identify-external",
15
15
  "agent_slug": "lineage-scout-external",
16
16
  "depends_on": [],
17
- "input_contract": ["lineage-question"],
18
- "output_contract": ["lineage-hit"],
17
+ "input_contract": [
18
+ "lineage-question"
19
+ ],
20
+ "output_contract": [
21
+ "lineage-hit"
22
+ ],
19
23
  "required_skills": []
20
24
  }
21
25
  ],
22
26
  "intent": "Re-run the outward sense alone. identify-external takes the sharpened lineage-question and sweeps the external body of prior work with web tools, verifying each source live and sealing grounded lineage-hits — the deepened external reading. It holds no internal grant and draws no connection: it produces hits the re-weave can be held to, nothing more."
23
27
  }
24
28
  ],
25
- "input_types": ["lineage-question"],
26
- "output_types": ["lineage-hit"]
29
+ "input_types": [
30
+ "lineage-question"
31
+ ],
32
+ "output_types": [
33
+ "lineage-hit"
34
+ ]
27
35
  }