From 081b6708926a1d7b1af712688a0c1347c9d140a3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 28 Sep 2026 07:13:57 +0900 Subject: [PATCH 1/3] chore(release): open dev at 2.70.0 before releasing 2.69.0 (#6136) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- desktop/src-tauri/Cargo.lock | 2 +- desktop/src-tauri/Cargo.toml | 2 +- desktop/src-tauri/tauri.conf.json | 2 +- package.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/desktop/src-tauri/Cargo.lock b/desktop/src-tauri/Cargo.lock index 320a9a2b840..9bdc7f94b53 100644 --- a/desktop/src-tauri/Cargo.lock +++ b/desktop/src-tauri/Cargo.lock @@ -2551,7 +2551,7 @@ dependencies = [ [[package]] name = "opencodex-desktop" -version = "2.69.0" +version = "2.70.0" dependencies = [ "base64 0.22.1", "dbus", diff --git a/desktop/src-tauri/Cargo.toml b/desktop/src-tauri/Cargo.toml index ed8f57bf1bb..f2af7b8c59c 100644 --- a/desktop/src-tauri/Cargo.toml +++ b/desktop/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "opencodex-desktop" -version = "2.69.0" +version = "2.70.0" description = "OpenCodex desktop shell" authors = ["OpenCodex contributors"] license = "MIT" diff --git a/desktop/src-tauri/tauri.conf.json b/desktop/src-tauri/tauri.conf.json index a3790fcbc8c..da106098a8a 100644 --- a/desktop/src-tauri/tauri.conf.json +++ b/desktop/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "OpenCodex", - "version": "2.69.0", + "version": "2.70.0", "identifier": "com.opencodex.desktop", "build": { "frontendDist": "../ui", diff --git a/package.json b/package.json index 82f92b4f3cc..fbe21ba9e8a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@bitkyc08/opencodex", - "version": "2.69.0", + "version": "2.70.0", "description": "Universal provider proxy for OpenAI Codex & Claude Code — use any LLM with Codex CLI/App/SDK and Claude Code", "type": "module", "main": "./bin/package-main.mjs", From b3d445d8eca9dc27cc8ff397185275f3ca0766b3 Mon Sep 17 00:00:00 2001 From: JUN Date: Mon, 28 Sep 2026 07:24:03 +0900 Subject: [PATCH 2/3] chore(repo): remove agent scratch files and guard against them (#6140) Drop the repo-local .agents skill, the root design-debt.md audit and the train 4 lane _handoff.md notes. repo-hygiene now treats .agents as agent state and rejects tracked design-debt.md or _handoff.md files. --- .../testing-opencodex-management-api/SKILL.md | 120 ------------------ .gitignore | 1 + AGENTS.md | 3 - design-debt.md | 30 ----- .../account-pool/_handoff.md | 17 --- .../bug-hardening/_handoff.md | 15 --- .../260927_release_train_4/gui-ux/_handoff.md | 13 -- .../issue-triage/_handoff.md | 24 ---- .../picker-ca/_handoff.md | 4 - tests/ci-workflows/repo-hygiene.test.ts | 18 ++- 10 files changed, 18 insertions(+), 227 deletions(-) delete mode 100644 .agents/skills/testing-opencodex-management-api/SKILL.md delete mode 100644 design-debt.md delete mode 100644 devlog/_plan/260927_release_train_4/account-pool/_handoff.md delete mode 100644 devlog/_plan/260927_release_train_4/bug-hardening/_handoff.md delete mode 100644 devlog/_plan/260927_release_train_4/gui-ux/_handoff.md delete mode 100644 devlog/_plan/260927_release_train_4/issue-triage/_handoff.md delete mode 100644 devlog/_plan/260927_release_train_4/picker-ca/_handoff.md diff --git a/.agents/skills/testing-opencodex-management-api/SKILL.md b/.agents/skills/testing-opencodex-management-api/SKILL.md deleted file mode 100644 index 60f5453a2b6..00000000000 --- a/.agents/skills/testing-opencodex-management-api/SKILL.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -name: testing-opencodex-management-api -description: Exercise the OpenCodex management API in a disposable, isolated development environment without touching personal client state. ---- - -# Testing the OpenCodex management API - -## Isolation is a prerequisite - -Use a disposable OS account, container, or VM with a disposable OS home. Do not run this -recipe in your normal desktop account merely by changing `OPENCODEX_HOME`. -That variable relocates OpenCodex state, not every client or shell integration. -On macOS, even disabling `claudeCode.systemEnv` can remove an existing managed block -from the OS home's `.zshrc`; `CLAUDE_CONFIG_DIR` does not redirect that file. -Raycast integration can also update existing OpenCodex-owned entries under the OS home. -A temporary client directory alone is therefore not a complete isolation boundary. - -Within the disposable environment, allocate a unique scratch directory and set `HOME` -to a fresh directory inside it before startup. A `HOME` override in a normal desktop -account is not a substitute for the disposable account, container, or VM. Set all of -`OPENCODEX_HOME`, `CODEX_HOME`, `CODEX_SQLITE_HOME`, `GROK_HOME`, `CLAUDE_CONFIG_DIR`, and -`OPENCODEX_CLAUDE_DESKTOP_CONFIG_DIR` to distinct directories inside it before startup. -Confirm the effective OS home belongs to the disposable account. Do not copy personal -tokens, client configuration, shell profiles, or keychain contents into this environment. -Start from a clean environment or inspect inherited path overrides before launching. -Codex SQLite state resolves in this order: a root `sqlite_home` key in -`CODEX_HOME/config.toml`, then `CODEX_SQLITE_HOME`, then `CODEX_HOME` itself. Keep the -scratch `CODEX_HOME/config.toml` free of an outside `sqlite_home`, resolve the effective -SQLite home with that precedence, and abort unless it is inside the scratch directory. - -Save a scratch `config.json` under `OPENCODEX_HOME` with an unused loopback port: - -```json -{ - "port": 19100, - "hostname": "127.0.0.1", - "codexAutoStart": false, - "syncResumeHistory": false, - "clientIntegrations": {"codex": false, "grok": false, "claude-desktop": false}, - "claudeCode": {"enabled": false, "injectAgents": false, "systemEnv": false} -} -``` - -Use both redirected client homes and integration disables. Disabled integrations may -still remove owned artifacts. `codexAutoStart` alone does not disable startup sync: -desired-state checks also consider integration settings and the hub/loopback-listener -role. Do not depend on any one flag as an isolation boundary. - -## Start and authenticate - -Install the repository's locked development dependencies and use the Bun version named -by `package.json`. Check that the selected Bun executable is available in this shell; -do not assume a particular developer's PATH layout. Start one foreground instance: - -```sh -bun run src/cli/index.ts start --port 19100 -``` - -Avoid `ensure`, tray, and service installation paths for this exercise: they can spawn -detached processes or alter persistent service state. Do not enable live providers or -submit billable traffic unless that separate test is explicitly authorized. - -Prefer reading the scratch instance's generated `admin-api-token` locally. Alternatively, -provision a randomly generated `OPENCODEX_ADMIN_AUTH_TOKEN` used only for this test. -It must differ from every data-plane API key; a collision makes management authentication -unavailable. Never paste the token into a PR, screenshot, log, or tracked fixture. - -Management requests accept `x-opencodex-api-key: ` or -`Authorization: Bearer `. Missing authorization is refused. A valid token -does not bypass route-specific origin, session, or policy requirements. Keep requests -loopback-only and do not follow redirects with credentials. - -## Focused Lab automation exercise - -Read `GET /api/lab/automation` for policy and live scheduler state; inspect recorded runs -with `GET /api/lab/automation/runs`. Enabling automation is an explicit state change, -not a requirement for a basic management-authentication test. - -A policy write uses `PUT /api/lab/automation`, for example: - -```json -{"policy":{"enabled":true,"layers":{"protocolConformance":true}}} -``` - -Serialize policy writes. The read/merge and save do not share one lock, so concurrent -writers can overwrite each other's changes even though publication itself is atomic. -Re-read the policy after changing it. - -A fixture-only manual run uses `POST /api/lab/automation/run` with this request body: - -```json -{"evidenceLayer":"protocol_conformance","scenarioId":"responses-core.protocol.request-shape"} -``` - -For `live_route_compatibility`, include `providerName` and `modelId` in the POST request -body, not as substitute top-level configuration fields. The named provider must already -exist in `config.providers`, and live calls require authorization and suitable test -credentials. Lab must also be active at proxy startup: a later policy PUT alone does -not register the live route executor. Enable automation in the disposable home, stop -the foreground proxy, and start it again before a separately authorized live run. -The fixture-only protocol exercise above does not need this restart. Consult -`planManualLabRun` in `src/lab/automation/planner.ts` for accepted -combinations instead of guessing a scenario or provider. - -The manual endpoint awaits dispatch and returns a run/trigger result. Inspect the returned -status rather than assuming success or a terminal run. Scheduler work is separate and -may not appear immediately; read the configured scheduler limits instead of sleeping for -a hard-coded interval. - -## Stop and inspect - -Send one interrupt to the foreground process and let its bounded cleanup/drain finish. -A clean shutdown exits with zero; cleanup or drain failures may exit nonzero. A second -signal requests forced termination and is not proof of successful cleanup. -Check that the test listener and any test-owned children have stopped before removing -the exact scratch tree. Do not clean directories based on a name pattern or age. -Capture only redacted status, exit code, exact test commands, and observed results. - -This is a development testing recipe. It does not replace the operating reference in -`skills/ocx/` or the consent rules in `AGENTS_INSTALL.md`. diff --git a/.gitignore b/.gitignore index 591b0689646..b07c5979db3 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,7 @@ devlog/**/security-advisory-draft* # becomes tracked again. .codexclaw/ **/.codexclaw/ +.agents/ .omo/ **/.omo/ diff --git a/AGENTS.md b/AGENTS.md index c91d1491740..bf4048b86d5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -214,9 +214,6 @@ bun run skill:surface # regenerate after adding a capability bun run skill:surface:check # what CI asserts ``` -For development tests of the management API, use the isolated -[management API test recipe](./.agents/skills/testing-opencodex-management-api/SKILL.md). - `tests/ci-workflows/skill-ocx.test.ts` fails if the committed map drifts from `src/cli/capabilities.ts`, and also if the hand-written pages name a command the registry does not have. That second check is not hypothetical: it caught a documented `ocx request-history` that never existed. diff --git a/design-debt.md b/design-debt.md deleted file mode 100644 index b6caadf9dd6..00000000000 --- a/design-debt.md +++ /dev/null @@ -1,30 +0,0 @@ -# Scoped design debt - -This audit covers the Meta Muse Responses tool-choice change only. All three modules below were swept against the design-review flags. It records confirmed findings only. - -## Inventory - -| Module | Role | Review | -| --- | --- | --- | -| `src/adapters/openai-responses/muse-tool-choice.ts` | Validates the caller's original and effective selector, then normalizes Muse's final request body. | Swept against the design-review flags. No confirmed findings. | -| `src/adapters/openai-responses/passthrough.ts` | Applies the normalizer at the final Meta Responses body boundary. | Full module swept. No confirmed findings. | -| `src/server/responses/passthrough-dispatch.ts` | Maps the compatibility error to an initial HTTP 400 before dispatch. | Full module swept. No confirmed findings. | - -Provider registry and configuration modules are excluded. The selected design adds no provider -flag or persisted setting. Other adapters, transports, and request-selection paths are outside this -behavior's scope. - -## Confirmed findings - -| ID | Severity | Flag | Evidence | Smallest redesign | Status | -| --- | --- | --- | --- | --- | --- | -| - | - | - | No confirmed findings in the three-module sweep. | - | - | - -Severity counts are S1: 0, S2: 0, S3: 0. No findings were refuted because none were raised. No -security findings are recorded here. - -Audit date: 2026-09-27. Modules swept: 3. Modules inconclusive: 0. - -The nose comparison covered 60 files in Responses normalization and provider registry code. -It retained 109 duplication families, with no new family. One recheck contained two unchanged -streaming accumulator regions whose line locations moved. Both regions were compared with `origin/dev`. diff --git a/devlog/_plan/260927_release_train_4/account-pool/_handoff.md b/devlog/_plan/260927_release_train_4/account-pool/_handoff.md deleted file mode 100644 index 29f972d9e33..00000000000 --- a/devlog/_plan/260927_release_train_4/account-pool/_handoff.md +++ /dev/null @@ -1,17 +0,0 @@ -# Account-pool lane handoff - -## 2026-09-28 successor thread (01a0e37e-5770-7fd1-b4a0-43d3e34747f5) - -The successor took over from thread 01a0e337-eb7e-7ff3-a507-5a360610e3e0 in the same worktree. Remote state was unchanged at pickup: `origin/dev` `24b2f39b77`, #6087 head `480083070a`, all candidate PRs and nine issues open. - -wp0 closed with a second audit round run on gpt-6-sol (see "Audit round 2 and repair" in [000_plan.md](000_plan.md)). The plan now ships two PRs: PR-1 for the #6087 pause carry (gate owned by wp1) and PR-2 for the bounded Antigravity 401/validated-403 slice (gate owned by wp3, cut from `dev` after PR-1 merges). A same-commit verification checkout exists at `/private/tmp/t4-account-pool-verify` with root and `gui` dependencies installed. - -Next: wp1 on branch `codex/t4-account-pool-pause`. - -## 2026-09-28 original thread (stopped) - -Stopped on coordinator instruction on branch `codex/t4-account-pool-roadmap` at base `24b2f39b77`. No PR was opened and no GitHub comment was posted. Round 1 audit returned FAIL with five blockers; the amended plan was not re-audited before the stop. Baseline `bun run typecheck` and `bun run privacy:scan` passed after `bun install --frozen-lockfile`. No proxy was started and no real home files were touched. - -## 2026-09-28 close-out - -#6106 (pause carry of #6087) merged as `555ef68ac6`. PR-2 carries the narrowed #5099 slice on `codex/t4-account-pool-auth-rotation`. The PR and issue comments are listed in [020_desktop.md](020_desktop.md) and in the final lane report. Deferred to the next train: validated-403 rotation (needs a telemetry kind across GUI locales), the Anthropic pool pause (#6013), threshold actions (#5649/#5956), and post-output continuation (#5616). diff --git a/devlog/_plan/260927_release_train_4/bug-hardening/_handoff.md b/devlog/_plan/260927_release_train_4/bug-hardening/_handoff.md deleted file mode 100644 index 18dd11d88db..00000000000 --- a/devlog/_plan/260927_release_train_4/bug-hardening/_handoff.md +++ /dev/null @@ -1,15 +0,0 @@ -# Bug-hardening lane handoff - -Historical (2026-09-27): this is the interrupted session's handoff. Current status and merged SHAs are in [050_disposition_and_ci.md](050_disposition_and_ci.md). - -Stopped on coordinator request. All repository changes are local to `/Users/jun/.codex/worktrees/t4-bug-hardening/opencodex`; no branch was pushed, no lane PR was opened or merged, and no issue or source PR was commented on or closed. The working branch is `codex/t4-bug-hardening-roadmap`, based on last observed `origin/dev` `24b2f39b77`. The docs-first roadmap was committed as `1c2ac3cb79`; the local WIP commit containing this handoff preserves the subsequent P-phase document edits. - -FSM session `01a0e337-e190-7d11-a658-2e9bf733c52f`: `wp0` docs-first cycle closed with reviewer PASS, privacy-scan receipt and criterion `c-1` met. `wp1` B1 adapter bounds is in P; `wp2` NativeTray, `wp3` restart disposition, `wp4` SSH Link, `wp5` assigned-item disposition remain. Coordinator-added `wp6` sibling-home client-sync isolation and `wp7` final dev CI are registered in the goalplan; their 060/070 decade docs have not been written. The original goal remains incomplete. - -Last observed candidate states: #6081 head `8a4399f` is planned as a carry with one parser-owned pre-allocation call cap; #6083 head `ccfb8e63` needs a suffix-width-aware remint cursor. #6082 is planned for a separate Swift carry. #6085 is held after independent review found unsafe restart retry and ambiguous start outcomes. #6076, #5964, #6030, #5831 and #5539 are held for the reasons in `000_plan.md`. #6088 is planned as an SSH argv/diagnostic fix; #4956 and #4761 remain open. These are dispositions, not merged outcomes. - -Local baseline on `24b2f39b77`: adapter focused tests 88 pass; NativeTray executable 53 assertions pass; restart focused tests 45 pass; Link focused tests 36 pass; typecheck and privacy scan exit 0. No production source has been edited. The B1 architect proposed decisions B1-A1–A5 and reflected ALIGNED on the revised `010_adapter_bounds.md`; B1 has not entered independent A audit. - -New sibling-home assignment: read-only trace found current startup discovery uses the second `OPENCODEX_HOME`'s records/configured port, so a second home on a different port can miss the primary and leave the existing sibling write guards unarmed. Another read-only audit found no authoritative cross-home registry for an arbitrary-port foreground primary. No local proxy was started by this lane and no real home file was changed. The coordinator requires any future proxy QA to set temporary `HOME` as well as `OPENCODEX_HOME`/`CODEX_HOME`, preferably disabling client sync. Run `test:changed` or the full suite from a same-commit verification worktree at `/private/tmp/t4-bug-hardening-verify`; do not bypass protected-cleanup guards in the source worktree. Every subagent used in this lane was explicitly `gpt-6-sol`; all are closed. - -Next owner: refresh `origin/dev` and candidate heads; complete the new sibling-home decade docs and choose a safe explicit-home policy, then audit B1, implement adopted fixes in this dedicated worktree, verify from the temporary checkout, and use exact-head CI before any authorized merge. Keep all security pre-disclosure notes in ignored scratch space. Review `000_plan.md`, `010_adapter_bounds.md`, `050_disposition_and_ci.md`, and the other numbered phase docs before acting. diff --git a/devlog/_plan/260927_release_train_4/gui-ux/_handoff.md b/devlog/_plan/260927_release_train_4/gui-ux/_handoff.md deleted file mode 100644 index 510150526b4..00000000000 --- a/devlog/_plan/260927_release_train_4/gui-ux/_handoff.md +++ /dev/null @@ -1,13 +0,0 @@ -# GUI UX lane handoff — final (2026-09-28 KST) - -The lane is closed for release train 4. #6058's routed-model capability editor landed through #6105 (merge `3401e1ee73`), and #6058 was closed with credit. Every other assigned PR and issue has an English disposition comment and stays open. The table is in `040_dispositions.md`. - -For the next train: - -- **#4932.** Start from the audited plan in `020_combo_sidecar.md`, including its four A findings. The next step is B on a fresh branch from `dev`. -- **#5617.** Decide the precedence and the migration and rollback between global and provider visibility before any UI work, then wait for #6106 to settle `Providers.tsx`. -- **Registry enrichment.** Caching it per provider in `listManagementModelRows` was declined on #6105 as a trivial-priority refactor. Revisit it if `/api/models` latency shows up on large rosters. - -For QA, use `.tmp/gui-ux/qa-server.ts` (direct `startServer`, refuses non-isolated homes) with `.tmp/gui-ux/qa-setup.sh`, and Playwright-core in `/private/tmp/t4-gui-ux-pw` driving the system Chrome. `.tmp/gui-ux/real-home-sentinel.sh` hashes the real-home client configs before and after a run; they were unchanged through this lane's QA. - -The Codexclaw FSM for coordinator session `01a0e37e-639d-7693-a2bc-5e4df49fa656` closed `wp1` at D. `wp2` was stopped at A by the scope change, with no B, C or D recorded. diff --git a/devlog/_plan/260927_release_train_4/issue-triage/_handoff.md b/devlog/_plan/260927_release_train_4/issue-triage/_handoff.md deleted file mode 100644 index e52cce3a6c5..00000000000 --- a/devlog/_plan/260927_release_train_4/issue-triage/_handoff.md +++ /dev/null @@ -1,24 +0,0 @@ -# Issue-triage lane handoff — 2026-09-28 KST - -Stopped on coordinator request. All work is local unless the GitHub comment URLs in `040_outcome.md` say otherwise. Do not infer that a PR or CI completed. - -## Current state - -- Dedicated worktree `/Users/jun/.codex/worktrees/t4-issue-triage/opencodex` is checked out on `codex/t4-issue-triage-audit` at `31a2d91d2c3c35766629e779842042c1126f19da` before this handoff commit. It contains the 12 issue and 21 large-PR decisions, five issue comment receipts and 21 PR comment receipts under this directory. No issue or original PR was closed. The last observed `origin/dev` was `24b2f39b77a29711c5064987de169ecf4a97c58b`. -- Local code branch `codex/t4-issue-triage-standalone` is at `08271bdf1cdf2c9f941559b468a5569dfc740e8f`, one commit above that `dev`. It reimplements only #6079's Bun encoded virtual-URL helper fix plus network-host/source-path negatives, focused test, and structure owner map. The commit includes `Co-authored-by: luvs01 <27862058+luvs01@users.noreply.github.com>`. No branch was pushed and this lane created no PR. #6079 itself was last observed open at `9068502a0aa289968129c15705805f729644c05a`; its full Windows feature stays deferred. -- The same-commit detached verification checkout `/private/tmp/t4-issue-triage-verify` is at `08271bdf` with frozen dependencies installed. `bun run test:changed` was stopped on coordinator instruction (exit 143); its partial output reported 1297/1820 selected test files. It is **not a passing check**. No full suite or packaged Windows run was completed. -- The host goal is active and the Codexclaw FSM is in wp3 Build (`B`). The roadmap and issue/PR comment phases (wp0–wp2) are Done; the final integration/report phase remains open. The two Sol subagents were closed. - -## Verified before stop - -- Focused helper test: red before implementation (encoded Windows URL and network-host cases failed), then `bun test tests/lib/standalone.test.ts` **5 pass / 0 fail**. -- `bun run typecheck`, `bun run structure:check`, `bun run privacy:scan`, and whitespace diff check exited 0 on code commit `08271bdf`. Independent Sol implementation review returned PASS, with the explicit limit that helper tests do not prove a packaged Windows app. -- No manual `ocx start` or proxy QA was run in this lane; no user-home client configuration was intentionally changed. - -## Next work for the receiving thread - -1. Recheck `origin/dev`, the code branch, and #6079's latest head. Continue from the code branch without mixing the report docs into its PR. Re-run `test:changed` in `/private/tmp/t4-issue-triage-verify` only after confirming the checkout HEAD equals the code branch commit; retain the seven-lane full-suite resource exception only with truthful PR Verification and exact-head CI. -2. Push the focused code branch, open a `dev` PR using the repository template and the verified coauthor trailer, inspect all required exact-head CI and review findings, rebase/revalidate if `dev` advances, then merge only if every required gate succeeds. Confirm the resulting `dev` CI. Edit the existing [#6079 release decision comment](https://github.com/lidge-jun/opencodex/pull/6079#issuecomment-5857047467) with the carry PR link and thanks; keep #6079 open for its remaining feature. -3. Return to `codex/t4-issue-triage-audit`, update `040_outcome.md` with carry PR/head/merge/CI evidence and comment edit, rebase on fresh `dev`, verify the 12/21 inventories and privacy/diff gates, then push/open/merge a **docs-only** `dev` PR under exact-head CI. This lane has not performed any of these publication steps. - -Potential shared-file collisions for the code PR: `structure/manifest.json` and generated `structure/INDEX.md`. Preserve other lanes' concurrent additions when rebasing. Do not touch the 29 explicitly excluded issues, other lane branches, `main`/`preview`, releases or user-home proxy settings. diff --git a/devlog/_plan/260927_release_train_4/picker-ca/_handoff.md b/devlog/_plan/260927_release_train_4/picker-ca/_handoff.md deleted file mode 100644 index c8d8c0d0e6a..00000000000 --- a/devlog/_plan/260927_release_train_4/picker-ca/_handoff.md +++ /dev/null @@ -1,4 +0,0 @@ -# Picker CA lane handoff (2026-09-28) - -- Branch/worktree: `codex/t4-picker-ca-release-blocker` at `/Users/jun/.codex/worktrees/t4-picker-ca/opencodex`, based on `origin/dev` `24b2f39b77`. -- wp1 (010), wp2 (020), wp3 (030) implemented with Results sections; structure docs, INV-PICKER-01/02 and the Claude Code guide updated (040). Remaining: exact-head PR CI, merge into `dev`, dev CI dispatch. diff --git a/tests/ci-workflows/repo-hygiene.test.ts b/tests/ci-workflows/repo-hygiene.test.ts index be640162b1c..2c0b1500f1c 100644 --- a/tests/ci-workflows/repo-hygiene.test.ts +++ b/tests/ci-workflows/repo-hygiene.test.ts @@ -16,10 +16,18 @@ const repoRoot = resolveRepoRoot(); * This test closes that gap by asserting against the real index instead of the * ignore file, so a forced add fails CI on the commit that introduces it. */ -const FORBIDDEN_TRACKED_DIRS = [".codexclaw", ".omo", ".claude", "node_modules", ".tmp"]; +const FORBIDDEN_TRACKED_DIRS = [".codexclaw", ".omo", ".claude", ".agents", "node_modules", ".tmp"]; const FORBIDDEN_TRACKED_FILENAMES = [".DS_Store", "Thumbs.db"]; +/** + * Working notes an agent writes for itself or for the next agent. A scoped + * `design-debt.md` audit reached the repository root through a bug-train squash, + * and the release train 4 lanes committed `_handoff.md` files when they were + * stopped and resumed. Durable planning belongs in numbered `devlog/` docs. + */ +const AGENT_SCRATCH_FILENAMES = ["design-debt.md", "_handoff.md"]; + /** * The retired Go native-runtime experiment. Nothing in `src/`, the build, the * typecheck, or the test path reads from `go/`, so a tracked file there is always @@ -98,6 +106,14 @@ describe("repository hygiene", () => { expect(offenders).toEqual([]); }); + test("no agent scratch notes are tracked", () => { + const offenders = trackedFiles().filter((path) => + AGENT_SCRATCH_FILENAMES.includes(path.split("/").pop() ?? ""), + ); + + expect(offenders).toEqual([]); + }); + test("retired directories stay untracked", () => { const offenders = trackedFiles().filter((path) => RETIRED_TRACKED_DIRS.some((dir) => path === dir || path.startsWith(`${dir}/`)), From 9a0f704073d9208172239f5c78037ea51def0aaa Mon Sep 17 00:00:00 2001 From: JUN Date: Mon, 28 Sep 2026 07:24:24 +0900 Subject: [PATCH 3/3] release: prepare 2.69.0-preview.20260928 version metadata --- desktop/src-tauri/Cargo.lock | 2 +- desktop/src-tauri/Cargo.toml | 2 +- desktop/src-tauri/tauri.conf.json | 2 +- package.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/desktop/src-tauri/Cargo.lock b/desktop/src-tauri/Cargo.lock index 9bdc7f94b53..c2993fa0d82 100644 --- a/desktop/src-tauri/Cargo.lock +++ b/desktop/src-tauri/Cargo.lock @@ -2551,7 +2551,7 @@ dependencies = [ [[package]] name = "opencodex-desktop" -version = "2.70.0" +version = "2.69.0-preview.20260928" dependencies = [ "base64 0.22.1", "dbus", diff --git a/desktop/src-tauri/Cargo.toml b/desktop/src-tauri/Cargo.toml index f2af7b8c59c..432f6caa273 100644 --- a/desktop/src-tauri/Cargo.toml +++ b/desktop/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "opencodex-desktop" -version = "2.70.0" +version = "2.69.0-preview.20260928" description = "OpenCodex desktop shell" authors = ["OpenCodex contributors"] license = "MIT" diff --git a/desktop/src-tauri/tauri.conf.json b/desktop/src-tauri/tauri.conf.json index da106098a8a..4b044a1ea35 100644 --- a/desktop/src-tauri/tauri.conf.json +++ b/desktop/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "OpenCodex", - "version": "2.70.0", + "version": "2.69.0-preview.20260928", "identifier": "com.opencodex.desktop", "build": { "frontendDist": "../ui", diff --git a/package.json b/package.json index fbe21ba9e8a..5fa21a77ad2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@bitkyc08/opencodex", - "version": "2.70.0", + "version": "2.69.0-preview.20260928", "description": "Universal provider proxy for OpenAI Codex & Claude Code — use any LLM with Codex CLI/App/SDK and Claude Code", "type": "module", "main": "./bin/package-main.mjs",