Skip to content

Commit 92df9bc

Browse files
committed
coordination: agent-x5p2 backfill issue loopx-project#6710 and PR loopx-project#6716
Signed-off-by: JasonBuildAI <jasonbuildai@gmail.com>
1 parent 9473fe9 commit 92df9bc

18 files changed

Lines changed: 853 additions & 0 deletions

‎.codex-coordination/claims.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,4 @@
9393
- coordination: agent-c8v3 | 2026-10-17T04:49:28Z | follow-up: PR #6712 head amended in place (no reviewer comment existed) 772bfed09 -> 878a21249053152c413e800878cd8f9e31dff365 after an independent adversarial subagent review with no blocker. Findings resolved: (1) the discovery regression test was inert (the bare python candidate is appended unconditionally, so any PATH satisfied it) and was replaced by one that puts a stub python3.exe plus python3.12.exe and python.exe on a fixture PATH and asserts the exact list ["python3","python3.12.exe","python"]; it fails on the parent sources and passes at the amended head; (2) README/source comment now say the bare python name is resolved when the candidate is run rather than being a PATH scan result; (3) PR body now discloses the changed failure mode of tests/admission-closeout.integration.spec.ts on Windows (it resolves its interpreter from process.env, so it now finds python and runs to its own 90s bound instead of failing fast with "requires Python 3.11+"; it runs only on the Linux lane and fails either way), the two differing pre-change baseline counts (182/14 and 183/13, the difference being the timing-flaky cli.spec child-close assertion), and the remaining gap that resolveLoopXCommand builds its module fallback from bare names only. Re-verified at the amended head: whole plugin suite 188 passed / 8 failed / 196 on native Windows with no newly failing test name, typecheck and peer-range smoke green, dsh-plugin ubuntu-latest lane green and windows-latest re-running. Still not self-merged (host bootstrap/installer behavior, maintainer review required).
9494
- coordination: agent-x2p8 | 2026-10-17T04:50:42Z | head backfill: PR #6709 now carries commit a786ed7cb (test hardening: the child decodes the CLI event sample with its resolved default codec and the case skips with the resolved codec named where the hazard cannot be shown, instead of asserting only != utf-8); product commits unchanged, still fork-branch only, not self-merged (control-plane runtime behavior, maintainer review required). Independent agent review: APPROVE WITH NOTES; the f6b4280d2 revision and this head reproduce the reviewer numbers; the os.fdopen pins are gate-rule-only protection (reverting both leaves the suite green while the gate reports codex_agent_session.py:173, codex_checkpoint.py:415); the PR and issue now scope the reach to the benchmark/runtime callers.
9595
- coordination: agent-c8v3 | 2026-10-17T04:56:13Z | PR #6712 rebased onto the current main head (cd148933bb0cb00232cb3cc494f898a171ffe36c) so the branch is no longer BEHIND: 878a21249 -> 586051255d47a41dd00cb6daa060249ba43e5b5e. The change patch is byte-identical across the rebase (git diff <merge-base> HEAD hashed to 3e08ad4086bd05ffdeb16ea4727030694b28ac0e before and after), no reviewer comment existed, and the two upstream commits in that range touch no plugin file. Re-verified at the rebased head: focused regression files show only the 4 disclosed pre-existing Windows-host failures (55 passed / 4 failed of 59), and all required checks are green - Sign-off (DCO), mergify Summary, dependency-review, dsh-plugin (ubuntu-latest), dsh-plugin (windows-latest). PR state: MERGEABLE, reviewDecision REVIEW_REQUIRED, not self-merged (host bootstrap/installer behavior, maintainer review required). This claim is closed at this head unless a maintainer asks for more.
96+
- coordination: x5p2 | 2026-10-17T13:05:00Z | claim backfill: issue #6710 opened; PR #6716 opened on loopx-project/loopx (base main, head JasonBuildAI:codex/agent-x5p2, commits 9889d6188 + 97756955e, tested revision 97756955e); branch pushed to the fork only, not self-merged (host tree teardown + canary gate verdict, maintainer review required). Files: loopx/extensions/process_runtime.py,loopx/canary/runner.py,loopx/capabilities/issue_fix/acceptance_loop.py,examples/issue-fix-reviewer-recommendation-smoke.py,examples/issue-fix-reviewer-request-smoke.py,tests/extensions/test_process_runtime.py,tests/canary/test_smoke_fixture_cleanup.py,tests/capabilities/test_issue_fix_temporary_workspace.py. T2 duplicate check at PR time: no open issue or PR touches the read-only fixture teardown; the nearest open work is #6642/#6652 (WinError 32, a live child pins the directory - different root cause, different files) and PR #6691 (UTF-8, different files). Evidence: real single-check runner verdict returncode 0 / status failed / reason fixture-cleanup WinError 5 before -> status passed / failure_count 0 after; full-public sweep of the 33 git-object-writing checks 20 -> 18 failures and read-only-unlink failures 4 -> 0, no pass -> failure regression; examples/issue-fix-workflow-e2e-smoke.py and examples/issue-fix-reviewer-recommendation-smoke.py exit 1 -> 0; pytest facade tests/test_smoke_suite.py 1 failed -> 2 passed; risk_profile_run of loopx canary premerge 3 failures -> 0; ruff clean; 3 remaining tests/canary failures and 4 WinError 32 smoke failures reproduced on the untouched base revision fdf03ec61.

‎.gitignore‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
.DS_Store
22
.venv/
3+
<<<<<<< HEAD
34
.idea
45
node_modules/
56
apps/dashboard/public/*.local.json
@@ -24,10 +25,17 @@ apps/desktop/loopx-control-plane/runtime/
2425
# Local/private operator skills. Generic, reusable contracts belong in docs or
2526
# product code; account-specific creator/operator skills stay outside git.
2627
skills/loopx-social-media/
28+
=======
29+
__pycache__/
30+
*.pyc
31+
.pytest_cache/
32+
.ruff_cache/
33+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)
2734

2835
# Project-local private state. Keep real project paths, task ids, tokens,
2936
# internal logs, and active goal state outside the public repository.
3037
.local/
38+
<<<<<<< HEAD
3139
.loopx/
3240
.goal-harness/
3341
.goal-wrapper.local/
@@ -44,3 +52,7 @@ logs/
4452
# Frontend delivery artifacts are built and qualified from source.
4553
/loopx/web/chat/
4654
/loopx/web/.chat-build-*/
55+
=======
56+
.goal-wrapper.local/
57+
runtime/
58+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)

‎LICENSE‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
<<<<<<< HEAD
12

23
Apache License
34
Version 2.0, January 2004
@@ -200,3 +201,26 @@
200201
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201202
See the License for the specific language governing permissions and
202203
limitations under the License.
204+
=======
205+
MIT License
206+
207+
Copyright (c) 2026 Goal Harness contributors
208+
209+
Permission is hereby granted, free of charge, to any person obtaining a copy
210+
of this software and associated documentation files (the "Software"), to deal
211+
in the Software without restriction, including without limitation the rights
212+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
213+
copies of the Software, and to permit persons to whom the Software is
214+
furnished to do so, subject to the following conditions:
215+
216+
The above copyright notice and this permission notice shall be included in all
217+
copies or substantial portions of the Software.
218+
219+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
220+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
221+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
222+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
223+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
224+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
225+
SOFTWARE.
226+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)

‎README.md‎

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
<<<<<<< HEAD
12
<div align="center">
23

34
<h1 align="center">LoopX</h1>
@@ -812,3 +813,101 @@ terms; the historical text and notice are preserved in
812813
explains the version, contribution, patent-grant, and open-core boundaries.
813814

814815
[osai-verify: eb42dd9cf910399988f0]: #
816+
=======
817+
# Goal Harness
818+
819+
Goal Harness is a lightweight control plane for long-running agent goals. It is
820+
designed to sit above local agent apps, CLI sessions, recurring heartbeats, and
821+
goal-mode runs.
822+
823+
It does not replace an agent or a project-specific workflow. It gives each goal
824+
four durable things:
825+
826+
- a project-local goal state file,
827+
- a registry entry that says where the goal lives and which adapter reads it,
828+
- a shared runtime directory for run logs,
829+
- a read-only contract check before the next agent tick.
830+
831+
## Why
832+
833+
Long-running agent work fails less from a single weak prompt than from drift:
834+
lost next actions, stale assumptions, unclear handoffs, mixed project state,
835+
and unreviewed private data. Goal Harness keeps those boundaries explicit.
836+
837+
## Recommended Layout
838+
839+
Use one local checkout as the shared base:
840+
841+
```bash
842+
git clone <your-fork-or-repo-url> ~/goal-harness
843+
python3 -m pip install -e ~/goal-harness
844+
```
845+
846+
Each project keeps its own private state and thin adapter:
847+
848+
```text
849+
project/
850+
.local/ACTIVE_GOAL_STATE.md # private, not committed
851+
.local/GOAL_HARNESS_REGISTRY.json # private, can contain local paths
852+
scripts/project-pre-tick.py # optional thin adapter
853+
854+
~/.codex/goal-harness/
855+
goals/<goal-id>/runs/index.jsonl # shared runtime history
856+
```
857+
858+
The core code is not copied into every project. Project files call the shared
859+
CLI and keep only project-specific policy, evidence readers, and guards.
860+
861+
## CLI
862+
863+
```bash
864+
goal-harness --registry .local/GOAL_HARNESS_REGISTRY.json registry
865+
goal-harness --registry .local/GOAL_HARNESS_REGISTRY.json history
866+
goal-harness --registry .local/GOAL_HARNESS_REGISTRY.json check --scan-root .
867+
```
868+
869+
JSON output is available for pre-tick integration:
870+
871+
```bash
872+
goal-harness --registry .local/GOAL_HARNESS_REGISTRY.json --format json check --scan-root .
873+
```
874+
875+
The example registry uses `./runtime` on purpose, so demo commands do not read
876+
your real local goal history.
877+
878+
## Integration Model
879+
880+
1. Keep the shared package at one stable local path, usually `~/goal-harness`.
881+
2. Add a private registry in each project.
882+
3. Add or keep a project-specific pre-tick script that calls Goal Harness.
883+
4. Save adapter run logs into `~/.codex/goal-harness/goals/<goal-id>/runs/`.
884+
5. A future UI can read the same runtime root instead of scraping projects.
885+
886+
## Public / Private Boundary
887+
888+
Safe to publish:
889+
890+
- registry schema,
891+
- runtime layout,
892+
- adapter lifecycle,
893+
- generic validation commands,
894+
- sanitized examples.
895+
896+
Keep private:
897+
898+
- real project paths,
899+
- task ids,
900+
- production logs,
901+
- internal document links,
902+
- credentials,
903+
- user-specific active goal state,
904+
- raw experiment metrics.
905+
906+
See [docs/public-private-boundary.md](docs/public-private-boundary.md).
907+
908+
## Current Status
909+
910+
This repository is intentionally small. The first milestone is not a full agent
911+
platform; it is a reliable shared substrate for local goal state, run history,
912+
and contract checks across several projects.
913+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)

‎docs/architecture.md‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Architecture
22

3+
<<<<<<< HEAD
34
LoopX has six durable control-plane layers, plus an optional probe surface
45
whose execution policy requires read-only observation; it is not a peer layer.
56

@@ -20,28 +21,49 @@ The `pre-tick-runnable` adapter status is declared separately and is not inferre
2021
from `next_probe`. There is no shipped `pre_tick` module or adapter pre-tick
2122
package, so keep probe registration, execution policy, and adapter status as
2223
separate contracts.
24+
=======
25+
Goal Harness has five layers.
26+
27+
1. **Registry**: lists known goals, their repos, adapters, status, and guards.
28+
2. **Goal state**: the active state file for one goal.
29+
3. **Adapter pre-tick**: a read-only project-specific probe.
30+
4. **Run log**: JSON and Markdown reports saved per goal.
31+
5. **Run history**: compact indexes consumed by agents, heartbeats, and UI.
32+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)
2333
2434
```text
2535
project goal state
2636
+ private registry
37+
<<<<<<< HEAD
2738
+ optional next_probe
39+
=======
40+
+ project adapter
41+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)
2842
|
2943
v
3044
shared runtime root
3145
|
3246
v
47+
<<<<<<< HEAD
3348
loopx history/check
3449
|
3550
v
3651
loopx status
3752
|
3853
v
3954
quota-aware agent tick / heartbeat / future UI
55+
=======
56+
goal-harness history/check
57+
|
58+
v
59+
agent tick / heartbeat / future UI
60+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)
4061
```
4162

4263
The core repository intentionally avoids domain logic. A data experiment goal,
4364
a note-maintenance goal, and a harness self-improvement goal should share the
4465
same runtime and contract, but use different adapters.
66+
<<<<<<< HEAD
4567

4668
## Control Plane As Effect Interpreter
4769

@@ -435,3 +457,5 @@ dashboard frontend should follow
435457
[dashboard-frontend-selection.md](product/roadmaps/dashboard-frontend-selection.md); the
436458
single-file HTML renderer remains a fallback for smoke tests and offline
437459
inspection.
460+
=======
461+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)

‎docs/integration.md‎

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
# Integration Guide
22

3+
<<<<<<< HEAD
34
LoopX should be used as a shared local base, not copied into every
5+
=======
6+
Goal Harness should be used as a shared local base, not copied into every
7+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)
48
project.
59

610
## Local Base
711

812
Clone or symlink one copy:
913

1014
```bash
15+
<<<<<<< HEAD
1116
git clone <repo-url> ~/loopx
1217
~/loopx/scripts/install-local.sh
1318
loopx doctor
@@ -49,11 +54,16 @@ loopx-canary heartbeat-prompt \
4954
# After canary observation looks healthy, promote the checkout to default.
5055
~/loopx/scripts/install-local.sh
5156
loopx doctor
57+
=======
58+
git clone <repo-url> ~/goal-harness
59+
python3 -m pip install -e ~/goal-harness
60+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)
5261
```
5362

5463
Then projects can call:
5564

5665
```bash
66+
<<<<<<< HEAD
5767
loopx --registry <private-registry> registry
5868
loopx --registry <private-registry> history
5969
loopx --registry <private-registry> status
@@ -317,6 +327,11 @@ work state or local evidence, add them to `.gitignore`:
317327
```gitignore
318328
.loopx/
319329
.loopx/goals/
330+
=======
331+
goal-harness --registry <private-registry> registry
332+
goal-harness --registry <private-registry> history
333+
goal-harness --registry <private-registry> check --scan-root <project-root>
334+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)
320335
```
321336

322337
## Project Adapter
@@ -332,11 +347,16 @@ A project adapter should be thin and project-specific. It may read:
332347
It should output:
333348

334349
- `classification`,
350+
<<<<<<< HEAD
335351
- exactly one `recommended_action` for the local control loop,
352+
=======
353+
- exactly one `recommended_action`,
354+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)
336355
- relevant warnings,
337356
- hard guards,
338357
- optional run log paths.
339358

359+
<<<<<<< HEAD
340360
`recommended_action` is local project state, not a public artifact by default:
341361
it may include private project refs such as todo ids, branch names, local
342362
aliases, or operator-private routing labels. It must not include AK/SK values,
@@ -417,17 +437,27 @@ checks, transfer, and compare-and-swap behavior. Hard leases remain keyed by
417437
`(goal_id, todo_id)`, so unrelated todos under the same goal can still run in
418438
parallel when scopes permit.
419439

440+
=======
441+
By default it should be read-only. Launching jobs, stopping jobs, syncing docs,
442+
or editing production state requires explicit user approval.
443+
444+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)
420445
## Shared Runtime
421446

422447
All adapters should save compact run history under:
423448

424449
```text
450+
<<<<<<< HEAD
425451
~/.loopx/goals/<goal-id>/runs/index.jsonl
452+
=======
453+
~/.codex/goal-harness/goals/<goal-id>/runs/index.jsonl
454+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)
426455
```
427456

428457
This gives the app, CLI, heartbeats, and future UI one place to inspect goal
429458
history.
430459

460+
<<<<<<< HEAD
431461
Project-local registries should also sync into the shared global registry:
432462

433463
```text
@@ -698,15 +728,21 @@ the [status data contract](status-data-contract.md).
698728
Keep adapter output sanitized before it enters the compact index. The status
699729
queue is meant for control-plane display, not for raw private evidence.
700730

731+
=======
732+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)
701733
## Public Repo vs Project Repo
702734

703735
Put generic code here:
704736

705737
- registry and history readers,
706738
- contract checker,
707739
- generic schema and docs,
740+
<<<<<<< HEAD
708741
- sanitized adapter examples,
709742
- peer task and ephemeral worker lifecycle examples.
743+
=======
744+
- sanitized adapter examples.
745+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)
710746
711747
Keep in the project repo:
712748

@@ -715,5 +751,9 @@ Keep in the project repo:
715751
- private registry,
716752
- domain-specific health checks.
717753

754+
<<<<<<< HEAD
718755
This split lets many local projects share one stable LoopX base while
756+
=======
757+
This split lets many local projects share one stable Goal Harness base while
758+
>>>>>>> 7dcdc9dc7 (Initial public goal harness scaffold)
719759
keeping their real evidence and safety policies local.

0 commit comments

Comments
 (0)