erdos-problems 0.1.8 → 0.1.10

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.
@@ -0,0 +1,25 @@
1
+ # ORP Agent Integration
2
+
3
+ Use this when an agent is working inside an `erdos-problems` workspace.
4
+
5
+ ## Core Rule
6
+
7
+ Do not let local route progress masquerade as global problem closure.
8
+
9
+ ## Minimum Working Loop
10
+
11
+ 1. select or seed a problem
12
+ 2. sync ORP kit
13
+ 3. sync state
14
+ 4. run preflight
15
+ 5. sync checkpoints
16
+ 6. work the next honest move
17
+
18
+ ## Canonical Artifact Boundary
19
+
20
+ Evidence belongs in:
21
+ - `problems/<id>/`
22
+ - pack artifacts under `packs/`
23
+ - workspace pulls and scaffolds under `.erdos/`
24
+
25
+ Protocol files and ORP templates are process scaffolding only.
package/PROTOCOL.md ADDED
@@ -0,0 +1,36 @@
1
+ # Open Research Protocol
2
+
3
+ `erdos-problems` ships a bundled ORP kit so every workspace can start with the same claim hygiene and verification frame.
4
+
5
+ ## Canonical Truth
6
+
7
+ - Public problem metadata comes from the upstream Erdős snapshot plus the local canonical dossier.
8
+ - Pack context, route packets, and workspace state guide the loop but do not silently upgrade global problem status.
9
+ - ORP process files are protocol tools, not mathematical evidence.
10
+
11
+ ## Claim Levels
12
+
13
+ - `Exact`
14
+ - `Verified`
15
+ - `Heuristic`
16
+ - `Conjecture`
17
+
18
+ When unsure, downgrade rather than overclaim.
19
+
20
+ ## Required Discipline
21
+
22
+ - keep open problem / active route / route breakthrough / problem solved distinct
23
+ - record verification hooks for exact or verified claims
24
+ - preserve failed paths as useful artifacts, not invisible dead ends
25
+ - keep route claims tied to canonical dossier and pack artifacts
26
+
27
+ ## Workspace ORP Kit
28
+
29
+ The CLI syncs this protocol into `.erdos/orp/`:
30
+ - `PROTOCOL.md`
31
+ - `AGENT_INTEGRATION.md`
32
+ - `templates/CLAIM.md`
33
+ - `templates/VERIFICATION_RECORD.md`
34
+ - `templates/FAILED_TOPIC.md`
35
+
36
+ Use `erdos orp sync` to refresh the workspace copy explicitly.
package/README.md CHANGED
@@ -18,6 +18,7 @@ Official binary:
18
18
 
19
19
  - atlas layer with canonical local `problems/<id>/problem.yaml` records
20
20
  - bundled upstream snapshot from `teorth/erdosproblems`
21
+ - bundled ORP kit with protocol and templates for claim hygiene
21
22
  - workspace `.erdos/` state for active-problem selection, upstream refreshes, scaffolds, and pull bundles
22
23
  - sunflower cluster as the first deep harness pack
23
24
  - quartet-aware sunflower context for `20`, `536`, `856`, and `857`
@@ -44,13 +45,14 @@ erdos dossier show 857
44
45
  For an unseeded problem, the one-step self-seeding flow is now:
45
46
 
46
47
  ```bash
47
- erdos seed problem 25 --include-site --cluster number-theory
48
+ erdos seed problem 25 --cluster number-theory
48
49
  erdos problem show 25
49
50
  erdos workspace show
50
51
  ```
51
52
 
52
53
  What `bootstrap` does:
53
54
  - sets the active workspace problem
55
+ - syncs the bundled ORP workspace kit into `.erdos/orp/`
54
56
  - scaffolds the canonical dossier files into `.erdos/scaffolds/<id>/`
55
57
  - includes the upstream record when a bundled or workspace snapshot is available
56
58
  - copies pack-specific context and compute packets when the problem has them
@@ -58,14 +60,19 @@ What `bootstrap` does:
58
60
 
59
61
  What `seed` does:
60
62
  - creates a pull bundle for any problem in the upstream snapshot
63
+ - defaults to a live site snapshot plus a public-search review bundle
64
+ - treats a problem as seed-admissible only when the public site says `open`, unless you intentionally pass `--allow-non-open`
61
65
  - promotes that bundle into `.erdos/seeded-problems/<id>/`
62
66
  - auto-selects the problem in the workspace
67
+ - syncs the bundled ORP workspace kit into `.erdos/orp/`
63
68
  - syncs the staged research loop state and checkpoint shelf
64
69
  - makes the new dossier visible to the atlas commands immediately inside that workspace
65
70
  - writes richer starter artifacts:
66
71
  - `AGENT_START.md`
67
72
  - `ROUTES.md`
68
73
  - `CHECKPOINT_NOTES.md`
74
+ - `PUBLIC_STATUS_REVIEW.md`
75
+ - `AGENT_WEBSEARCH_BRIEF.md`
69
76
 
70
77
  ## Pull lanes
71
78
 
@@ -75,7 +82,7 @@ For any problem number in the upstream snapshot, you can create a workspace bund
75
82
  erdos pull problem 857
76
83
  erdos pull artifacts 857
77
84
  erdos pull literature 857
78
- erdos pull problem 999 --include-site
85
+ erdos pull problem 999 --include-site --include-public-search
79
86
  erdos pull problem 999 --refresh-upstream
80
87
  ```
81
88
 
@@ -88,6 +95,10 @@ What the pull lanes do:
88
95
  - `erdos pull literature <id>` creates only the literature lane
89
96
  - when a problem is locally seeded, the artifact lane includes the canonical dossier, pack context, and compute packets
90
97
  - when `--include-site` is used, the literature lane can include a live site snapshot and plain-text extract
98
+ - when `--include-public-search` is used, the literature lane also includes:
99
+ - `PUBLIC_STATUS_REVIEW.md`
100
+ - `PUBLIC_STATUS_REVIEW.json`
101
+ - `AGENT_WEBSEARCH_BRIEF.md`
91
102
 
92
103
  ## Maintainer seeding
93
104
 
@@ -112,6 +123,9 @@ What maintainer seeding does:
112
123
  - `AGENT_START.md`
113
124
  - `ROUTES.md`
114
125
  - `CHECKPOINT_NOTES.md`
126
+ - public-truth starter files:
127
+ - `PUBLIC_STATUS_REVIEW.md`
128
+ - `AGENT_WEBSEARCH_BRIEF.md`
115
129
  - preserves upstream/site provenance in the local record
116
130
 
117
131
  ## Sunflower pack
@@ -143,6 +157,27 @@ erdos sunflower status 857 --json
143
157
  - problem-solved distinction
144
158
  - compute posture when a packet exists
145
159
 
160
+ ## ORP
161
+
162
+ `erdos-problems` now ships a bundled Open Research Protocol kit:
163
+ - `PROTOCOL.md`
164
+ - `AGENT_INTEGRATION.md`
165
+ - `templates/CLAIM.md`
166
+ - `templates/VERIFICATION_RECORD.md`
167
+ - `templates/FAILED_TOPIC.md`
168
+
169
+ Workspace copy:
170
+ - `.erdos/orp/PROTOCOL.md`
171
+ - `.erdos/orp/AGENT_INTEGRATION.md`
172
+ - `.erdos/orp/templates/`
173
+
174
+ Useful ORP commands:
175
+
176
+ ```bash
177
+ erdos orp show
178
+ erdos orp sync
179
+ ```
180
+
146
181
  ## CLI
147
182
 
148
183
  ```bash
@@ -158,6 +193,8 @@ erdos problem artifacts 857 --json
158
193
  erdos cluster list
159
194
  erdos cluster show sunflower
160
195
  erdos workspace show
196
+ erdos orp show
197
+ erdos orp sync
161
198
  erdos sunflower status 857
162
199
  erdos sunflower status --json
163
200
  erdos dossier show
@@ -167,7 +204,7 @@ erdos upstream diff
167
204
  erdos scaffold problem 857
168
205
  erdos bootstrap problem 857
169
206
  erdos bootstrap problem 857 --sync-upstream
170
- erdos seed problem 25 --include-site --cluster number-theory
207
+ erdos seed problem 25 --cluster number-theory
171
208
  erdos pull problem 857
172
209
  erdos pull artifacts 857
173
210
  erdos pull literature 857
@@ -195,6 +232,8 @@ Many seeded dossiers now also carry starter-loop artifacts:
195
232
  - `AGENT_START.md`
196
233
  - `ROUTES.md`
197
234
  - `CHECKPOINT_NOTES.md`
235
+ - `PUBLIC_STATUS_REVIEW.md`
236
+ - `AGENT_WEBSEARCH_BRIEF.md`
198
237
 
199
238
  The CLI can surface these directly:
200
239
  - `erdos problem artifacts <id>` shows the canonical inventory
@@ -210,6 +249,7 @@ For sunflower problems, the CLI also surfaces pack-specific artifacts:
210
249
  - per-problem context files under `packs/sunflower/problems/<id>/`
211
250
  - route packets and checkpoint/report packets for `20` and `857`
212
251
  - compute packets under `packs/sunflower/compute/<id>/` when available
252
+ - compute-governance evaluation under `breakthroughs`, surfaced through `erdos sunflower status`
213
253
 
214
254
  ## Notes
215
255
 
@@ -242,6 +282,9 @@ This runtime writes:
242
282
  - `.erdos/QUESTION-LEDGER.md`
243
283
  - `.erdos/checkpoints/CHECKPOINTS.md`
244
284
  - `.erdos/checkpoints/CHECKPOINTS.json`
285
+ - `.erdos/orp/PROTOCOL.md`
286
+ - `.erdos/orp/AGENT_INTEGRATION.md`
287
+ - `.erdos/orp/templates/`
245
288
  - `.erdos/registry/preflight/`
246
289
 
247
290
  The public package uses the same status ladder we settled on in the lab:
@@ -11,24 +11,30 @@ Workspace runtime files live under `.erdos/`:
11
11
  - `QUESTION-LEDGER.md`
12
12
  - `checkpoints/CHECKPOINTS.md`
13
13
  - `checkpoints/CHECKPOINTS.json`
14
+ - `orp/PROTOCOL.md`
15
+ - `orp/AGENT_INTEGRATION.md`
16
+ - `orp/templates/`
14
17
  - `registry/preflight/`
15
18
  - `registry/compute/`
16
19
 
17
20
  ## Core loop
18
21
 
19
22
  1. Select or bootstrap a problem.
20
- 2. Sync state.
21
- 3. Run preflight.
22
- 4. Set continuation mode.
23
- 5. Sync checkpoints.
24
- 6. Pull or scaffold artifacts.
25
- 7. Work the active route.
26
- 8. Sync checkpoints again at honest boundaries.
23
+ 2. Sync ORP.
24
+ 3. Sync state.
25
+ 4. Run preflight.
26
+ 5. Set continuation mode.
27
+ 6. Sync checkpoints.
28
+ 7. Pull or scaffold artifacts.
29
+ 8. Review public status and agent websearch brief if the problem was freshly seeded.
30
+ 9. Work the active route.
31
+ 10. Sync checkpoints again at honest boundaries.
27
32
 
28
33
  ## Commands
29
34
 
30
35
  ```bash
31
36
  erdos problem use 857
37
+ erdos orp sync
32
38
  erdos state sync
33
39
  erdos preflight
34
40
  erdos continuation use route
@@ -39,7 +45,7 @@ erdos workspace show
39
45
  For problems that are not yet packaged as native dossiers, the loop can start with one-step self-seeding:
40
46
 
41
47
  ```bash
42
- erdos seed problem 25 --include-site --cluster number-theory
48
+ erdos seed problem 25 --cluster number-theory
43
49
  erdos preflight
44
50
  erdos continuation use route
45
51
  erdos checkpoints sync
@@ -51,6 +57,20 @@ The seeded dossier now also includes starter-loop artifacts:
51
57
  - `AGENT_START.md`
52
58
  - `ROUTES.md`
53
59
  - `CHECKPOINT_NOTES.md`
60
+ - `PUBLIC_STATUS_REVIEW.md`
61
+ - `AGENT_WEBSEARCH_BRIEF.md`
62
+
63
+ The ORP kit travels with the workspace too:
64
+ - `PROTOCOL.md`
65
+ - `AGENT_INTEGRATION.md`
66
+ - `templates/CLAIM.md`
67
+ - `templates/VERIFICATION_RECORD.md`
68
+ - `templates/FAILED_TOPIC.md`
69
+
70
+ For sunflower compute lanes, ORP now sits above `breakthroughs`:
71
+ - `erdos sunflower status <id>` evaluates the packaged compute lane with `breakthroughs`
72
+ - the CLI surfaces the selected rung, dispatch action, and the reason compute is admissible
73
+ - this is compute governance and traceability, not an automatic compute launch
54
74
 
55
75
  ## Status ladder
56
76
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "erdos-problems",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "CLI atlas and staged research harness for Paul Erdos problems.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -9,12 +9,15 @@
9
9
  "files": [
10
10
  "README.md",
11
11
  "LICENSE",
12
+ "PROTOCOL.md",
13
+ "AGENT_INTEGRATION.md",
12
14
  "bin",
13
15
  "data",
14
16
  "docs",
15
17
  "packs",
16
18
  "problems",
17
- "src"
19
+ "src",
20
+ "templates"
18
21
  ],
19
22
  "scripts": {
20
23
  "test": "node --test",
@@ -28,6 +31,7 @@
28
31
  "sunflower"
29
32
  ],
30
33
  "dependencies": {
34
+ "breakthroughs": "^0.1.1",
31
35
  "yaml": "^2.8.3"
32
36
  },
33
37
  "license": "MIT"
package/src/cli/index.js CHANGED
@@ -4,6 +4,7 @@ import { runClusterCommand } from '../commands/cluster.js';
4
4
  import { runContinuationCommand } from '../commands/continuation.js';
5
5
  import { runDossierCommand } from '../commands/dossier.js';
6
6
  import { runMaintainerCommand } from '../commands/maintainer.js';
7
+ import { runOrpCommand } from '../commands/orp.js';
7
8
  import { runPreflightCommand } from '../commands/preflight.js';
8
9
  import { runProblemCommand } from '../commands/problem.js';
9
10
  import { runPullCommand } from '../commands/pull.js';
@@ -26,6 +27,8 @@ function printUsage() {
26
27
  console.log(' erdos cluster list');
27
28
  console.log(' erdos cluster show <name>');
28
29
  console.log(' erdos workspace show');
30
+ console.log(' erdos orp show [--json]');
31
+ console.log(' erdos orp sync [--json]');
29
32
  console.log(' erdos state sync [--json]');
30
33
  console.log(' erdos state show [--json]');
31
34
  console.log(' erdos continuation show [--json]');
@@ -39,11 +42,11 @@ function printUsage() {
39
42
  console.log(' erdos upstream diff [--write-package-report]');
40
43
  console.log(' erdos scaffold problem <id> [--dest <path>]');
41
44
  console.log(' erdos bootstrap problem <id> [--dest <path>] [--sync-upstream]');
42
- console.log(' erdos seed problem <id> [--include-site] [--refresh-upstream] [--cluster <name>] [--repo-status <status>] [--harness-depth <depth>] [--title <title>] [--family-tag <tag>] [--related <id>] [--formalization-status <status>] [--active-route <route>] [--route-breakthrough] [--problem-solved] [--dest-root <path>] [--no-activate] [--no-loop-sync] [--force] [--json]');
43
- console.log(' erdos pull problem <id> [--dest <path>] [--include-site] [--refresh-upstream]');
45
+ console.log(' erdos seed problem <id> [--include-site|--no-site] [--include-public-search|--no-public-search] [--refresh-upstream] [--cluster <name>] [--repo-status <status>] [--harness-depth <depth>] [--title <title>] [--family-tag <tag>] [--related <id>] [--formalization-status <status>] [--active-route <route>] [--route-breakthrough] [--problem-solved] [--allow-non-open] [--dest-root <path>] [--no-activate] [--no-loop-sync] [--force] [--json]');
46
+ console.log(' erdos pull problem <id> [--dest <path>] [--include-site] [--include-public-search] [--refresh-upstream]');
44
47
  console.log(' erdos pull artifacts <id> [--dest <path>] [--refresh-upstream]');
45
- console.log(' erdos pull literature <id> [--dest <path>] [--include-site] [--refresh-upstream]');
46
- console.log(' erdos maintainer seed problem <id> [--from-pull <path>] [--dest-root <path>] [--cluster <name>]');
48
+ console.log(' erdos pull literature <id> [--dest <path>] [--include-site] [--include-public-search] [--refresh-upstream]');
49
+ console.log(' erdos maintainer seed problem <id> [--from-pull <path>] [--dest-root <path>] [--cluster <name>] [--allow-non-open]');
47
50
  }
48
51
 
49
52
  const args = process.argv.slice(2);
@@ -59,6 +62,8 @@ if (!command || command === 'help' || command === '--help') {
59
62
  exitCode = runClusterCommand(rest);
60
63
  } else if (command === 'workspace') {
61
64
  exitCode = runWorkspaceCommand(rest);
65
+ } else if (command === 'orp') {
66
+ exitCode = runOrpCommand(rest);
62
67
  } else if (command === 'state') {
63
68
  exitCode = runStateCommand(rest);
64
69
  } else if (command === 'continuation') {
@@ -1,6 +1,7 @@
1
1
  import path from 'node:path';
2
2
  import { getProblem } from '../atlas/catalog.js';
3
3
  import { syncCheckpoints } from '../runtime/checkpoints.js';
4
+ import { syncOrpWorkspaceKit } from '../runtime/orp.js';
4
5
  import { scaffoldProblem } from '../runtime/problem-artifacts.js';
5
6
  import { getWorkspaceProblemScaffoldDir } from '../runtime/paths.js';
6
7
  import { syncState } from '../runtime/state.js';
@@ -68,6 +69,7 @@ export async function runBootstrapCommand(args) {
68
69
  console.log(`Workspace upstream snapshot refreshed: ${syncResult.workspacePaths.manifestPath}`);
69
70
  }
70
71
 
72
+ const orp = syncOrpWorkspaceKit();
71
73
  setCurrentProblem(problem.problemId);
72
74
  const destination = parsed.destination
73
75
  ? path.resolve(parsed.destination)
@@ -81,6 +83,7 @@ export async function runBootstrapCommand(args) {
81
83
  console.log(`Active route: ${state.activeRoute ?? '(none)'}`);
82
84
  console.log(`Scaffold dir: ${result.destination}`);
83
85
  console.log(`Artifacts copied: ${result.copiedArtifacts.length}`);
86
+ console.log(`ORP protocol: ${orp.protocolPath}`);
84
87
  console.log(`Upstream record included: ${result.inventory.upstreamRecordIncluded ? 'yes' : 'no'}`);
85
88
  console.log(`Checkpoint shelf: ${checkpoints.indexPath}`);
86
89
  console.log(`Next honest move: ${state.nextHonestMove}`);
@@ -1,4 +1,5 @@
1
1
  import { syncCheckpoints } from '../runtime/checkpoints.js';
2
+ import { syncOrpWorkspaceKit } from '../runtime/orp.js';
2
3
 
3
4
  export function runCheckpointsCommand(args) {
4
5
  const [subcommand, ...rest] = args;
@@ -21,6 +22,7 @@ export function runCheckpointsCommand(args) {
21
22
  return 1;
22
23
  }
23
24
 
25
+ syncOrpWorkspaceKit();
24
26
  const result = syncCheckpoints();
25
27
  if (asJson) {
26
28
  console.log(JSON.stringify(result, null, 2));
@@ -21,6 +21,7 @@ function parseMaintainerSeedArgs(args) {
21
21
  activeRoute: null,
22
22
  routeBreakthrough: false,
23
23
  problemSolved: false,
24
+ allowNonOpen: false,
24
25
  force: false,
25
26
  };
26
27
 
@@ -116,6 +117,10 @@ function parseMaintainerSeedArgs(args) {
116
117
  parsed.problemSolved = true;
117
118
  continue;
118
119
  }
120
+ if (token === '--allow-non-open') {
121
+ parsed.allowNonOpen = true;
122
+ continue;
123
+ }
119
124
  if (token === '--force') {
120
125
  parsed.force = true;
121
126
  continue;
@@ -131,7 +136,7 @@ export function runMaintainerCommand(args) {
131
136
 
132
137
  if (!subcommand || subcommand === 'help' || subcommand === '--help') {
133
138
  console.log('Usage:');
134
- console.log(' erdos maintainer seed problem <id> [--from-pull <path>] [--dest-root <path>] [--cluster <name>] [--repo-status <status>] [--harness-depth <depth>] [--title <title>] [--family-tag <tag>] [--related <id>] [--formalization-status <status>] [--active-route <route>] [--route-breakthrough] [--problem-solved] [--force]');
139
+ console.log(' erdos maintainer seed problem <id> [--from-pull <path>] [--dest-root <path>] [--cluster <name>] [--repo-status <status>] [--harness-depth <depth>] [--title <title>] [--family-tag <tag>] [--related <id>] [--formalization-status <status>] [--active-route <route>] [--route-breakthrough] [--problem-solved] [--allow-non-open] [--force]');
135
140
  return 0;
136
141
  }
137
142
 
@@ -164,6 +169,7 @@ export function runMaintainerCommand(args) {
164
169
  activeRoute: parsed.activeRoute,
165
170
  routeBreakthrough: parsed.routeBreakthrough,
166
171
  problemSolved: parsed.problemSolved,
172
+ allowNonOpen: parsed.allowNonOpen,
167
173
  force: parsed.force,
168
174
  });
169
175
 
@@ -174,6 +180,7 @@ export function runMaintainerCommand(args) {
174
180
  console.log(`Harness depth: ${result.record.harness.depth}`);
175
181
  console.log(`Upstream record used: ${result.usedUpstreamRecord ? 'yes' : 'no'}`);
176
182
  console.log(`Site snapshot used: ${result.usedSiteSnapshot ? 'yes' : 'no'}`);
183
+ console.log(`Public status review used: ${result.usedPublicStatusReview ? 'yes' : 'no'}`);
177
184
  return 0;
178
185
  } catch (error) {
179
186
  console.error(String(error.message ?? error));
@@ -0,0 +1,58 @@
1
+ import { getOrpStatus, syncOrpWorkspaceKit } from '../runtime/orp.js';
2
+
3
+ function printOrpStatus(status) {
4
+ console.log('Open Research Protocol');
5
+ console.log(`Workspace root: ${status.workspaceRoot}`);
6
+ console.log(`Bundled protocol: ${status.bundled.protocolPresent ? status.bundled.protocolPath : '(missing)'}`);
7
+ console.log(`Bundled integration: ${status.bundled.integrationPresent ? status.bundled.integrationPath : '(missing)'}`);
8
+ console.log(`Bundled templates: ${status.bundled.templateNames.join(', ') || '(none)'}`);
9
+ console.log(`Workspace ORP dir: ${status.workspace.orpDir}`);
10
+ console.log(`Workspace protocol: ${status.workspace.protocolPresent ? status.workspace.protocolPath : '(missing)'}`);
11
+ console.log(`Workspace integration: ${status.workspace.integrationPresent ? status.workspace.integrationPath : '(missing)'}`);
12
+ console.log(`Workspace templates: ${status.workspace.templateNames.join(', ') || '(none)'}`);
13
+ }
14
+
15
+ export function runOrpCommand(args) {
16
+ const [subcommand, ...rest] = args;
17
+ const asJson = rest.includes('--json');
18
+ const unknown = rest.filter((arg) => arg !== '--json');
19
+
20
+ if (!subcommand || subcommand === 'help' || subcommand === '--help') {
21
+ console.log('Usage:');
22
+ console.log(' erdos orp show [--json]');
23
+ console.log(' erdos orp sync [--json]');
24
+ return 0;
25
+ }
26
+
27
+ if (unknown.length > 0) {
28
+ console.error(`Unknown orp option: ${unknown[0]}`);
29
+ return 1;
30
+ }
31
+
32
+ if (subcommand === 'show') {
33
+ const status = getOrpStatus();
34
+ if (asJson) {
35
+ console.log(JSON.stringify(status, null, 2));
36
+ return 0;
37
+ }
38
+ printOrpStatus(status);
39
+ return 0;
40
+ }
41
+
42
+ if (subcommand === 'sync') {
43
+ const result = syncOrpWorkspaceKit();
44
+ if (asJson) {
45
+ console.log(JSON.stringify(result, null, 2));
46
+ return 0;
47
+ }
48
+ console.log('ORP workspace kit synced');
49
+ console.log(`Workspace ORP dir: ${result.orpDir}`);
50
+ console.log(`Protocol: ${result.protocolPath}`);
51
+ console.log(`Agent integration: ${result.integrationPath}`);
52
+ console.log(`Templates: ${result.templateNames.join(', ') || '(none)'}`);
53
+ return 0;
54
+ }
55
+
56
+ console.error(`Unknown orp subcommand: ${subcommand}`);
57
+ return 1;
58
+ }
@@ -1,4 +1,6 @@
1
1
  import { getProblem, listProblems } from '../atlas/catalog.js';
2
+ import { syncOrpWorkspaceKit } from '../runtime/orp.js';
3
+ import { syncCheckpoints } from '../runtime/checkpoints.js';
2
4
  import { getProblemArtifactInventory } from '../runtime/problem-artifacts.js';
3
5
  import { syncState } from '../runtime/state.js';
4
6
  import { readCurrentProblem, setCurrentProblem } from '../runtime/workspace.js';
@@ -207,10 +209,14 @@ export function runProblemCommand(args) {
207
209
  return 1;
208
210
  }
209
211
  setCurrentProblem(problem.problemId);
210
- const state = syncState();
212
+ syncOrpWorkspaceKit();
213
+ syncState();
214
+ const checkpointResult = syncCheckpoints();
215
+ const state = checkpointResult.state;
211
216
  console.log(`Active problem set to ${problem.problemId} (${problem.title})`);
212
217
  console.log(`Active route: ${state.activeRoute ?? '(none)'}`);
213
218
  console.log(`Next honest move: ${state.nextHonestMove}`);
219
+ console.log(`Checkpoint shelf: ${checkpointResult.indexPath}`);
214
220
  return 0;
215
221
  }
216
222