@eir-labs/coltrane 0.24.14 → 0.24.16

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 (72) 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/genome_schema.d.ts +174 -2
  14. package/dist/src/genome_schema.js +41 -0
  15. package/dist/src/genome_schema.js.map +1 -1
  16. package/dist/src/genome_store.js +5 -1
  17. package/dist/src/genome_store.js.map +1 -1
  18. package/dist/src/hosted_tools.js +6 -3
  19. package/dist/src/hosted_tools.js.map +1 -1
  20. package/dist/src/loader.d.ts +5 -1
  21. package/dist/src/loader.js +28 -4
  22. package/dist/src/loader.js.map +1 -1
  23. package/dist/src/placement_institutions.d.ts +1 -1
  24. package/dist/src/placement_institutions.js +1 -1
  25. package/dist/src/version.d.ts +1 -1
  26. package/dist/src/version.js +1 -1
  27. package/domain_types/alignment-plan.json +9 -3
  28. package/domain_types/branch-state.json +12 -3
  29. package/domain_types/change-decision.json +32 -7
  30. package/domain_types/change-plan.json +41 -12
  31. package/domain_types/change-request.json +37 -7
  32. package/domain_types/change-set.json +40 -11
  33. package/domain_types/change-verdict.json +42 -6
  34. package/domain_types/deploy-verdict.json +21 -3
  35. package/domain_types/design-brief.json +48 -9
  36. package/domain_types/design-concept.json +40 -9
  37. package/domain_types/design-definition.json +40 -9
  38. package/domain_types/design-question.json +26 -5
  39. package/domain_types/design-verdict.json +42 -6
  40. package/domain_types/draft-agent-profile.json +75 -14
  41. package/domain_types/draft-domain-type.json +56 -11
  42. package/domain_types/draft-standard.json +57 -15
  43. package/domain_types/internal-inventory.json +15 -5
  44. package/domain_types/lineage-adoption-target.json +4 -1
  45. package/domain_types/lineage-hit.json +19 -6
  46. package/domain_types/lineage-map.json +35 -8
  47. package/domain_types/lineage-question.json +13 -4
  48. package/domain_types/lineage-record.json +71 -18
  49. package/domain_types/lineage-verdict.json +9 -3
  50. package/domain_types/parsed-conversation-trace.json +54 -13
  51. package/domain_types/pattern-extraction.json +91 -21
  52. package/domain_types/preview-deployment.json +37 -8
  53. package/domain_types/project-charter.json +59 -16
  54. package/domain_types/proof-of-work-contract.json +86 -0
  55. package/domain_types/reconciliation-map.json +90 -0
  56. package/domain_types/reconciliation-record.json +52 -0
  57. package/domain_types/red-spec.json +2 -2
  58. package/domain_types/repo-survey.json +84 -14
  59. package/domain_types/seeding-verdict.json +93 -27
  60. package/domain_types/soft-verdict.json +45 -10
  61. package/domain_types/user-flow-transcript.json +36 -10
  62. package/domain_types/user-flow-verdict.json +57 -13
  63. package/package.json +1 -1
  64. package/standards/lineage-adopt-v0.json +2 -2
  65. package/standards/lineage-deepen-v0.json +12 -4
  66. package/standards/lineage-pass-v1.json +60 -17
  67. package/standards/lineage-reweave-v0.json +34 -10
  68. package/standards/patent-triage-v1.json +170 -12
  69. package/standards/product-design-v1.json +4 -4
  70. package/standards/reconcile-work-order-v0.json +137 -0
  71. package/standards/software-change-v1.json +5 -5
  72. package/standards/user_flow_correctness.json +3 -3
@@ -8,23 +8,54 @@
8
8
  "schema": {
9
9
  "type": "object",
10
10
  "properties": {
11
- "concept_name": { "type": "string", "description": "Short handle for the concept." },
12
- "description": { "type": "string", "description": "What it is, in the audience's register." },
13
- "mechanism": { "type": "array", "items": { "type": "string" }, "description": "How it works, step by step. The part that distinguishes a concept from a wish." },
14
- "addresses": { "type": "array", "items": { "type": "string" }, "description": "Which success criteria from the definition this concept answers, named individually." },
15
- "tradeoffs": {
11
+ "concept_name": {
12
+ "type": "string",
13
+ "description": "Short handle for the concept."
14
+ },
15
+ "description": {
16
+ "type": "string",
17
+ "description": "What it is, in the audience's register."
18
+ },
19
+ "mechanism": {
20
+ "type": "array",
21
+ "items": {
22
+ "type": "string"
23
+ },
24
+ "description": "How it works, step by step. The part that distinguishes a concept from a wish."
25
+ },
26
+ "addresses": {
27
+ "type": "array",
28
+ "items": {
29
+ "type": "string"
30
+ },
31
+ "description": "Which success criteria from the definition this concept answers, named individually."
32
+ },
33
+ "tradeoffs": {
16
34
  "type": "array",
17
35
  "description": "What this concept gives up, and what it buys with it.",
18
36
  "items": {
19
37
  "type": "object",
20
38
  "properties": {
21
- "gives_up": { "type": "string" },
22
- "buys": { "type": "string" }
39
+ "gives_up": {
40
+ "type": "string"
41
+ },
42
+ "buys": {
43
+ "type": "string"
44
+ }
23
45
  },
24
- "required": ["gives_up", "buys"]
46
+ "required": [
47
+ "gives_up",
48
+ "buys"
49
+ ]
25
50
  }
26
51
  },
27
- "open_questions": { "type": "array", "items": { "type": "string" }, "description": "What remains unresolved in the concept as built." }
52
+ "open_questions": {
53
+ "type": "array",
54
+ "items": {
55
+ "type": "string"
56
+ },
57
+ "description": "What remains unresolved in the concept as built."
58
+ }
28
59
  }
29
60
  },
30
61
  "required_fields": [
@@ -8,23 +8,54 @@
8
8
  "schema": {
9
9
  "type": "object",
10
10
  "properties": {
11
- "problem_statement": { "type": "string", "description": "The single problem the run commits to solving, stated so that a solution to a different problem would be visibly off-target." },
12
- "in_scope": { "type": "array", "items": { "type": "string" }, "description": "What the second diamond may explore." },
13
- "out_of_scope": { "type": "array", "items": { "type": "string" }, "description": "What it may not, and the neighbouring problems this one must not collapse into." },
14
- "success_criteria": { "type": "array", "items": { "type": "string" }, "description": "Observations that would confirm the problem was solved. Each checkable by someone who did not do the work." },
15
- "discarded": {
11
+ "problem_statement": {
12
+ "type": "string",
13
+ "description": "The single problem the run commits to solving, stated so that a solution to a different problem would be visibly off-target."
14
+ },
15
+ "in_scope": {
16
+ "type": "array",
17
+ "items": {
18
+ "type": "string"
19
+ },
20
+ "description": "What the second diamond may explore."
21
+ },
22
+ "out_of_scope": {
23
+ "type": "array",
24
+ "items": {
25
+ "type": "string"
26
+ },
27
+ "description": "What it may not, and the neighbouring problems this one must not collapse into."
28
+ },
29
+ "success_criteria": {
30
+ "type": "array",
31
+ "items": {
32
+ "type": "string"
33
+ },
34
+ "description": "Observations that would confirm the problem was solved. Each checkable by someone who did not do the work."
35
+ },
36
+ "discarded": {
16
37
  "type": "array",
17
38
  "description": "Problems the brief surfaced and this definition set aside, each with its reason.",
18
39
  "items": {
19
40
  "type": "object",
20
41
  "properties": {
21
- "problem": { "type": "string" },
22
- "reason": { "type": "string" }
42
+ "problem": {
43
+ "type": "string"
44
+ },
45
+ "reason": {
46
+ "type": "string"
47
+ }
23
48
  },
24
- "required": ["problem", "reason"]
49
+ "required": [
50
+ "problem",
51
+ "reason"
52
+ ]
25
53
  }
26
54
  },
27
- "audience": { "type": "string", "description": "Who the delivered answer is for, carried forward from the seed." }
55
+ "audience": {
56
+ "type": "string",
57
+ "description": "Who the delivered answer is for, carried forward from the seed."
58
+ }
28
59
  }
29
60
  },
30
61
  "required_fields": [
@@ -8,11 +8,32 @@
8
8
  "schema": {
9
9
  "type": "object",
10
10
  "properties": {
11
- "question": { "type": "string", "description": "The question as posed, unparaphrased." },
12
- "audience": { "type": "string", "description": "Who the eventual answer is for." },
13
- "known_context": { "type": "array", "items": { "type": "string" }, "description": "What the requester already holds as established." },
14
- "constraints": { "type": "array", "items": { "type": "string" }, "description": "Bounds the answer must respect regardless of what the exploration finds." },
15
- "success_signal": { "type": "string", "description": "What the requester would observe if the run answered well." }
11
+ "question": {
12
+ "type": "string",
13
+ "description": "The question as posed, unparaphrased."
14
+ },
15
+ "audience": {
16
+ "type": "string",
17
+ "description": "Who the eventual answer is for."
18
+ },
19
+ "known_context": {
20
+ "type": "array",
21
+ "items": {
22
+ "type": "string"
23
+ },
24
+ "description": "What the requester already holds as established."
25
+ },
26
+ "constraints": {
27
+ "type": "array",
28
+ "items": {
29
+ "type": "string"
30
+ },
31
+ "description": "Bounds the answer must respect regardless of what the exploration finds."
32
+ },
33
+ "success_signal": {
34
+ "type": "string",
35
+ "description": "What the requester would observe if the run answered well."
36
+ }
16
37
  }
17
38
  },
18
39
  "required_fields": [
@@ -8,12 +8,48 @@
8
8
  "schema": {
9
9
  "type": "object",
10
10
  "properties": {
11
- "definition_ref": { "type": "string", "description": "The design-definition this verdict measures against." },
12
- "criteria_met": { "type": "array", "items": { "type": "string" }, "description": "Success criteria the concept satisfies, each with the observation that shows it." },
13
- "criteria_unmet": { "type": "array", "items": { "type": "string" }, "description": "Success criteria the concept does not satisfy, stated plainly and unsoftened." },
14
- "inferred_not_run": { "type": "array", "items": { "type": "string" }, "description": "Criteria judged by reasoning because no check could be executed. Required — an empty list is a claim that everything was observed." },
15
- "scope_drift": { "type": "array", "items": { "type": "string" }, "description": "Where the concept answers a different problem than the one defined." },
16
- "recommendation": { "type": "string", "enum": ["deliver", "iterate", "redefine", "insufficient-evidence"], "description": "redefine returns the run to the first seam: the concept is sound but the problem was the wrong one." }
11
+ "definition_ref": {
12
+ "type": "string",
13
+ "description": "The design-definition this verdict measures against."
14
+ },
15
+ "criteria_met": {
16
+ "type": "array",
17
+ "items": {
18
+ "type": "string"
19
+ },
20
+ "description": "Success criteria the concept satisfies, each with the observation that shows it."
21
+ },
22
+ "criteria_unmet": {
23
+ "type": "array",
24
+ "items": {
25
+ "type": "string"
26
+ },
27
+ "description": "Success criteria the concept does not satisfy, stated plainly and unsoftened."
28
+ },
29
+ "inferred_not_run": {
30
+ "type": "array",
31
+ "items": {
32
+ "type": "string"
33
+ },
34
+ "description": "Criteria judged by reasoning because no check could be executed. Required — an empty list is a claim that everything was observed."
35
+ },
36
+ "scope_drift": {
37
+ "type": "array",
38
+ "items": {
39
+ "type": "string"
40
+ },
41
+ "description": "Where the concept answers a different problem than the one defined."
42
+ },
43
+ "recommendation": {
44
+ "type": "string",
45
+ "enum": [
46
+ "deliver",
47
+ "iterate",
48
+ "redefine",
49
+ "insufficient-evidence"
50
+ ],
51
+ "description": "redefine returns the run to the first seam: the concept is sound but the problem was the wrong one."
52
+ }
17
53
  }
18
54
  },
19
55
  "required_fields": [
@@ -8,24 +8,85 @@
8
8
  "schema": {
9
9
  "type": "object",
10
10
  "properties": {
11
- "input_refs": { "type": "array", "items": { "type": "string" }, "description": "References to the pattern-extraction this draft is derived from." },
12
- "slug": { "type": "string", "description": "Proposed agent slug, kebab-case." },
13
- "description": { "type": "string", "description": "One-line description for the .claude/agents/<slug>.md frontmatter." },
14
- "behavioral_primitives": { "type": "array", "items": { "type": "string" }, "description": "Proposed behavioral primitives (max 2 per coltrane convention)." },
15
- "domain": { "type": "string", "description": "Proposed domain slug (inferred from the user's work)." },
16
- "tools_allowlist": { "type": "array", "items": { "type": "string" }, "description": "Proposed coltrane MCP tools allowlist." },
17
- "model_tier": { "type": "string", "enum": ["economy", "standard", "premium"] },
18
- "code_tool_access": { "type": "string", "enum": ["none", "read", "write", "full"] },
19
- "system_prompt_draft": { "type": "string", "description": "Draft body for the agent .md file — what Claude reads as system prompt when dispatched as this subagent." },
20
- "evidence_summary": { "type": "string", "description": "Why this agent is proposed: which patterns + which repos." },
21
- "user_acceptance": {
22
- "type": "string",
23
- "enum": ["pending", "accepted", "rejected", "refined"],
11
+ "input_refs": {
12
+ "type": "array",
13
+ "items": {
14
+ "type": "string"
15
+ },
16
+ "description": "References to the pattern-extraction this draft is derived from."
17
+ },
18
+ "slug": {
19
+ "type": "string",
20
+ "description": "Proposed agent slug, kebab-case."
21
+ },
22
+ "description": {
23
+ "type": "string",
24
+ "description": "One-line description for the .claude/agents/<slug>.md frontmatter."
25
+ },
26
+ "behavioral_primitives": {
27
+ "type": "array",
28
+ "items": {
29
+ "type": "string"
30
+ },
31
+ "description": "Proposed behavioral primitives (max 2 per coltrane convention)."
32
+ },
33
+ "domain": {
34
+ "type": "string",
35
+ "description": "Proposed domain slug (inferred from the user's work)."
36
+ },
37
+ "tools_allowlist": {
38
+ "type": "array",
39
+ "items": {
40
+ "type": "string"
41
+ },
42
+ "description": "Proposed coltrane MCP tools allowlist."
43
+ },
44
+ "model_tier": {
45
+ "type": "string",
46
+ "enum": [
47
+ "economy",
48
+ "standard",
49
+ "premium"
50
+ ]
51
+ },
52
+ "code_tool_access": {
53
+ "type": "string",
54
+ "enum": [
55
+ "none",
56
+ "read",
57
+ "write",
58
+ "full"
59
+ ]
60
+ },
61
+ "system_prompt_draft": {
62
+ "type": "string",
63
+ "description": "Draft body for the agent .md file — what Claude reads as system prompt when dispatched as this subagent."
64
+ },
65
+ "evidence_summary": {
66
+ "type": "string",
67
+ "description": "Why this agent is proposed: which patterns + which repos."
68
+ },
69
+ "user_acceptance": {
70
+ "type": "string",
71
+ "enum": [
72
+ "pending",
73
+ "accepted",
74
+ "rejected",
75
+ "refined"
76
+ ],
24
77
  "default": "pending",
25
78
  "description": "User's verdict at the seam: pending = not yet reviewed; accepted = adopt to active fleet; rejected = discard; refined = user edited fields, re-propose."
26
79
  }
27
80
  },
28
- "required": ["input_refs", "slug", "description", "behavioral_primitives", "system_prompt_draft", "user_acceptance", "validation_criteria"]
81
+ "required": [
82
+ "input_refs",
83
+ "slug",
84
+ "description",
85
+ "behavioral_primitives",
86
+ "system_prompt_draft",
87
+ "user_acceptance",
88
+ "validation_criteria"
89
+ ]
29
90
  },
30
91
  "required_fields": []
31
92
  }
@@ -8,21 +8,66 @@
8
8
  "schema": {
9
9
  "type": "object",
10
10
  "properties": {
11
- "input_refs": { "type": "array", "items": { "type": "string" } },
12
- "slug": { "type": "string" },
13
- "extends": { "type": "string", "enum": ["Signal", "Interpretation", "Judgment", "Plan", "Artifact", "Verdict"] },
14
- "domain": { "type": "string" },
15
- "description": { "type": "string" },
16
- "schema": { "type": "object", "description": "Proposed JSON-schema for this domain type." },
17
- "required_fields": { "type": "array", "items": { "type": "string" } },
18
- "evidence_summary": { "type": "string", "description": "Which recurrent_domain_shape this type formalizes + which repos exhibited it." },
19
- "user_acceptance": {
11
+ "input_refs": {
12
+ "type": "array",
13
+ "items": {
14
+ "type": "string"
15
+ }
16
+ },
17
+ "slug": {
18
+ "type": "string"
19
+ },
20
+ "extends": {
20
21
  "type": "string",
21
- "enum": ["pending", "accepted", "rejected", "refined"],
22
+ "enum": [
23
+ "Signal",
24
+ "Interpretation",
25
+ "Judgment",
26
+ "Plan",
27
+ "Artifact",
28
+ "Verdict"
29
+ ]
30
+ },
31
+ "domain": {
32
+ "type": "string"
33
+ },
34
+ "description": {
35
+ "type": "string"
36
+ },
37
+ "schema": {
38
+ "type": "object",
39
+ "description": "Proposed JSON-schema for this domain type."
40
+ },
41
+ "required_fields": {
42
+ "type": "array",
43
+ "items": {
44
+ "type": "string"
45
+ }
46
+ },
47
+ "evidence_summary": {
48
+ "type": "string",
49
+ "description": "Which recurrent_domain_shape this type formalizes + which repos exhibited it."
50
+ },
51
+ "user_acceptance": {
52
+ "type": "string",
53
+ "enum": [
54
+ "pending",
55
+ "accepted",
56
+ "rejected",
57
+ "refined"
58
+ ],
22
59
  "default": "pending"
23
60
  }
24
61
  },
25
- "required": ["input_refs", "slug", "extends", "domain", "schema", "user_acceptance", "validation_criteria"]
62
+ "required": [
63
+ "input_refs",
64
+ "slug",
65
+ "extends",
66
+ "domain",
67
+ "schema",
68
+ "user_acceptance",
69
+ "validation_criteria"
70
+ ]
26
71
  },
27
72
  "required_fields": []
28
73
  }
@@ -8,39 +8,81 @@
8
8
  "schema": {
9
9
  "type": "object",
10
10
  "properties": {
11
- "input_refs": { "type": "array", "items": { "type": "string" }, "description": "References to pattern-extraction + repo-survey outputs." },
12
- "slug": { "type": "string", "description": "Proposed standard slug." },
13
- "domain": { "type": "string" },
14
- "description": { "type": "string" },
15
- "phases": {
11
+ "input_refs": {
12
+ "type": "array",
13
+ "items": {
14
+ "type": "string"
15
+ },
16
+ "description": "References to pattern-extraction + repo-survey outputs."
17
+ },
18
+ "slug": {
19
+ "type": "string",
20
+ "description": "Proposed standard slug."
21
+ },
22
+ "domain": {
23
+ "type": "string"
24
+ },
25
+ "description": {
26
+ "type": "string"
27
+ },
28
+ "phases": {
16
29
  "type": "array",
17
30
  "description": "Ordered phases per coltrane standard convention. Each phase names a phase-agent slug + intent.",
18
31
  "items": {
19
32
  "type": "object",
20
33
  "properties": {
21
- "name": { "type": "string" },
22
- "agent": { "type": "string" },
23
- "intent": { "type": "string" }
34
+ "name": {
35
+ "type": "string"
36
+ },
37
+ "agent": {
38
+ "type": "string"
39
+ },
40
+ "intent": {
41
+ "type": "string"
42
+ }
24
43
  },
25
- "required": ["name", "agent", "intent"]
44
+ "required": [
45
+ "name",
46
+ "agent",
47
+ "intent"
48
+ ]
26
49
  }
27
50
  },
28
51
  "execution_modes": {
29
52
  "type": "object",
30
53
  "description": "Per project-bootstrap-v0 shape — conductor_mode default, dispatch_mode for power users.",
31
54
  "properties": {
32
- "conductor_mode": { "type": "object" },
33
- "dispatch_mode": { "type": "object" }
55
+ "conductor_mode": {
56
+ "type": "object"
57
+ },
58
+ "dispatch_mode": {
59
+ "type": "object"
60
+ }
34
61
  }
35
62
  },
36
- "evidence_summary": { "type": "string", "description": "Which recurrent_workflow this standard formalizes + which repos exhibited it." },
37
- "user_acceptance": {
63
+ "evidence_summary": {
64
+ "type": "string",
65
+ "description": "Which recurrent_workflow this standard formalizes + which repos exhibited it."
66
+ },
67
+ "user_acceptance": {
38
68
  "type": "string",
39
- "enum": ["pending", "accepted", "rejected", "refined"],
69
+ "enum": [
70
+ "pending",
71
+ "accepted",
72
+ "rejected",
73
+ "refined"
74
+ ],
40
75
  "default": "pending"
41
76
  }
42
77
  },
43
- "required": ["input_refs", "slug", "domain", "phases", "user_acceptance", "validation_criteria"]
78
+ "required": [
79
+ "input_refs",
80
+ "slug",
81
+ "domain",
82
+ "phases",
83
+ "user_acceptance",
84
+ "validation_criteria"
85
+ ]
44
86
  },
45
87
  "required_fields": []
46
88
  }
@@ -13,14 +13,24 @@
13
13
  "items": {
14
14
  "type": "object",
15
15
  "properties": {
16
- "reference": { "type": "string" },
17
- "kind": { "type": "string" },
18
- "summary": { "type": "string" }
16
+ "reference": {
17
+ "type": "string"
18
+ },
19
+ "kind": {
20
+ "type": "string"
21
+ },
22
+ "summary": {
23
+ "type": "string"
24
+ }
19
25
  },
20
- "required": ["reference"]
26
+ "required": [
27
+ "reference"
28
+ ]
21
29
  }
22
30
  }
23
31
  }
24
32
  },
25
- "required_fields": ["representations"]
33
+ "required_fields": [
34
+ "representations"
35
+ ]
26
36
  }
@@ -18,5 +18,8 @@
18
18
  }
19
19
  }
20
20
  },
21
- "required_fields": ["source", "institution_slug"]
21
+ "required_fields": [
22
+ "source",
23
+ "institution_slug"
24
+ ]
22
25
  }
@@ -8,12 +8,25 @@
8
8
  "schema": {
9
9
  "type": "object",
10
10
  "properties": {
11
- "source": { "type": "string" },
12
- "claim": { "type": "string" },
13
- "attribution": { "type": "string" },
14
- "url": { "type": "string" },
15
- "citation": { "type": "string" }
11
+ "source": {
12
+ "type": "string"
13
+ },
14
+ "claim": {
15
+ "type": "string"
16
+ },
17
+ "attribution": {
18
+ "type": "string"
19
+ },
20
+ "url": {
21
+ "type": "string"
22
+ },
23
+ "citation": {
24
+ "type": "string"
25
+ }
16
26
  }
17
27
  },
18
- "required_fields": ["source", "claim"]
28
+ "required_fields": [
29
+ "source",
30
+ "claim"
31
+ ]
19
32
  }
@@ -14,24 +14,51 @@
14
14
  "items": {
15
15
  "type": "object",
16
16
  "properties": {
17
- "internal_ref": { "type": "string" },
18
- "external_ref": { "type": "string" },
17
+ "internal_ref": {
18
+ "type": "string"
19
+ },
20
+ "external_ref": {
21
+ "type": "string"
22
+ },
19
23
  "relation": {
20
24
  "type": "string",
21
- "enum": ["descends-from", "aligns-with", "diverges-from", "supersedes", "informed-by"]
25
+ "enum": [
26
+ "descends-from",
27
+ "aligns-with",
28
+ "diverges-from",
29
+ "supersedes",
30
+ "informed-by"
31
+ ]
32
+ },
33
+ "grounding_internal": {
34
+ "type": "string"
35
+ },
36
+ "grounding_external": {
37
+ "type": "string"
22
38
  },
23
- "grounding_internal": { "type": "string" },
24
- "grounding_external": { "type": "string" },
25
39
  "strength": {
26
40
  "type": "string",
27
- "enum": ["dereferenceable-both-sides", "structural-correspondence", "conceptual-analogy"],
41
+ "enum": [
42
+ "dereferenceable-both-sides",
43
+ "structural-correspondence",
44
+ "conceptual-analogy"
45
+ ],
28
46
  "$comment": "The weaver DRAWS the grounding strength; the scribe carries it through unchanged into the lineage-record. Ordinal, closed vocabulary — see domain_types/lineage-record.json for the orthogonality note against CitationSchema.evidence_grade (src/genome_schema.ts:293-309)."
29
47
  }
30
48
  },
31
- "required": ["internal_ref", "external_ref", "relation", "grounding_internal", "grounding_external", "strength"]
49
+ "required": [
50
+ "internal_ref",
51
+ "external_ref",
52
+ "relation",
53
+ "grounding_internal",
54
+ "grounding_external",
55
+ "strength"
56
+ ]
32
57
  }
33
58
  }
34
59
  }
35
60
  },
36
- "required_fields": ["edges"]
61
+ "required_fields": [
62
+ "edges"
63
+ ]
37
64
  }