open-research-protocol 0.3.0
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/AGENT_INTEGRATION.md +94 -0
- package/INSTALL.md +159 -0
- package/LICENSE +22 -0
- package/PROTOCOL.md +140 -0
- package/README.md +312 -0
- package/bin/orp.js +38 -0
- package/cli/orp.py +3595 -0
- package/cone/CONTEXT_LOG.md +33 -0
- package/docs/AGENT_LOOP.md +63 -0
- package/docs/CHOOSING_OR_IGNORING_INSTRUMENTS.md +128 -0
- package/docs/CODA_ORP_CONTRACT.md +222 -0
- package/docs/CORE_ABILITY_REFOCUS_CHECKLIST.md +62 -0
- package/docs/DISCOVER.md +69 -0
- package/docs/EXTERNAL_CONTRIBUTION_GOVERNANCE.md +275 -0
- package/docs/MATHLIB_COLLABORATION_FLOW_PROMPT.md +112 -0
- package/docs/NPM_RELEASE_CHECKLIST.md +55 -0
- package/docs/ORP_V1_ATOMIC_DISCOVERY_EVOLUTION.md +186 -0
- package/docs/OSS_CONTRIBUTION_AGENT_LOOP.md +69 -0
- package/docs/PRESENTATION_BOW.md +100 -0
- package/docs/PROFILE_PACKS.md +227 -0
- package/docs/SUNFLOWER_CODA_PR_GOVERNANCE_MAPPING.md +77 -0
- package/docs/WHY_INSTRUMENTS.md +118 -0
- package/examples/README.md +21 -0
- package/examples/example_claim.md +33 -0
- package/examples/example_failed.md +24 -0
- package/examples/example_verification.md +36 -0
- package/examples/orp.erdos-problems.catalog.yml +88 -0
- package/examples/orp.external-pr-governance.yml +223 -0
- package/examples/orp.sunflower-coda.atomic.yml +144 -0
- package/examples/orp.sunflower-coda.live-compare.yml +181 -0
- package/examples/orp.sunflower-coda.pr-governance.yml +253 -0
- package/examples/packet.problem_scope.example.json +123 -0
- package/examples/reports/README.md +16 -0
- package/examples/reports/sunflower_live_compare_20.RUN_SUMMARY.md +37 -0
- package/examples/reports/sunflower_live_compare_367.RUN_SUMMARY.md +37 -0
- package/examples/reports/sunflower_live_compare_857.RUN_SUMMARY.md +37 -0
- package/llms.txt +58 -0
- package/modules/instruments/ADVERSARIAL/README.md +109 -0
- package/modules/instruments/ADVERSARIAL/TEMPLATE.md +27 -0
- package/modules/instruments/COMPRESSION/README.md +112 -0
- package/modules/instruments/COMPRESSION/TEMPLATE.md +27 -0
- package/modules/instruments/INSTRUMENT_TEMPLATE.md +30 -0
- package/modules/instruments/ORBIT/README.md +124 -0
- package/modules/instruments/ORBIT/TEMPLATE.md +28 -0
- package/modules/instruments/README.md +179 -0
- package/package.json +54 -0
- package/packs/README.md +16 -0
- package/packs/erdos-open-problems/README.md +287 -0
- package/packs/erdos-open-problems/data/README.md +43 -0
- package/packs/erdos-open-problems/data/erdos_open_problems.md +697 -0
- package/packs/erdos-open-problems/data/erdos_problems.active.json +15561 -0
- package/packs/erdos-open-problems/data/erdos_problems.all.json +26289 -0
- package/packs/erdos-open-problems/data/erdos_problems.closed.json +10760 -0
- package/packs/erdos-open-problems/data/erdos_problems.open.json +15561 -0
- package/packs/erdos-open-problems/docs/SUNFLOWER_ADAPTER_DEPENDENCIES.md +63 -0
- package/packs/erdos-open-problems/pack.yml +131 -0
- package/packs/erdos-open-problems/profiles/erdos-problems-catalog-sync.yml.tmpl +99 -0
- package/packs/erdos-open-problems/profiles/sunflower-live-compare.yml.tmpl +188 -0
- package/packs/erdos-open-problems/profiles/sunflower-mathlib-pr-governance.yml.tmpl +253 -0
- package/packs/erdos-open-problems/profiles/sunflower-problem857-discovery-public-repo.yml.tmpl +152 -0
- package/packs/erdos-open-problems/profiles/sunflower-problem857-discovery.yml.tmpl +154 -0
- package/packs/external-pr-governance/README.md +116 -0
- package/packs/external-pr-governance/adapters/formal-conjectures/README.md +35 -0
- package/packs/external-pr-governance/adapters/mathlib/README.md +37 -0
- package/packs/external-pr-governance/pack.yml +146 -0
- package/packs/external-pr-governance/profiles/oss-feedback-hardening.yml.tmpl +92 -0
- package/packs/external-pr-governance/profiles/oss-pr-governance.yml.tmpl +233 -0
- package/packs/issue-smashers/README.md +92 -0
- package/packs/issue-smashers/adapters/formal-conjectures/README.md +17 -0
- package/packs/issue-smashers/adapters/generic-github/README.md +16 -0
- package/packs/issue-smashers/adapters/mathlib/README.md +32 -0
- package/packs/issue-smashers/bootstrap/README.md +19 -0
- package/packs/issue-smashers/bootstrap/setup-issue-smashers.sh +18 -0
- package/packs/issue-smashers/examples/issue-smashers.workspace.yml +24 -0
- package/packs/issue-smashers/pack.yml +178 -0
- package/packs/issue-smashers/profiles/issue-smashers-feedback-hardening.yml.tmpl +102 -0
- package/packs/issue-smashers/profiles/issue-smashers.yml.tmpl +258 -0
- package/scripts/npm-postinstall-check.js +31 -0
- package/scripts/orp +11 -0
- package/scripts/orp-agent-integrate.sh +197 -0
- package/scripts/orp-checkpoint.sh +184 -0
- package/scripts/orp-erdos-problems-sync.py +580 -0
- package/scripts/orp-init.sh +50 -0
- package/scripts/orp-pack-fetch.py +155 -0
- package/scripts/orp-pack-install.py +2273 -0
- package/scripts/orp-pack-render.py +188 -0
- package/spec/v1/LIFECYCLE_MAPPING.md +40 -0
- package/spec/v1/orp.config.schema.json +385 -0
- package/spec/v1/packet.schema.json +552 -0
- package/spec/v1/profile-pack.schema.json +95 -0
- package/templates/CLAIM.md +33 -0
- package/templates/FAILED_TOPIC.md +19 -0
- package/templates/ISSUE_TEMPLATE.md +22 -0
- package/templates/VERIFICATION_RECORD.md +34 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Render ORP profile-pack templates into concrete config files."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import argparse
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
import re
|
|
9
|
+
import sys
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
import yaml
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
VAR_PATTERN = re.compile(r"\{\{([A-Z0-9_]+)\}\}")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _load_yaml(path: Path) -> dict[str, Any]:
|
|
19
|
+
data = yaml.safe_load(path.read_text(encoding="utf-8"))
|
|
20
|
+
if not isinstance(data, dict):
|
|
21
|
+
raise RuntimeError(f"YAML root must be object: {path}")
|
|
22
|
+
return data
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _parse_kv(values: list[str]) -> dict[str, str]:
|
|
26
|
+
out: dict[str, str] = {}
|
|
27
|
+
for raw in values:
|
|
28
|
+
if "=" not in raw:
|
|
29
|
+
raise RuntimeError(f"invalid --var, expected KEY=VALUE: {raw}")
|
|
30
|
+
key, val = raw.split("=", 1)
|
|
31
|
+
key = key.strip()
|
|
32
|
+
if not re.fullmatch(r"[A-Z0-9_]+", key):
|
|
33
|
+
raise RuntimeError(f"invalid variable key: {key}")
|
|
34
|
+
out[key] = val
|
|
35
|
+
return out
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _load_pack(pack_root: Path) -> tuple[Path, dict[str, Any]]:
|
|
39
|
+
pack_yml = pack_root / "pack.yml"
|
|
40
|
+
if not pack_yml.exists():
|
|
41
|
+
raise RuntimeError(f"missing pack metadata: {pack_yml}")
|
|
42
|
+
return pack_yml, _load_yaml(pack_yml)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _template_info(pack: dict[str, Any], template_id: str) -> dict[str, Any]:
|
|
46
|
+
templates = pack.get("templates")
|
|
47
|
+
if not isinstance(templates, dict):
|
|
48
|
+
raise RuntimeError("pack.yml missing templates object")
|
|
49
|
+
info = templates.get(template_id)
|
|
50
|
+
if not isinstance(info, dict):
|
|
51
|
+
raise RuntimeError(f"template not found: {template_id}")
|
|
52
|
+
return info
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _variables(pack: dict[str, Any], cli_vars: dict[str, str]) -> dict[str, str]:
|
|
56
|
+
spec = pack.get("variables", {})
|
|
57
|
+
if spec is None:
|
|
58
|
+
spec = {}
|
|
59
|
+
if not isinstance(spec, dict):
|
|
60
|
+
raise RuntimeError("pack.yml variables must be an object")
|
|
61
|
+
|
|
62
|
+
out: dict[str, str] = {}
|
|
63
|
+
for key, meta in spec.items():
|
|
64
|
+
if not isinstance(key, str) or not isinstance(meta, dict):
|
|
65
|
+
continue
|
|
66
|
+
default = meta.get("default")
|
|
67
|
+
if isinstance(default, str):
|
|
68
|
+
out[key] = default
|
|
69
|
+
|
|
70
|
+
out.update(cli_vars)
|
|
71
|
+
|
|
72
|
+
missing: list[str] = []
|
|
73
|
+
for key, meta in spec.items():
|
|
74
|
+
if not isinstance(meta, dict):
|
|
75
|
+
continue
|
|
76
|
+
required = bool(meta.get("required", False))
|
|
77
|
+
if required and (key not in out or out[key] == ""):
|
|
78
|
+
missing.append(key)
|
|
79
|
+
if missing:
|
|
80
|
+
raise RuntimeError("missing required variables: " + ", ".join(sorted(missing)))
|
|
81
|
+
|
|
82
|
+
return out
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _render_text(text: str, vars_map: dict[str, str]) -> str:
|
|
86
|
+
rendered = text
|
|
87
|
+
for key, value in vars_map.items():
|
|
88
|
+
rendered = rendered.replace("{{" + key + "}}", value)
|
|
89
|
+
unresolved = sorted(set(VAR_PATTERN.findall(rendered)))
|
|
90
|
+
if unresolved:
|
|
91
|
+
raise RuntimeError("unresolved template variables: " + ", ".join(unresolved))
|
|
92
|
+
return rendered
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def cmd_list(args: argparse.Namespace) -> int:
|
|
96
|
+
pack_root = Path(args.pack).resolve()
|
|
97
|
+
pack_path, pack = _load_pack(pack_root)
|
|
98
|
+
print(f"pack: {pack.get('pack_id', '(unknown)')} ({pack_path})")
|
|
99
|
+
print(f"description: {pack.get('description', '')}")
|
|
100
|
+
|
|
101
|
+
variables = pack.get("variables", {})
|
|
102
|
+
if isinstance(variables, dict) and variables:
|
|
103
|
+
print("\nvariables:")
|
|
104
|
+
for key in sorted(variables):
|
|
105
|
+
meta = variables.get(key, {})
|
|
106
|
+
if not isinstance(meta, dict):
|
|
107
|
+
continue
|
|
108
|
+
req = "required" if bool(meta.get("required", False)) else "optional"
|
|
109
|
+
default = meta.get("default", "")
|
|
110
|
+
default_part = f" default={default}" if isinstance(default, str) and default != "" else ""
|
|
111
|
+
desc = str(meta.get("description", ""))
|
|
112
|
+
print(f"- {key} ({req}{default_part}): {desc}")
|
|
113
|
+
|
|
114
|
+
templates = pack.get("templates", {})
|
|
115
|
+
if not isinstance(templates, dict) or not templates:
|
|
116
|
+
print("\ntemplates: (none)")
|
|
117
|
+
return 0
|
|
118
|
+
|
|
119
|
+
print("\ntemplates:")
|
|
120
|
+
for tid, info in templates.items():
|
|
121
|
+
if not isinstance(info, dict):
|
|
122
|
+
continue
|
|
123
|
+
print(f"- {tid}")
|
|
124
|
+
print(f" path: {info.get('path', '')}")
|
|
125
|
+
print(f" description: {info.get('description', '')}")
|
|
126
|
+
if "output_hint" in info:
|
|
127
|
+
print(f" output_hint: {info.get('output_hint', '')}")
|
|
128
|
+
return 0
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def cmd_render(args: argparse.Namespace) -> int:
|
|
132
|
+
pack_root = Path(args.pack).resolve()
|
|
133
|
+
_pack_path, pack = _load_pack(pack_root)
|
|
134
|
+
info = _template_info(pack, args.template)
|
|
135
|
+
|
|
136
|
+
rel_path = info.get("path")
|
|
137
|
+
if not isinstance(rel_path, str) or rel_path.strip() == "":
|
|
138
|
+
raise RuntimeError(f"template path missing for {args.template}")
|
|
139
|
+
template_path = (pack_root / rel_path).resolve()
|
|
140
|
+
if not template_path.exists():
|
|
141
|
+
raise RuntimeError(f"template file not found: {template_path}")
|
|
142
|
+
|
|
143
|
+
cli_vars = _parse_kv(args.var or [])
|
|
144
|
+
vars_map = _variables(pack, cli_vars)
|
|
145
|
+
|
|
146
|
+
template_text = template_path.read_text(encoding="utf-8")
|
|
147
|
+
rendered = _render_text(template_text, vars_map)
|
|
148
|
+
|
|
149
|
+
out_path = Path(args.out).resolve()
|
|
150
|
+
out_path.parent.mkdir(parents=True, exist_ok=True)
|
|
151
|
+
out_path.write_text(rendered, encoding="utf-8")
|
|
152
|
+
|
|
153
|
+
print(f"rendered template: {args.template}")
|
|
154
|
+
print(f"source: {template_path}")
|
|
155
|
+
print(f"output: {out_path}")
|
|
156
|
+
return 0
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def build_parser() -> argparse.ArgumentParser:
|
|
160
|
+
p = argparse.ArgumentParser(description="Render ORP profile-pack templates")
|
|
161
|
+
p.add_argument("--pack", required=True, help="Pack root directory containing pack.yml")
|
|
162
|
+
|
|
163
|
+
mode = p.add_mutually_exclusive_group(required=True)
|
|
164
|
+
mode.add_argument("--list", action="store_true", help="List pack templates and variables")
|
|
165
|
+
mode.add_argument("--template", help="Template id to render")
|
|
166
|
+
|
|
167
|
+
p.add_argument("--var", action="append", default=[], help="Template variable KEY=VALUE (repeatable)")
|
|
168
|
+
p.add_argument("--out", default="", help="Output file path (required for render mode)")
|
|
169
|
+
return p
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def main() -> int:
|
|
173
|
+
args = build_parser().parse_args()
|
|
174
|
+
if args.list:
|
|
175
|
+
return cmd_list(args)
|
|
176
|
+
if args.template:
|
|
177
|
+
if args.out.strip() == "":
|
|
178
|
+
raise RuntimeError("--out is required when rendering a template")
|
|
179
|
+
return cmd_render(args)
|
|
180
|
+
raise RuntimeError("invalid mode")
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
if __name__ == "__main__":
|
|
184
|
+
try:
|
|
185
|
+
raise SystemExit(main())
|
|
186
|
+
except RuntimeError as exc:
|
|
187
|
+
print(f"error: {exc}", file=sys.stderr)
|
|
188
|
+
raise SystemExit(2)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# ORP v1 Lifecycle Mapping
|
|
2
|
+
|
|
3
|
+
This mapping keeps current ORP semantics intact while adding atomic discovery states.
|
|
4
|
+
|
|
5
|
+
## Claim-Level Mapping (current templates -> workflow state)
|
|
6
|
+
|
|
7
|
+
| Current field | Value | ORP `workflow_state` |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `Claim Status` | `Draft` | `draft` |
|
|
10
|
+
| `Claim Status` | `In review` | `ready` |
|
|
11
|
+
| `Claim Status` | `Verified` | `reviewed` |
|
|
12
|
+
| `Claim Status` | `Blocked` | `blocked` |
|
|
13
|
+
| `Claim Status` | `Retracted` | `retracted` |
|
|
14
|
+
|
|
15
|
+
Notes:
|
|
16
|
+
- `Claim Level` (`Exact/Verified/Heuristic/Conjecture`) remains epistemic and separate from workflow state.
|
|
17
|
+
- `accepted` is optional and should be set only by an explicit acceptance action (maintainer/reviewer decision), not inferred automatically.
|
|
18
|
+
|
|
19
|
+
## Atomic Board Mapping (sunflower-style atoms -> workflow state)
|
|
20
|
+
|
|
21
|
+
| Board atom status | ORP `workflow_state` |
|
|
22
|
+
|---|---|
|
|
23
|
+
| `todo` | `draft` |
|
|
24
|
+
| `in_progress` | `ready` |
|
|
25
|
+
| `blocked` | `blocked` |
|
|
26
|
+
| `done` | `reviewed` |
|
|
27
|
+
|
|
28
|
+
Notes:
|
|
29
|
+
- Promote to `accepted` at higher scopes only when closure criteria are met and explicitly recorded:
|
|
30
|
+
- all atoms in a gate are `done` -> gate can be marked accepted,
|
|
31
|
+
- all gates in a ticket are complete -> ticket can be marked accepted,
|
|
32
|
+
- route closure can be marked accepted once strict/loose checks pass.
|
|
33
|
+
|
|
34
|
+
## Why this split matters
|
|
35
|
+
|
|
36
|
+
- `workflow_state` tracks execution/lifecycle.
|
|
37
|
+
- `claim_level` tracks epistemic strength.
|
|
38
|
+
- `atom_status` tracks discovery execution at atomic granularity.
|
|
39
|
+
|
|
40
|
+
This prevents drift between documentation claims, verification records, and board progress signals.
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://orp.dev/spec/v1/orp.config.schema.json",
|
|
4
|
+
"title": "ORP Config v1",
|
|
5
|
+
"description": "Configuration for ORP runtime gates, lifecycle mapping, and profiles.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"version",
|
|
10
|
+
"project",
|
|
11
|
+
"lifecycle",
|
|
12
|
+
"gates",
|
|
13
|
+
"profiles"
|
|
14
|
+
],
|
|
15
|
+
"properties": {
|
|
16
|
+
"version": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"const": "1"
|
|
19
|
+
},
|
|
20
|
+
"project": {
|
|
21
|
+
"$ref": "#/$defs/project"
|
|
22
|
+
},
|
|
23
|
+
"runtime": {
|
|
24
|
+
"$ref": "#/$defs/runtime"
|
|
25
|
+
},
|
|
26
|
+
"packet": {
|
|
27
|
+
"$ref": "#/$defs/packet"
|
|
28
|
+
},
|
|
29
|
+
"epistemic_status": {
|
|
30
|
+
"$ref": "#/$defs/epistemic_status"
|
|
31
|
+
},
|
|
32
|
+
"lifecycle": {
|
|
33
|
+
"$ref": "#/$defs/lifecycle"
|
|
34
|
+
},
|
|
35
|
+
"atomic_board": {
|
|
36
|
+
"$ref": "#/$defs/atomic_board"
|
|
37
|
+
},
|
|
38
|
+
"gates": {
|
|
39
|
+
"type": "array",
|
|
40
|
+
"items": {
|
|
41
|
+
"$ref": "#/$defs/gate"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"profiles": {
|
|
45
|
+
"type": "object",
|
|
46
|
+
"additionalProperties": {
|
|
47
|
+
"$ref": "#/$defs/profile"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"$defs": {
|
|
52
|
+
"project": {
|
|
53
|
+
"type": "object",
|
|
54
|
+
"additionalProperties": false,
|
|
55
|
+
"required": [
|
|
56
|
+
"name",
|
|
57
|
+
"canonical_paths"
|
|
58
|
+
],
|
|
59
|
+
"properties": {
|
|
60
|
+
"name": {
|
|
61
|
+
"type": "string"
|
|
62
|
+
},
|
|
63
|
+
"repo_root": {
|
|
64
|
+
"type": "string"
|
|
65
|
+
},
|
|
66
|
+
"canonical_paths": {
|
|
67
|
+
"type": "object",
|
|
68
|
+
"additionalProperties": {
|
|
69
|
+
"type": "string"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"runtime": {
|
|
75
|
+
"type": "object",
|
|
76
|
+
"additionalProperties": false,
|
|
77
|
+
"properties": {
|
|
78
|
+
"shell": {
|
|
79
|
+
"type": "string"
|
|
80
|
+
},
|
|
81
|
+
"default_timeout_sec": {
|
|
82
|
+
"type": "integer",
|
|
83
|
+
"minimum": 1
|
|
84
|
+
},
|
|
85
|
+
"artifacts_root": {
|
|
86
|
+
"type": "string"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"packet": {
|
|
91
|
+
"type": "object",
|
|
92
|
+
"additionalProperties": false,
|
|
93
|
+
"properties": {
|
|
94
|
+
"default_kind": {
|
|
95
|
+
"type": "string",
|
|
96
|
+
"enum": [
|
|
97
|
+
"pr",
|
|
98
|
+
"claim",
|
|
99
|
+
"verification",
|
|
100
|
+
"problem_scope",
|
|
101
|
+
"atom_pass"
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
"output_dir": {
|
|
105
|
+
"type": "string"
|
|
106
|
+
},
|
|
107
|
+
"write_markdown": {
|
|
108
|
+
"type": "boolean"
|
|
109
|
+
},
|
|
110
|
+
"deterministic_mode": {
|
|
111
|
+
"type": "boolean"
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"lifecycle": {
|
|
116
|
+
"type": "object",
|
|
117
|
+
"additionalProperties": false,
|
|
118
|
+
"required": [
|
|
119
|
+
"claim_status_map",
|
|
120
|
+
"atom_status_map"
|
|
121
|
+
],
|
|
122
|
+
"properties": {
|
|
123
|
+
"claim_status_map": {
|
|
124
|
+
"type": "object",
|
|
125
|
+
"additionalProperties": {
|
|
126
|
+
"type": "string",
|
|
127
|
+
"enum": [
|
|
128
|
+
"draft",
|
|
129
|
+
"ready",
|
|
130
|
+
"reviewed",
|
|
131
|
+
"accepted",
|
|
132
|
+
"blocked",
|
|
133
|
+
"retracted"
|
|
134
|
+
]
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"atom_status_map": {
|
|
138
|
+
"type": "object",
|
|
139
|
+
"additionalProperties": {
|
|
140
|
+
"type": "string",
|
|
141
|
+
"enum": [
|
|
142
|
+
"draft",
|
|
143
|
+
"ready",
|
|
144
|
+
"reviewed",
|
|
145
|
+
"accepted",
|
|
146
|
+
"blocked",
|
|
147
|
+
"retracted"
|
|
148
|
+
]
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"claim_level_values": {
|
|
152
|
+
"type": "array",
|
|
153
|
+
"items": {
|
|
154
|
+
"type": "string",
|
|
155
|
+
"enum": [
|
|
156
|
+
"Exact",
|
|
157
|
+
"Verified",
|
|
158
|
+
"Heuristic",
|
|
159
|
+
"Conjecture"
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
"atomic_board": {
|
|
166
|
+
"type": "object",
|
|
167
|
+
"additionalProperties": false,
|
|
168
|
+
"properties": {
|
|
169
|
+
"enabled": {
|
|
170
|
+
"type": "boolean"
|
|
171
|
+
},
|
|
172
|
+
"board_path": {
|
|
173
|
+
"type": "string"
|
|
174
|
+
},
|
|
175
|
+
"refresh_command": {
|
|
176
|
+
"type": "string"
|
|
177
|
+
},
|
|
178
|
+
"ready_command": {
|
|
179
|
+
"type": "string"
|
|
180
|
+
},
|
|
181
|
+
"set_atom_command_template": {
|
|
182
|
+
"type": "string"
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
"gate": {
|
|
187
|
+
"type": "object",
|
|
188
|
+
"additionalProperties": false,
|
|
189
|
+
"required": [
|
|
190
|
+
"id",
|
|
191
|
+
"description",
|
|
192
|
+
"phase",
|
|
193
|
+
"command",
|
|
194
|
+
"pass"
|
|
195
|
+
],
|
|
196
|
+
"properties": {
|
|
197
|
+
"id": {
|
|
198
|
+
"type": "string"
|
|
199
|
+
},
|
|
200
|
+
"description": {
|
|
201
|
+
"type": "string"
|
|
202
|
+
},
|
|
203
|
+
"phase": {
|
|
204
|
+
"type": "string",
|
|
205
|
+
"enum": [
|
|
206
|
+
"scope_lock",
|
|
207
|
+
"structure_kernel",
|
|
208
|
+
"quant_assembly",
|
|
209
|
+
"interface_lift",
|
|
210
|
+
"verification",
|
|
211
|
+
"custom"
|
|
212
|
+
]
|
|
213
|
+
},
|
|
214
|
+
"command": {
|
|
215
|
+
"type": "string"
|
|
216
|
+
},
|
|
217
|
+
"working_dir": {
|
|
218
|
+
"type": "string"
|
|
219
|
+
},
|
|
220
|
+
"timeout_sec": {
|
|
221
|
+
"type": "integer",
|
|
222
|
+
"minimum": 1
|
|
223
|
+
},
|
|
224
|
+
"required": {
|
|
225
|
+
"type": "boolean"
|
|
226
|
+
},
|
|
227
|
+
"pass": {
|
|
228
|
+
"$ref": "#/$defs/pass_rule"
|
|
229
|
+
},
|
|
230
|
+
"evidence": {
|
|
231
|
+
"$ref": "#/$defs/evidence"
|
|
232
|
+
},
|
|
233
|
+
"on_fail": {
|
|
234
|
+
"type": "string",
|
|
235
|
+
"enum": [
|
|
236
|
+
"stop",
|
|
237
|
+
"continue",
|
|
238
|
+
"mark_blocked"
|
|
239
|
+
]
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
"pass_rule": {
|
|
244
|
+
"type": "object",
|
|
245
|
+
"additionalProperties": false,
|
|
246
|
+
"required": [
|
|
247
|
+
"exit_codes"
|
|
248
|
+
],
|
|
249
|
+
"properties": {
|
|
250
|
+
"exit_codes": {
|
|
251
|
+
"type": "array",
|
|
252
|
+
"items": {
|
|
253
|
+
"type": "integer"
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
"stdout_must_contain": {
|
|
257
|
+
"type": "array",
|
|
258
|
+
"items": {
|
|
259
|
+
"type": "string"
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
"stdout_must_not_contain": {
|
|
263
|
+
"type": "array",
|
|
264
|
+
"items": {
|
|
265
|
+
"type": "string"
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
"stderr_must_contain": {
|
|
269
|
+
"type": "array",
|
|
270
|
+
"items": {
|
|
271
|
+
"type": "string"
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
"stderr_must_not_contain": {
|
|
275
|
+
"type": "array",
|
|
276
|
+
"items": {
|
|
277
|
+
"type": "string"
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
"file_must_exist": {
|
|
281
|
+
"type": "array",
|
|
282
|
+
"items": {
|
|
283
|
+
"type": "string"
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
"evidence": {
|
|
289
|
+
"type": "object",
|
|
290
|
+
"additionalProperties": false,
|
|
291
|
+
"properties": {
|
|
292
|
+
"include_stdout": {
|
|
293
|
+
"type": "boolean"
|
|
294
|
+
},
|
|
295
|
+
"include_stderr": {
|
|
296
|
+
"type": "boolean"
|
|
297
|
+
},
|
|
298
|
+
"status": {
|
|
299
|
+
"type": "string",
|
|
300
|
+
"enum": [
|
|
301
|
+
"process_only",
|
|
302
|
+
"starter_scaffold",
|
|
303
|
+
"starter_stub",
|
|
304
|
+
"evidence"
|
|
305
|
+
]
|
|
306
|
+
},
|
|
307
|
+
"note": {
|
|
308
|
+
"type": "string"
|
|
309
|
+
},
|
|
310
|
+
"paths": {
|
|
311
|
+
"type": "array",
|
|
312
|
+
"items": {
|
|
313
|
+
"type": "string"
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
"epistemic_status": {
|
|
319
|
+
"type": "object",
|
|
320
|
+
"additionalProperties": false,
|
|
321
|
+
"properties": {
|
|
322
|
+
"overall": {
|
|
323
|
+
"type": "string"
|
|
324
|
+
},
|
|
325
|
+
"starter_scaffold": {
|
|
326
|
+
"type": "boolean"
|
|
327
|
+
},
|
|
328
|
+
"include_last_erdos_sync": {
|
|
329
|
+
"type": "boolean"
|
|
330
|
+
},
|
|
331
|
+
"strongest_evidence_paths": {
|
|
332
|
+
"type": "array",
|
|
333
|
+
"items": {
|
|
334
|
+
"type": "string"
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
"notes": {
|
|
338
|
+
"type": "array",
|
|
339
|
+
"items": {
|
|
340
|
+
"type": "string"
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
},
|
|
345
|
+
"profile": {
|
|
346
|
+
"type": "object",
|
|
347
|
+
"additionalProperties": false,
|
|
348
|
+
"required": [
|
|
349
|
+
"description",
|
|
350
|
+
"mode",
|
|
351
|
+
"packet_kind",
|
|
352
|
+
"gate_ids"
|
|
353
|
+
],
|
|
354
|
+
"properties": {
|
|
355
|
+
"description": {
|
|
356
|
+
"type": "string"
|
|
357
|
+
},
|
|
358
|
+
"mode": {
|
|
359
|
+
"type": "string",
|
|
360
|
+
"enum": [
|
|
361
|
+
"discovery",
|
|
362
|
+
"collaboration",
|
|
363
|
+
"review"
|
|
364
|
+
]
|
|
365
|
+
},
|
|
366
|
+
"packet_kind": {
|
|
367
|
+
"type": "string",
|
|
368
|
+
"enum": [
|
|
369
|
+
"pr",
|
|
370
|
+
"claim",
|
|
371
|
+
"verification",
|
|
372
|
+
"problem_scope",
|
|
373
|
+
"atom_pass"
|
|
374
|
+
]
|
|
375
|
+
},
|
|
376
|
+
"gate_ids": {
|
|
377
|
+
"type": "array",
|
|
378
|
+
"items": {
|
|
379
|
+
"type": "string"
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|