Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ CURRENT PHASE = PHASE 7 / SCAFFOLD COMPATIBILITY

The reconciled main preserves:

- the Python `arkx` operational core;
- the Python operational core, currently implemented under `arkx` with a
canonical `codepro` package facade;
- the public `codepro` CLI;
- the Python regression and validation boundary;
- the TypeScript/API/UI surface;
Expand Down Expand Up @@ -309,7 +310,11 @@ Equivalent module entrypoint:
python -m arkx --help
```

The public product command is `codepro`. The Python implementation namespace remains `arkx` so introducing the CLI does not force an unrelated package-rename migration.
The canonical product and Python package namespace is `codepro`. The existing
implementation remains under `arkx` during the staged migration, which keeps
legacy imports available while the supported public API is migrated and
verified. The `arkx` namespace is a compatibility implementation namespace,
not a separate product identity.

### `codepro inspect`

Expand Down
6 changes: 6 additions & 0 deletions docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ Study Spec v1 adds a pre-execution research-design contract above P0-P6. It vali

The product surface includes a dependency-free `codepro` CLI implemented with the Python standard library. The CLI exposes help, version, doctor, and read-only project inspection. Inspection may query Git and PATH and detect project markers, but it does not invoke executors or execute tasks.

`codepro` is the canonical product and Python package namespace. The current
implementation remains under `src/arkx/` while `src/codepro/` provides the
staged public facade. Legacy `arkx` imports remain available during migration;
the facade does not imply that the wider API or installed-package behavior has
already been qualified. See Decision 0170 for migration criteria and status.

A low-level command environment boundary may execute an explicit argv vector with explicit cwd and timeout. Its output is a `CommandResult` observation only: exit code, stdout, stderr, timeout, duration, and environment error. It does not map process outcomes to task status.

Capability qualification is a separate pure boundary. A runtime executor identity is bindable only when the exact executor version + adapter version has explicit qualification evidence for the required capability. Availability alone is never qualification. Multiple equally qualified available executors are blocked rather than silently ranked.
Expand Down
69 changes: 69 additions & 0 deletions docs/decisions/0170-codepro-canonical-namespace-migration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Decision 0170 — CodePro canonical Python namespace migration

## Status

Direction accepted for staged implementation; local patch is under review.
Independent acceptance is pending, and nothing is released or promoted.

## Decision

`codepro` is the canonical product and Python package namespace. `arkx` is
retained temporarily as a compatibility shim and must not be treated as a
separate product identity.

The migration is staged:

1. implement the canonical package under `codepro`;
2. update internal imports, CLI entry points, packaging metadata, and current
documentation to use `codepro`;
3. retain `arkx` re-exports for the declared compatibility window;
4. test equivalence of the supported public API through both namespaces;
5. deprecate and remove `arkx` only in a separately authorized release.

No implementation or evidence is promoted merely because this decision exists.

## Rationale

The product identity is CodePro, while the current Python namespace is `arkx`.
An atomic rename would break imports, dynamic module references, serialized
objects, manifests, historical evidence, and external scripts without proving
that all consumers had migrated. A compatibility shim preserves continuity
while making the intended namespace explicit.

## Acceptance criteria

- `import codepro` exposes the canonical public API;
- `codepro.__all__` is explicit and tested;
- supported `arkx` imports resolve to the corresponding `codepro` objects;
- `codepro` and `arkx` do not silently expose different behavior;
- the CLI and wheel identify the distribution as `codepro`;
- no claim of completed migration is made until installed-package and source
import tests pass at the same revision;
- removal of the `arkx` shim requires a later decision and release boundary.

## Falsifiable hypothesis

For every symbol in the explicitly supported public API at a given revision,
imports through `codepro` will resolve to the same object and behavior as the
corresponding supported `arkx` import, while importing the facade will not
eagerly load experimental subsystems. The hypothesis is rejected by any
identity/behavior mismatch, an unsupported export appearing in `codepro`, or
an import-boundary test showing an experimental subsystem loaded eagerly.

Local tests can evaluate these source-tree claims only. Installed-wheel
compatibility and independent acceptance remain separate gates; passing local
tests alone does not promote the migration.

## Non-goals

- no redesign of the execution chassis;
- no provider, model, executor, or benchmark qualification;
- no deletion of historical `arkx` evidence;
- no automatic removal of legacy imports.

## Current evidence

The current checkout still has `arkx` as the implementation namespace, while
`codepro` now provides the canonical facade and packaging entry point. The
installed-package and full compatibility gates remain open until a wheel is
built and tested in a clean environment.
176 changes: 176 additions & 0 deletions logs/local-evidence/codepro-local-tests-20261004.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
{
"schema": "codepro-local-verification-evidence/v1",
"evidence_kind": "LOCAL_UNIT_TEST_RUN",
"attempt_id": "95eadf2e-b246-4a5e-83d9-341d7af6600c",
"collected_at": "2026-10-05T02:01:47.007692+00:00",
"workspace": "C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro",
"head_revision": "a42dbbf1dd1dd5f5078249f29713faf9f4d9c083",
"base_revision": "a42dbbf1dd1dd5f5078249f29713faf9f4d9c083",
"branch": null,
"patch_identity": {
"algorithm": "sha256",
"value": "8557788b4f539eefb2292994c437949fe2571607083056169d578fa98d90fb74",
"scope": "staged implementation patch excluding this evidence file"
},
"environment": {
"python": "3.13.15 (tags/v3.13.15:4061bc4, Aug 5 2026, 13:05:39) [MSC v.1944 64 bit (AMD64)]",
"executable": "C:\\Users\\igorb\\AppData\\Local\\Programs\\Python\\Python313\\python.exe",
"platform": "Windows-11-10.0.26300-SP0",
"machine": "AMD64",
"architecture": "64bit"
},
"provider_called": false,
"benchmark_executed": false,
"acceptance": "PENDING_INDEPENDENT_REVIEW",
"promotion": "NOT_PROMOTED",
"results": [
{
"test_file": "test_codepro_namespace.py",
"command": [
"C:\\Users\\igorb\\AppData\\Local\\Programs\\Python\\Python313\\python.exe",
"-m",
"unittest",
"discover",
"-s",
"tests",
"-t",
".",
"-p",
"test_codepro_namespace.py"
],
"returncode": 0,
"status": "PASS",
"stdout": "",
"stderr": "......\n----------------------------------------------------------------------\nRan 6 tests in 0.203s\n\nOK\n"
},
{
"test_file": "test_architecture_boundaries.py",
"command": [
"C:\\Users\\igorb\\AppData\\Local\\Programs\\Python\\Python313\\python.exe",
"-m",
"unittest",
"discover",
"-s",
"tests",
"-t",
".",
"-p",
"test_architecture_boundaries.py"
],
"returncode": 0,
"status": "PASS",
"stdout": "",
"stderr": "....\n----------------------------------------------------------------------\nRan 4 tests in 0.402s\n\nOK\n"
},
{
"test_file": "test_cli.py",
"command": [
"C:\\Users\\igorb\\AppData\\Local\\Programs\\Python\\Python313\\python.exe",
"-m",
"unittest",
"discover",
"-s",
"tests",
"-t",
".",
"-p",
"test_cli.py"
],
"returncode": 0,
"status": "PASS",
"stdout": "",
"stderr": "..............\n----------------------------------------------------------------------\nRan 14 tests in 1.170s\n\nOK\n"
},
{
"test_file": "test_p82_baseline.py",
"command": [
"C:\\Users\\igorb\\AppData\\Local\\Programs\\Python\\Python313\\python.exe",
"-m",
"unittest",
"discover",
"-s",
"tests",
"-t",
".",
"-p",
"test_p82_baseline.py"
],
"returncode": 0,
"status": "PASS",
"stdout": "",
"stderr": ".......................\n----------------------------------------------------------------------\nRan 23 tests in 1.121s\n\nOK\n"
},
{
"test_file": "test_performance_baseline.py",
"command": [
"C:\\Users\\igorb\\AppData\\Local\\Programs\\Python\\Python313\\python.exe",
"-m",
"unittest",
"discover",
"-s",
"tests",
"-t",
".",
"-p",
"test_performance_baseline.py"
],
"returncode": 0,
"status": "PASS",
"stdout": "",
"stderr": "..\n----------------------------------------------------------------------\nRan 2 tests in 0.723s\n\nOK\n"
},
{
"test_file": "test_verification.py",
"command": [
"C:\\Users\\igorb\\AppData\\Local\\Programs\\Python\\Python313\\python.exe",
"-m",
"unittest",
"discover",
"-s",
"tests",
"-t",
".",
"-p",
"test_verification.py"
],
"returncode": 0,
"status": "PASS",
"stdout": "",
"stderr": "................\n----------------------------------------------------------------------\nRan 16 tests in 0.002s\n\nOK\n"
},
{
"test_file": "test_swebench_authority.py",
"command": [
"C:\\Users\\igorb\\AppData\\Local\\Programs\\Python\\Python313\\python.exe",
"-m",
"unittest",
"discover",
"-s",
"tests",
"-t",
".",
"-p",
"test_swebench_authority.py"
],
"returncode": 1,
"status": "BLOCKED",
"stdout": "",
"stderr": "....E...E...E...EEE\n======================================================================\nERROR: test_enriched_record_image_is_idempotently_verified (tests.test_swebench_authority.SWEbenchAuthorityTests.test_enriched_record_image_is_idempotently_verified)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro\\src\\arkx\\swebench_authority.py\", line 177, in derive_harness_instance\n from swebench.task.checks import expected_image\nModuleNotFoundError: No module named 'swebench'\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro\\tests\\test_swebench_authority.py\", line 191, in test_enriched_record_image_is_idempotently_verified\n enriched = derive_harness_instance(raw, source_dataset_id=\"dataset\", revision=\"rev\", fingerprint=\"fp\")\n File \"C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro\\src\\arkx\\swebench_authority.py\", line 180, in derive_harness_instance\n raise RuntimeError(\n f\"cannot derive official image for {instance_id}: {type(error).__name__}: {error}\"\n ) from error\nRuntimeError: cannot derive official image for sympy__sympy-14711: ModuleNotFoundError: No module named 'swebench'\n\n======================================================================\nERROR: test_make_test_spec_accepts_complete_derived_record (tests.test_swebench_authority.SWEbenchAuthorityTests.test_make_test_spec_accepts_complete_derived_record)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro\\tests\\test_swebench_authority.py\", line 237, in test_make_test_spec_accepts_complete_derived_record\n from swebench.harness.utils import make_test_spec\nModuleNotFoundError: No module named 'swebench'\n\n======================================================================\nERROR: test_raw_record_is_explicitly_enriched_with_harness_image (tests.test_swebench_authority.SWEbenchAuthorityTests.test_raw_record_is_explicitly_enriched_with_harness_image)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro\\src\\arkx\\swebench_authority.py\", line 177, in derive_harness_instance\n from swebench.task.checks import expected_image\nModuleNotFoundError: No module named 'swebench'\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro\\tests\\test_swebench_authority.py\", line 156, in test_raw_record_is_explicitly_enriched_with_harness_image\n enriched = derive_harness_instance(\n raw, source_dataset_id=\"dataset\", revision=\"rev\", fingerprint=\"fp\"\n )\n File \"C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro\\src\\arkx\\swebench_authority.py\", line 180, in derive_harness_instance\n raise RuntimeError(\n f\"cannot derive official image for {instance_id}: {type(error).__name__}: {error}\"\n ) from error\nRuntimeError: cannot derive official image for sympy__sympy-14711: ModuleNotFoundError: No module named 'swebench'\n\n======================================================================\nERROR: test_task_repo_is_the_authority_for_the_three_missing_fields (tests.test_swebench_authority.SWEbenchAuthorityTests.test_task_repo_is_the_authority_for_the_three_missing_fields)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro\\tests\\test_swebench_authority.py\", line 221, in test_task_repo_is_the_authority_for_the_three_missing_fields\n enriched = derive_harness_instance_from_task_repo(\n raw, task_repo=root, source_dataset_id=\"dataset\", revision=\"rev\", fingerprint=\"fp\"\n )\n File \"C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro\\src\\arkx\\swebench_authority.py\", line 208, in derive_harness_instance_from_task_repo\n from swebench.task.repo import load_task_repo\nModuleNotFoundError: No module named 'swebench'\n\n======================================================================\nERROR: test_unknown_task_repo_identity_is_blocked (tests.test_swebench_authority.SWEbenchAuthorityTests.test_unknown_task_repo_identity_is_blocked)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro\\tests\\test_swebench_authority.py\", line 247, in test_unknown_task_repo_identity_is_blocked\n derive_harness_instance_from_task_repo(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n raw_harness_record(), task_repo=directory,\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n source_dataset_id=\"dataset\", revision=\"rev\", fingerprint=\"fp\"\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro\\src\\arkx\\swebench_authority.py\", line 208, in derive_harness_instance_from_task_repo\n from swebench.task.repo import load_task_repo\nModuleNotFoundError: No module named 'swebench'\n\n======================================================================\nERROR: test_wrong_image_identity_is_blocked (tests.test_swebench_authority.SWEbenchAuthorityTests.test_wrong_image_identity_is_blocked)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n File \"C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro\\src\\arkx\\swebench_authority.py\", line 177, in derive_harness_instance\n from swebench.task.checks import expected_image\nModuleNotFoundError: No module named 'swebench'\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro\\tests\\test_swebench_authority.py\", line 186, in test_wrong_image_identity_is_blocked\n derive_harness_instance(raw, source_dataset_id=\"dataset\", revision=\"rev\", fingerprint=\"fp\")\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"C:\\Users\\igorb\\.codex\\worktrees\\reconcile-04a-main\\codepro\\src\\arkx\\swebench_authority.py\", line 180, in derive_harness_instance\n raise RuntimeError(\n f\"cannot derive official image for {instance_id}: {type(error).__name__}: {error}\"\n ) from error\nRuntimeError: cannot derive official image for sympy__sympy-14711: ModuleNotFoundError: No module named 'swebench'\n\n----------------------------------------------------------------------\nRan 19 tests in 0.035s\n\nFAILED (errors=6)\n"
}
],
"availability_probes": [
{
"purpose": "diagnose SWE-bench focused test blocker",
"command": [
"py",
"-3.14",
"-c",
"import importlib.util, platform, sys; print(sys.version); print(platform.platform()); print(importlib.util.find_spec('swebench'))"
],
"python": "3.14.7 (tags/v3.14.7:823f032, Aug 5 2026, 10:51:32) [MSC v.1944 64 bit (AMD64)]",
"platform": "Windows-11-10.0.26300-SP0",
"result": "swebench module unavailable (find_spec returned None)",
"interpretation": "BLOCKED_OPTIONAL_DEPENDENCY_NOT_INSTALLED; no install attempted"
}
]
}
Loading
Loading