Skip to content

Commit 2ba757d

Browse files
authored
[feat] /goal v2 production harden (#55)
* feat(goal): harden persist resume and continuation Co-authored-by: Mathis <echobt@users.noreply.github.com> * test(tui): restore goal event adapter test attribute Co-authored-by: Mathis <echobt@users.noreply.github.com> * ci(test): do not fail job on artifact upload 403 Co-authored-by: Mathis <echobt@users.noreply.github.com> * fix(goal): keep live tmp files and report quarantine Do not delete another process's in-flight goal temp on load. Only drop leftovers whose owner pid is gone. Say so when a corrupt goal.json cannot be moved aside, and dedup evidence across the whole list rather than adjacent pairs only. Co-authored-by: Mathis <echobt@users.noreply.github.com> * test(goal): mark dead-pid helper child mutable Child::wait needs a mutable Child; the unix leftover-temp regression was not compiling under libtest. Co-authored-by: Mathis <echobt@users.noreply.github.com> * fix(goal): never delete temps during goal load Load no longer scans or removes .goal.json.tmp.* files. A concurrent save can keep its in-flight temp, then rename it onto goal.json instead of failing with ENOENT. Co-authored-by: Mathis <echobt@users.noreply.github.com> --------- Co-authored-by: Mathis <echobt@users.noreply.github.com>
1 parent 4d41ef3 commit 2ba757d

27 files changed

Lines changed: 859 additions & 135 deletions

File tree

.github/workflows/ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,14 @@ jobs:
140140
run: python3 scripts/readiness/qa.py
141141
- uses: actions/upload-artifact@v7
142142
if: always()
143+
continue-on-error: true
143144
with:
144145
name: test-performance
145146
path: target/readiness/tests/
146147
retention-days: 30
147148
- uses: actions/upload-artifact@v7
148149
if: always()
150+
continue-on-error: true
149151
with:
150152
name: local-qa
151153
# Diagnostic journals and aggregates remain local to the runner.

CHANGELOG.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
## Unreleased
1111

12-
### Added
13-
- `/goal` long-horizon persisted goals: create/status/pause/resume/clear, `goal.json` on the session, idle continuation within an 8-turn budget, evidence-based `UpdateGoal`, and a composer chip (`#1F4945`). Lock v2 boards cover chip states (active / paused / done / budget / blocked) and slash palette (`/goal` after `/plan`) at 40×12 and 120×40. Live smoke uses `OPENAI_BASE_URL` / `CORTEX_LLM_BASE_URL`, `OPENAI_API_KEY` / `CORTEX_LLM_API_KEY`, and `CORTEX_LLM_MODEL=cx/gpt-6-astra`; without a key the live test SKIP and unit tests still pass.
12+
## 0.1.11
13+
14+
### Changed
15+
- `/goal` production harden: persist is atomic + fsynced; corrupt `goal.json` is quarantined so session resume continues (and the status text says so only when the move succeeded); load never deletes `.goal.json.tmp.*` (a concurrent save's in-flight temp is left alone); `/goal status` is a reserved status token; continuation records a finished turn *then* wrap-up/continues (last remaining turn still runs); `UpdateGoal` complete accepts only `file` / `command` / `test` evidence (globally deduped); status, pause, resume, and resume-on-session print the chip (`Goal · 2/8` / paused / done / budget / blocked). Live smoke still SKIP without a key.
1416
- Hidden `cortex mcp-server --verify` stdio JSON-RPC server (`cortex-verify`) so CI and agents can audit TUI chrome, lock scenes, login product copy, and API error paths offline. Remains `hide = true` until Designer sign-off.
1517

1618
### Changed

0 commit comments

Comments
 (0)