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.
Files changed (94) hide show
  1. package/AGENT_INTEGRATION.md +94 -0
  2. package/INSTALL.md +159 -0
  3. package/LICENSE +22 -0
  4. package/PROTOCOL.md +140 -0
  5. package/README.md +312 -0
  6. package/bin/orp.js +38 -0
  7. package/cli/orp.py +3595 -0
  8. package/cone/CONTEXT_LOG.md +33 -0
  9. package/docs/AGENT_LOOP.md +63 -0
  10. package/docs/CHOOSING_OR_IGNORING_INSTRUMENTS.md +128 -0
  11. package/docs/CODA_ORP_CONTRACT.md +222 -0
  12. package/docs/CORE_ABILITY_REFOCUS_CHECKLIST.md +62 -0
  13. package/docs/DISCOVER.md +69 -0
  14. package/docs/EXTERNAL_CONTRIBUTION_GOVERNANCE.md +275 -0
  15. package/docs/MATHLIB_COLLABORATION_FLOW_PROMPT.md +112 -0
  16. package/docs/NPM_RELEASE_CHECKLIST.md +55 -0
  17. package/docs/ORP_V1_ATOMIC_DISCOVERY_EVOLUTION.md +186 -0
  18. package/docs/OSS_CONTRIBUTION_AGENT_LOOP.md +69 -0
  19. package/docs/PRESENTATION_BOW.md +100 -0
  20. package/docs/PROFILE_PACKS.md +227 -0
  21. package/docs/SUNFLOWER_CODA_PR_GOVERNANCE_MAPPING.md +77 -0
  22. package/docs/WHY_INSTRUMENTS.md +118 -0
  23. package/examples/README.md +21 -0
  24. package/examples/example_claim.md +33 -0
  25. package/examples/example_failed.md +24 -0
  26. package/examples/example_verification.md +36 -0
  27. package/examples/orp.erdos-problems.catalog.yml +88 -0
  28. package/examples/orp.external-pr-governance.yml +223 -0
  29. package/examples/orp.sunflower-coda.atomic.yml +144 -0
  30. package/examples/orp.sunflower-coda.live-compare.yml +181 -0
  31. package/examples/orp.sunflower-coda.pr-governance.yml +253 -0
  32. package/examples/packet.problem_scope.example.json +123 -0
  33. package/examples/reports/README.md +16 -0
  34. package/examples/reports/sunflower_live_compare_20.RUN_SUMMARY.md +37 -0
  35. package/examples/reports/sunflower_live_compare_367.RUN_SUMMARY.md +37 -0
  36. package/examples/reports/sunflower_live_compare_857.RUN_SUMMARY.md +37 -0
  37. package/llms.txt +58 -0
  38. package/modules/instruments/ADVERSARIAL/README.md +109 -0
  39. package/modules/instruments/ADVERSARIAL/TEMPLATE.md +27 -0
  40. package/modules/instruments/COMPRESSION/README.md +112 -0
  41. package/modules/instruments/COMPRESSION/TEMPLATE.md +27 -0
  42. package/modules/instruments/INSTRUMENT_TEMPLATE.md +30 -0
  43. package/modules/instruments/ORBIT/README.md +124 -0
  44. package/modules/instruments/ORBIT/TEMPLATE.md +28 -0
  45. package/modules/instruments/README.md +179 -0
  46. package/package.json +54 -0
  47. package/packs/README.md +16 -0
  48. package/packs/erdos-open-problems/README.md +287 -0
  49. package/packs/erdos-open-problems/data/README.md +43 -0
  50. package/packs/erdos-open-problems/data/erdos_open_problems.md +697 -0
  51. package/packs/erdos-open-problems/data/erdos_problems.active.json +15561 -0
  52. package/packs/erdos-open-problems/data/erdos_problems.all.json +26289 -0
  53. package/packs/erdos-open-problems/data/erdos_problems.closed.json +10760 -0
  54. package/packs/erdos-open-problems/data/erdos_problems.open.json +15561 -0
  55. package/packs/erdos-open-problems/docs/SUNFLOWER_ADAPTER_DEPENDENCIES.md +63 -0
  56. package/packs/erdos-open-problems/pack.yml +131 -0
  57. package/packs/erdos-open-problems/profiles/erdos-problems-catalog-sync.yml.tmpl +99 -0
  58. package/packs/erdos-open-problems/profiles/sunflower-live-compare.yml.tmpl +188 -0
  59. package/packs/erdos-open-problems/profiles/sunflower-mathlib-pr-governance.yml.tmpl +253 -0
  60. package/packs/erdos-open-problems/profiles/sunflower-problem857-discovery-public-repo.yml.tmpl +152 -0
  61. package/packs/erdos-open-problems/profiles/sunflower-problem857-discovery.yml.tmpl +154 -0
  62. package/packs/external-pr-governance/README.md +116 -0
  63. package/packs/external-pr-governance/adapters/formal-conjectures/README.md +35 -0
  64. package/packs/external-pr-governance/adapters/mathlib/README.md +37 -0
  65. package/packs/external-pr-governance/pack.yml +146 -0
  66. package/packs/external-pr-governance/profiles/oss-feedback-hardening.yml.tmpl +92 -0
  67. package/packs/external-pr-governance/profiles/oss-pr-governance.yml.tmpl +233 -0
  68. package/packs/issue-smashers/README.md +92 -0
  69. package/packs/issue-smashers/adapters/formal-conjectures/README.md +17 -0
  70. package/packs/issue-smashers/adapters/generic-github/README.md +16 -0
  71. package/packs/issue-smashers/adapters/mathlib/README.md +32 -0
  72. package/packs/issue-smashers/bootstrap/README.md +19 -0
  73. package/packs/issue-smashers/bootstrap/setup-issue-smashers.sh +18 -0
  74. package/packs/issue-smashers/examples/issue-smashers.workspace.yml +24 -0
  75. package/packs/issue-smashers/pack.yml +178 -0
  76. package/packs/issue-smashers/profiles/issue-smashers-feedback-hardening.yml.tmpl +102 -0
  77. package/packs/issue-smashers/profiles/issue-smashers.yml.tmpl +258 -0
  78. package/scripts/npm-postinstall-check.js +31 -0
  79. package/scripts/orp +11 -0
  80. package/scripts/orp-agent-integrate.sh +197 -0
  81. package/scripts/orp-checkpoint.sh +184 -0
  82. package/scripts/orp-erdos-problems-sync.py +580 -0
  83. package/scripts/orp-init.sh +50 -0
  84. package/scripts/orp-pack-fetch.py +155 -0
  85. package/scripts/orp-pack-install.py +2273 -0
  86. package/scripts/orp-pack-render.py +188 -0
  87. package/spec/v1/LIFECYCLE_MAPPING.md +40 -0
  88. package/spec/v1/orp.config.schema.json +385 -0
  89. package/spec/v1/packet.schema.json +552 -0
  90. package/spec/v1/profile-pack.schema.json +95 -0
  91. package/templates/CLAIM.md +33 -0
  92. package/templates/FAILED_TOPIC.md +19 -0
  93. package/templates/ISSUE_TEMPLATE.md +22 -0
  94. package/templates/VERIFICATION_RECORD.md +34 -0
@@ -0,0 +1,19 @@
1
+ # Issue Smashers Bootstrap
2
+
3
+ This pack bootstraps a small operator-facing workspace scaffold into the install
4
+ target.
5
+
6
+ Generated by default:
7
+
8
+ - `issue-smashers/README.md`
9
+ - `issue-smashers/WORKSPACE_RULES.md`
10
+ - `issue-smashers/setup-issue-smashers.sh`
11
+ - `issue-smashers/analysis/PR_DRAFT_BODY.md`
12
+ - `issue-smashers/analysis/ISSUE_SMASHERS_WATCHLIST.json`
13
+ - `issue-smashers/analysis/ISSUE_SMASHERS_STATUS.md`
14
+ - directory placeholders under `repos/`, `worktrees/`, `scratch/`, and
15
+ `archive/`
16
+
17
+ The bootstrap intentionally does not clone repos automatically. It creates the
18
+ workspace shape and leaves repo-specific cloning, remotes, hooks, and adapter
19
+ commands to the operator or higher-level tooling.
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env bash
2
+ set -eu
3
+
4
+ ROOT="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
5
+
6
+ mkdir -p \
7
+ "$ROOT/analysis" \
8
+ "$ROOT/repos" \
9
+ "$ROOT/worktrees" \
10
+ "$ROOT/scratch" \
11
+ "$ROOT/archive"
12
+
13
+ printf 'workspace_root=%s\n' "$ROOT"
14
+ printf 'ensured=analysis\n'
15
+ printf 'ensured=repos\n'
16
+ printf 'ensured=worktrees\n'
17
+ printf 'ensured=scratch\n'
18
+ printf 'ensured=archive\n'
@@ -0,0 +1,24 @@
1
+ workspace:
2
+ root: issue-smashers
3
+ analysis_dir: issue-smashers/analysis
4
+ repos_dir: issue-smashers/repos
5
+ worktrees_dir: issue-smashers/worktrees
6
+ scratch_dir: issue-smashers/scratch
7
+ archive_dir: issue-smashers/archive
8
+
9
+ watch_targets:
10
+ - repo: leanprover-community/mathlib4
11
+ issue: "5617"
12
+ lane: mathlib4/issue-5617
13
+ state: watch
14
+ - repo: google-deepmind/formal-conjectures
15
+ issue: "erdos-857"
16
+ lane: formal-conjectures/erdos-857
17
+ state: backlog
18
+
19
+ policy:
20
+ workspace_git_repo: false
21
+ one_worktree_per_issue: true
22
+ fork_remote_name: origin
23
+ upstream_remote_name: upstream
24
+ process_only: true
@@ -0,0 +1,178 @@
1
+ schema_version: "1.0.0"
2
+ pack_id: issue-smashers
3
+ name: Issue Smashers Pack
4
+ version: "0.1.0"
5
+ description: >
6
+ Opinionated ORP workspace pack for organized multi-repo external contribution
7
+ work, combining an issue-smashers directory convention with reusable PR
8
+ governance and feedback-hardening profiles.
9
+ orp_version_min: "0.3.0"
10
+
11
+ variables:
12
+ TARGET_REPO_ROOT:
13
+ description: Absolute path to the install target that will contain the issue-smashers workspace.
14
+ required: true
15
+ ISSUE_SMASHERS_ROOT:
16
+ description: Workspace root relative to TARGET_REPO_ROOT.
17
+ required: false
18
+ default: "issue-smashers"
19
+ ISSUE_SMASHERS_REPOS_DIR:
20
+ description: Base clone directory relative to TARGET_REPO_ROOT.
21
+ required: false
22
+ default: "issue-smashers/repos"
23
+ ISSUE_SMASHERS_WORKTREES_DIR:
24
+ description: Active issue worktree directory relative to TARGET_REPO_ROOT.
25
+ required: false
26
+ default: "issue-smashers/worktrees"
27
+ ISSUE_SMASHERS_SCRATCH_DIR:
28
+ description: Disposable scratch directory relative to TARGET_REPO_ROOT.
29
+ required: false
30
+ default: "issue-smashers/scratch"
31
+ ISSUE_SMASHERS_ARCHIVE_DIR:
32
+ description: Optional archive directory relative to TARGET_REPO_ROOT.
33
+ required: false
34
+ default: "issue-smashers/archive"
35
+ WATCHLIST_FILE:
36
+ description: Watchlist JSON path relative to TARGET_REPO_ROOT.
37
+ required: false
38
+ default: "issue-smashers/analysis/ISSUE_SMASHERS_WATCHLIST.json"
39
+ STATUS_FILE:
40
+ description: Human-readable status board path relative to TARGET_REPO_ROOT.
41
+ required: false
42
+ default: "issue-smashers/analysis/ISSUE_SMASHERS_STATUS.md"
43
+ WORKSPACE_RULES_FILE:
44
+ description: Workspace rules document path relative to TARGET_REPO_ROOT.
45
+ required: false
46
+ default: "issue-smashers/WORKSPACE_RULES.md"
47
+ DEFAULT_PR_BODY_FILE:
48
+ description: Default PR body file path relative to TARGET_REPO_ROOT.
49
+ required: false
50
+ default: "issue-smashers/analysis/PR_DRAFT_BODY.md"
51
+ TARGET_GITHUB_REPO:
52
+ description: GitHub repo receiving the contribution, for example leanprover-community/mathlib4.
53
+ required: false
54
+ default: "owner/repo"
55
+ TARGET_GITHUB_AUTHOR:
56
+ description: GitHub login used for coordination and overlap checks.
57
+ required: false
58
+ default: "your-login"
59
+ ORP_TIMEOUT_SEC:
60
+ description: Default gate timeout in seconds.
61
+ required: false
62
+ default: "1200"
63
+ WATCH_SELECT_COMMAND:
64
+ description: Command that selects a contribution target and records why it is worth pursuing.
65
+ required: false
66
+ default: "printf 'configure WATCH_SELECT_COMMAND\\n' >&2; exit 2"
67
+ WATCH_SELECT_PASS_TOKEN:
68
+ description: Stdout token indicating the watch/select gate passed.
69
+ required: false
70
+ default: "selection=PASS"
71
+ VIABILITY_COMMAND:
72
+ description: Command that decides whether starting work is etiquette-safe.
73
+ required: false
74
+ default: "printf 'configure VIABILITY_COMMAND\\n' >&2; exit 2"
75
+ VIABILITY_PASS_TOKEN:
76
+ description: Stdout token indicating the viability gate passed.
77
+ required: false
78
+ default: "decision=PASS"
79
+ OVERLAP_COMMAND:
80
+ description: Command that checks external overlap or confirms coordination is clear.
81
+ required: false
82
+ default: "printf 'configure OVERLAP_COMMAND\\n' >&2; exit 2"
83
+ OVERLAP_PASS_TOKEN:
84
+ description: Stdout token indicating the overlap gate passed.
85
+ required: false
86
+ default: "overlap=PASS"
87
+ LOCAL_GATE_COMMAND:
88
+ description: Command that performs the local-first verification gate.
89
+ required: false
90
+ default: "printf 'configure LOCAL_GATE_COMMAND\\n' >&2; exit 2"
91
+ LOCAL_GATE_PASS_TOKEN:
92
+ description: Stdout token indicating the local gate passed.
93
+ required: false
94
+ default: "gate=PASS"
95
+ READY_TO_DRAFT_COMMAND:
96
+ description: Command that freezes the branch as ready to open or update a draft PR on the same HEAD.
97
+ required: false
98
+ default: "printf 'configure READY_TO_DRAFT_COMMAND\\n' >&2; exit 2"
99
+ READY_TO_DRAFT_PASS_TOKEN:
100
+ description: Stdout token indicating the ready-to-draft gate passed.
101
+ required: false
102
+ default: "ready_to_draft=PASS"
103
+ PR_BODY_PREFLIGHT_COMMAND:
104
+ description: Command that validates portable public PR text.
105
+ required: false
106
+ default: "printf 'configure PR_BODY_PREFLIGHT_COMMAND\\n' >&2; exit 2"
107
+ PR_BODY_PASS_TOKEN:
108
+ description: Stdout token indicating PR body preflight passed.
109
+ required: false
110
+ default: "gate=PASS"
111
+ DRAFT_PR_TRANSITION_COMMAND:
112
+ description: Command that opens or updates the draft PR and refuses if ready markers no longer match the current HEAD.
113
+ required: false
114
+ default: "printf 'configure DRAFT_PR_TRANSITION_COMMAND\\n' >&2; exit 2"
115
+ DRAFT_PR_TRANSITION_PASS_TOKEN:
116
+ description: Stdout token indicating the draft PR open/update transition passed.
117
+ required: false
118
+ default: "draft_pr=PASS"
119
+ DRAFT_CI_COMMAND:
120
+ description: Command that checks draft CI or draft lifecycle readiness.
121
+ required: false
122
+ default: "printf 'configure DRAFT_CI_COMMAND\\n' >&2; exit 2"
123
+ DRAFT_CI_PASS_TOKEN:
124
+ description: Stdout token indicating draft CI is green or otherwise acceptable.
125
+ required: false
126
+ default: "draft_ci=PASS"
127
+ READY_FOR_REVIEW_COMMAND:
128
+ description: Command that decides whether the PR can be promoted from draft to ready.
129
+ required: false
130
+ default: "printf 'configure READY_FOR_REVIEW_COMMAND\\n' >&2; exit 2"
131
+ READY_FOR_REVIEW_PASS_TOKEN:
132
+ description: Stdout token indicating ready-for-review conditions are satisfied.
133
+ required: false
134
+ default: "ready_for_review=PASS"
135
+ FEEDBACK_RECORD_COMMAND:
136
+ description: Command that records what maintainer feedback slipped and why.
137
+ required: false
138
+ default: "printf 'configure FEEDBACK_RECORD_COMMAND\\n' >&2; exit 2"
139
+ FEEDBACK_RECORD_PASS_TOKEN:
140
+ description: Stdout token indicating maintainer-feedback recording passed.
141
+ required: false
142
+ default: "feedback_recorded=PASS"
143
+ GUARD_VALIDATION_COMMAND:
144
+ description: Command that validates the new or updated guard with PASS and FAIL coverage.
145
+ required: false
146
+ default: "printf 'configure GUARD_VALIDATION_COMMAND\\n' >&2; exit 2"
147
+ GUARD_VALIDATION_PASS_TOKEN:
148
+ description: Stdout token indicating guard validation passed.
149
+ required: false
150
+ default: "guard_validation=PASS"
151
+ DOC_SYNC_COMMAND:
152
+ description: Command that confirms docs, templates, and agent instructions were updated with the guard.
153
+ required: false
154
+ default: "printf 'configure DOC_SYNC_COMMAND\\n' >&2; exit 2"
155
+ DOC_SYNC_PASS_TOKEN:
156
+ description: Stdout token indicating governance docs were synced.
157
+ required: false
158
+ default: "docs_sync=PASS"
159
+
160
+ templates:
161
+ issue_smashers_workspace:
162
+ path: profiles/issue-smashers.yml.tmpl
163
+ description: Opinionated issue-smashers workspace and external contribution governance profiles.
164
+ output_hint: orp.issue-smashers.yml
165
+ default_profiles:
166
+ - issue_smashers_watch_select
167
+ - issue_smashers_pre_open
168
+ - issue_smashers_local_readiness
169
+ - issue_smashers_draft_transition
170
+ - issue_smashers_draft_lifecycle
171
+ - issue_smashers_full_flow
172
+
173
+ issue_smashers_feedback_hardening:
174
+ path: profiles/issue-smashers-feedback-hardening.yml.tmpl
175
+ description: Issue-smashers maintainer-feedback hardening profile.
176
+ output_hint: orp.issue-smashers-feedback-hardening.yml
177
+ default_profiles:
178
+ - issue_smashers_feedback_hardening
@@ -0,0 +1,102 @@
1
+ version: "1"
2
+
3
+ project:
4
+ name: issue-smashers-feedback-hardening
5
+ repo_root: .
6
+ canonical_paths:
7
+ workspace_root: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ROOT}}
8
+ watchlist_json: {{TARGET_REPO_ROOT}}/{{WATCHLIST_FILE}}
9
+ status_md: {{TARGET_REPO_ROOT}}/{{STATUS_FILE}}
10
+ workspace_rules_md: {{TARGET_REPO_ROOT}}/{{WORKSPACE_RULES_FILE}}
11
+ default_pr_body_file: {{TARGET_REPO_ROOT}}/{{DEFAULT_PR_BODY_FILE}}
12
+
13
+ runtime:
14
+ shell: /bin/bash
15
+ default_timeout_sec: {{ORP_TIMEOUT_SEC}}
16
+ artifacts_root: orp/artifacts
17
+
18
+ packet:
19
+ default_kind: verification
20
+ output_dir: orp/packets
21
+ write_markdown: true
22
+ deterministic_mode: true
23
+
24
+ lifecycle:
25
+ claim_status_map:
26
+ Draft: draft
27
+ In review: ready
28
+ Verified: reviewed
29
+ Blocked: blocked
30
+ Retracted: retracted
31
+ atom_status_map:
32
+ todo: draft
33
+ in_progress: ready
34
+ blocked: blocked
35
+ done: reviewed
36
+ claim_level_values:
37
+ - Exact
38
+ - Verified
39
+ - Heuristic
40
+ - Conjecture
41
+
42
+ gates:
43
+ - id: feedback_record
44
+ description: Record what slipped, why it slipped, and how the workspace should prevent it next time.
45
+ phase: verification
46
+ command: >
47
+ {{FEEDBACK_RECORD_COMMAND}}
48
+ working_dir: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ROOT}}
49
+ pass:
50
+ exit_codes: [0]
51
+ stdout_must_contain:
52
+ - {{FEEDBACK_RECORD_PASS_TOKEN}}
53
+ evidence:
54
+ include_stdout: true
55
+ include_stderr: true
56
+ paths:
57
+ - {{TARGET_REPO_ROOT}}/{{WATCHLIST_FILE}}
58
+ - {{TARGET_REPO_ROOT}}/{{STATUS_FILE}}
59
+ on_fail: mark_blocked
60
+
61
+ - id: guard_validation
62
+ description: Validate the new or updated guard with explicit PASS and FAIL coverage.
63
+ phase: verification
64
+ command: >
65
+ {{GUARD_VALIDATION_COMMAND}}
66
+ working_dir: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ROOT}}
67
+ pass:
68
+ exit_codes: [0]
69
+ stdout_must_contain:
70
+ - {{GUARD_VALIDATION_PASS_TOKEN}}
71
+ evidence:
72
+ include_stdout: true
73
+ include_stderr: true
74
+ on_fail: stop
75
+
76
+ - id: docs_sync
77
+ description: Confirm workspace docs and operator notes were updated in the same pass.
78
+ phase: verification
79
+ command: >
80
+ {{DOC_SYNC_COMMAND}}
81
+ working_dir: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ROOT}}
82
+ pass:
83
+ exit_codes: [0]
84
+ stdout_must_contain:
85
+ - {{DOC_SYNC_PASS_TOKEN}}
86
+ evidence:
87
+ include_stdout: true
88
+ include_stderr: true
89
+ paths:
90
+ - {{TARGET_REPO_ROOT}}/{{WORKSPACE_RULES_FILE}}
91
+ - {{TARGET_REPO_ROOT}}/{{STATUS_FILE}}
92
+ on_fail: mark_blocked
93
+
94
+ profiles:
95
+ issue_smashers_feedback_hardening:
96
+ description: Convert maintainer feedback into a reusable issue-smashers guard plus synced docs.
97
+ mode: collaboration
98
+ packet_kind: verification
99
+ gate_ids:
100
+ - feedback_record
101
+ - guard_validation
102
+ - docs_sync
@@ -0,0 +1,258 @@
1
+ version: "1"
2
+
3
+ project:
4
+ name: issue-smashers
5
+ repo_root: .
6
+ canonical_paths:
7
+ workspace_root: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ROOT}}
8
+ repos_root: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_REPOS_DIR}}
9
+ worktrees_root: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_WORKTREES_DIR}}
10
+ scratch_root: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_SCRATCH_DIR}}
11
+ archive_root: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ARCHIVE_DIR}}
12
+ watchlist_json: {{TARGET_REPO_ROOT}}/{{WATCHLIST_FILE}}
13
+ status_md: {{TARGET_REPO_ROOT}}/{{STATUS_FILE}}
14
+ workspace_rules_md: {{TARGET_REPO_ROOT}}/{{WORKSPACE_RULES_FILE}}
15
+ default_pr_body_file: {{TARGET_REPO_ROOT}}/{{DEFAULT_PR_BODY_FILE}}
16
+
17
+ runtime:
18
+ shell: /bin/bash
19
+ default_timeout_sec: {{ORP_TIMEOUT_SEC}}
20
+ artifacts_root: orp/artifacts
21
+
22
+ packet:
23
+ default_kind: pr
24
+ output_dir: orp/packets
25
+ write_markdown: true
26
+ deterministic_mode: true
27
+
28
+ lifecycle:
29
+ claim_status_map:
30
+ Draft: draft
31
+ In review: ready
32
+ Verified: reviewed
33
+ Blocked: blocked
34
+ Retracted: retracted
35
+ atom_status_map:
36
+ todo: draft
37
+ in_progress: ready
38
+ blocked: blocked
39
+ done: reviewed
40
+ claim_level_values:
41
+ - Exact
42
+ - Verified
43
+ - Heuristic
44
+ - Conjecture
45
+
46
+ gates:
47
+ - id: watch_select
48
+ description: Select a target issue lane and record why it belongs in the issue-smashers workspace.
49
+ phase: scope_lock
50
+ command: >
51
+ {{WATCH_SELECT_COMMAND}}
52
+ working_dir: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ROOT}}
53
+ pass:
54
+ exit_codes: [0]
55
+ stdout_must_contain:
56
+ - {{WATCH_SELECT_PASS_TOKEN}}
57
+ evidence:
58
+ include_stdout: true
59
+ include_stderr: true
60
+ paths:
61
+ - {{TARGET_REPO_ROOT}}/{{WATCHLIST_FILE}}
62
+ - {{TARGET_REPO_ROOT}}/{{STATUS_FILE}}
63
+ on_fail: mark_blocked
64
+
65
+ - id: viability_gate
66
+ description: Decide whether work is viable and etiquette-safe before creating noise.
67
+ phase: scope_lock
68
+ command: >
69
+ {{VIABILITY_COMMAND}}
70
+ working_dir: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ROOT}}
71
+ pass:
72
+ exit_codes: [0]
73
+ stdout_must_contain:
74
+ - {{VIABILITY_PASS_TOKEN}}
75
+ evidence:
76
+ include_stdout: true
77
+ include_stderr: true
78
+ paths:
79
+ - {{TARGET_REPO_ROOT}}/{{WATCHLIST_FILE}}
80
+ - {{TARGET_REPO_ROOT}}/{{STATUS_FILE}}
81
+ on_fail: mark_blocked
82
+
83
+ - id: overlap_gate
84
+ description: Confirm overlap is clear or coordination is already complete.
85
+ phase: scope_lock
86
+ command: >
87
+ {{OVERLAP_COMMAND}}
88
+ working_dir: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ROOT}}
89
+ pass:
90
+ exit_codes: [0]
91
+ stdout_must_contain:
92
+ - {{OVERLAP_PASS_TOKEN}}
93
+ evidence:
94
+ include_stdout: true
95
+ include_stderr: true
96
+ paths:
97
+ - {{TARGET_REPO_ROOT}}/{{WATCHLIST_FILE}}
98
+ - {{TARGET_REPO_ROOT}}/{{STATUS_FILE}}
99
+ on_fail: mark_blocked
100
+
101
+ - id: local_gate
102
+ description: Run the host-repo local verification gate before any draft PR update.
103
+ phase: verification
104
+ command: >
105
+ {{LOCAL_GATE_COMMAND}}
106
+ working_dir: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ROOT}}
107
+ timeout_sec: {{ORP_TIMEOUT_SEC}}
108
+ pass:
109
+ exit_codes: [0]
110
+ stdout_must_contain:
111
+ - {{LOCAL_GATE_PASS_TOKEN}}
112
+ evidence:
113
+ include_stdout: true
114
+ include_stderr: true
115
+ paths:
116
+ - {{TARGET_REPO_ROOT}}/{{WORKSPACE_RULES_FILE}}
117
+ on_fail: stop
118
+
119
+ - id: ready_to_draft
120
+ description: Freeze the branch or lane as ready to open or update a draft PR on the same HEAD.
121
+ phase: verification
122
+ command: >
123
+ {{READY_TO_DRAFT_COMMAND}}
124
+ working_dir: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ROOT}}
125
+ pass:
126
+ exit_codes: [0]
127
+ stdout_must_contain:
128
+ - {{READY_TO_DRAFT_PASS_TOKEN}}
129
+ evidence:
130
+ include_stdout: true
131
+ include_stderr: true
132
+ paths:
133
+ - {{TARGET_REPO_ROOT}}/{{STATUS_FILE}}
134
+ on_fail: stop
135
+
136
+ - id: pr_body_preflight
137
+ description: Enforce portable, reviewer-friendly public PR text for the current issue-smashers lane.
138
+ phase: verification
139
+ command: >
140
+ {{PR_BODY_PREFLIGHT_COMMAND}}
141
+ working_dir: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ROOT}}
142
+ pass:
143
+ exit_codes: [0]
144
+ stdout_must_contain:
145
+ - {{PR_BODY_PASS_TOKEN}}
146
+ evidence:
147
+ include_stdout: true
148
+ include_stderr: true
149
+ paths:
150
+ - {{TARGET_REPO_ROOT}}/{{DEFAULT_PR_BODY_FILE}}
151
+ on_fail: mark_blocked
152
+
153
+ - id: draft_pr_transition
154
+ description: Open or update the draft PR only after the same-head readiness chain is satisfied.
155
+ phase: verification
156
+ command: >
157
+ {{DRAFT_PR_TRANSITION_COMMAND}}
158
+ working_dir: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ROOT}}
159
+ pass:
160
+ exit_codes: [0]
161
+ stdout_must_contain:
162
+ - {{DRAFT_PR_TRANSITION_PASS_TOKEN}}
163
+ evidence:
164
+ include_stdout: true
165
+ include_stderr: true
166
+ paths:
167
+ - {{TARGET_REPO_ROOT}}/{{DEFAULT_PR_BODY_FILE}}
168
+ - {{TARGET_REPO_ROOT}}/{{STATUS_FILE}}
169
+ on_fail: stop
170
+
171
+ - id: draft_ci
172
+ description: Confirm draft CI is green or otherwise acceptable for promotion.
173
+ phase: verification
174
+ command: >
175
+ {{DRAFT_CI_COMMAND}}
176
+ working_dir: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ROOT}}
177
+ pass:
178
+ exit_codes: [0]
179
+ stdout_must_contain:
180
+ - {{DRAFT_CI_PASS_TOKEN}}
181
+ evidence:
182
+ include_stdout: true
183
+ include_stderr: true
184
+ paths:
185
+ - {{TARGET_REPO_ROOT}}/{{STATUS_FILE}}
186
+ on_fail: mark_blocked
187
+
188
+ - id: ready_for_review
189
+ description: Confirm the PR can move from draft to ready-for-review.
190
+ phase: verification
191
+ command: >
192
+ {{READY_FOR_REVIEW_COMMAND}}
193
+ working_dir: {{TARGET_REPO_ROOT}}/{{ISSUE_SMASHERS_ROOT}}
194
+ pass:
195
+ exit_codes: [0]
196
+ stdout_must_contain:
197
+ - {{READY_FOR_REVIEW_PASS_TOKEN}}
198
+ evidence:
199
+ include_stdout: true
200
+ include_stderr: true
201
+ paths:
202
+ - {{TARGET_REPO_ROOT}}/{{STATUS_FILE}}
203
+ on_fail: mark_blocked
204
+
205
+ profiles:
206
+ issue_smashers_watch_select:
207
+ description: Choose a candidate lane and record why it belongs in the workspace.
208
+ mode: collaboration
209
+ packet_kind: pr
210
+ gate_ids:
211
+ - watch_select
212
+
213
+ issue_smashers_pre_open:
214
+ description: Viability and overlap checks before implementation or draft creation.
215
+ mode: collaboration
216
+ packet_kind: pr
217
+ gate_ids:
218
+ - viability_gate
219
+ - overlap_gate
220
+
221
+ issue_smashers_local_readiness:
222
+ description: Local verification, same-head freeze, and PR-body hygiene before draft open/update.
223
+ mode: collaboration
224
+ packet_kind: pr
225
+ gate_ids:
226
+ - local_gate
227
+ - ready_to_draft
228
+ - pr_body_preflight
229
+
230
+ issue_smashers_draft_transition:
231
+ description: Open or update the draft PR once the readiness chain has passed.
232
+ mode: collaboration
233
+ packet_kind: pr
234
+ gate_ids:
235
+ - draft_pr_transition
236
+
237
+ issue_smashers_draft_lifecycle:
238
+ description: Draft CI and ready-for-review checks after a draft PR exists.
239
+ mode: collaboration
240
+ packet_kind: pr
241
+ gate_ids:
242
+ - draft_ci
243
+ - ready_for_review
244
+
245
+ issue_smashers_full_flow:
246
+ description: End-to-end issue-smashers lifecycle from watch/select through ready-for-review.
247
+ mode: collaboration
248
+ packet_kind: pr
249
+ gate_ids:
250
+ - watch_select
251
+ - viability_gate
252
+ - overlap_gate
253
+ - local_gate
254
+ - ready_to_draft
255
+ - pr_body_preflight
256
+ - draft_pr_transition
257
+ - draft_ci
258
+ - ready_for_review
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { spawnSync } = require("child_process");
4
+
5
+ function firstAvailable(candidates) {
6
+ for (const cmd of candidates) {
7
+ const probe = spawnSync(cmd, ["--version"], { encoding: "utf8" });
8
+ if (!probe.error && probe.status === 0) {
9
+ return cmd;
10
+ }
11
+ }
12
+ return null;
13
+ }
14
+
15
+ const pythonCandidates = process.platform === "win32" ? ["py", "python", "python3"] : ["python3", "python"];
16
+ const py = firstAvailable(pythonCandidates);
17
+
18
+ if (!py) {
19
+ console.warn("[orp] warning: Python 3 not found on PATH.");
20
+ console.warn("[orp] install Python 3 to use the `orp` CLI binary.");
21
+ process.exit(0);
22
+ }
23
+
24
+ const yamlCheckArgs = py === "py" ? ["-3", "-c", "import yaml"] : ["-c", "import yaml"];
25
+ const yamlCheck = spawnSync(py, yamlCheckArgs, { encoding: "utf8" });
26
+
27
+ if (yamlCheck.error || yamlCheck.status !== 0) {
28
+ console.warn("[orp] warning: PyYAML not detected in your Python environment.");
29
+ console.warn("[orp] run: python3 -m pip install pyyaml");
30
+ }
31
+
package/scripts/orp ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env sh
2
+ set -eu
3
+
4
+ SCRIPT_PATH="$0"
5
+ case "$SCRIPT_PATH" in
6
+ */*) : ;;
7
+ *) SCRIPT_PATH="$(command -v "$SCRIPT_PATH" 2>/dev/null || printf '%s' "$SCRIPT_PATH")" ;;
8
+ esac
9
+
10
+ ROOT_DIR="$(cd "$(dirname "$SCRIPT_PATH")/.." && pwd)"
11
+ exec python3 "$ROOT_DIR/cli/orp.py" "$@"