Commit Graph

2400 Commits

Author SHA1 Message Date
Hunter B 2c56f7761e Merge PR #2887 from aboimpinto: Gherkin acceptance E2E harness 2026-06-07 10:04:12 -07:00
Hunter B b0d9c3196b Merge PR #2878 from aboimpinto: Layer 2 command parity harness 2026-06-07 10:04:08 -07:00
Paulo Aboim Pinto c25f7af219 Address acceptance harness review feedback 2026-06-07 16:29:40 +02:00
Paulo Aboim Pinto d90031f06f Add Gherkin acceptance E2E harness example 2026-06-07 16:12:12 +02:00
Paulo Aboim Pinto acaae1c2e5 test(tui): address command harness review 2026-06-07 12:24:13 +02:00
Paulo Aboim Pinto 96bff65797 test(tui): add command parity harness 2026-06-07 11:43:57 +02:00
Hunter B 3d676c2509 chore(tui): harden exec harness signals 2026-06-06 22:55:23 -07:00
Hunter B fde931ee89 chore(release): allow trusted v0.9 contributors 2026-06-06 19:56:11 -07:00
Hunter B f2159b7827 docs(release): honor v0.9 contributor credits 2026-06-06 19:45:28 -07:00
Hunter B 9b500a7b91 Prepare v0.9.0 release build 2026-06-06 19:39:02 -07:00
Hunter Bown 59d12f3b6a Merge pull request #2871 from aboimpinto/feat/2791-command-parity-harness
Layer 1: clean command support boundaries
2026-06-06 19:24:31 -07:00
Paulo Aboim Pinto fefd63f30b fix: address command layer review feedback 2026-06-07 03:19:45 +02:00
Paulo Aboim Pinto 18df8db056 refactor: extract neutral command support 2026-06-07 02:44:29 +02:00
Paulo Aboim Pinto 8e8b45a20e test: make command-adjacent tests hermetic 2026-06-07 02:44:15 +02:00
Paulo Aboim Pinto 5300dc484e chore: enforce lf for rust sources 2026-06-07 02:44:08 +02:00
Hunter Bown ad70739b6a Merge pull request #2868 from Hmbown/codex/v090-vscode-git-meta
feat(vscode): show thread git metadata
2026-06-06 10:51:43 -07:00
Hunter B ce17f06db5 feat(vscode): show thread git metadata 2026-06-06 10:50:48 -07:00
Hunter B 6b1de930af chore(release): credit direct v0.9 community merges 2026-06-06 10:49:25 -07:00
Hunter Bown 0b96e8923a Merge pull request #2864 from ljm3790865/feat/tab-core-narrow
feat(tui): add multi-tab system core (manager + persistence)
2026-06-06 10:41:50 -07:00
Hunter Bown a7c1c034ab Merge pull request #2866 from reidliu41/feat/hotbar-action-registry
feat(tui): add hotbar action registry foundation
2026-06-06 10:40:23 -07:00
Hunter Bown 461c22f327 Merge pull request #2867 from ousamabenyounes/fix/azerty-altgr-at-key-conflict
fix(tui): prevent AltGr from swallowing @/#/$/!/%/ characters in composer
2026-06-06 10:37:48 -07:00
Hunter B ffaf110957 fix(tui): advance tab restore counters 2026-06-06 10:34:49 -07:00
Hunter B c9ce6c920b fix(tui): harden hotbar action dispatch 2026-06-06 10:32:18 -07:00
Hunter B 700a36edf1 style(tui): format AltGr sidebar shortcut guards 2026-06-06 10:30:17 -07:00
Ousama Ben Younes da6b8141ad fix(tui): prevent AltGr from swallowing @/#/$/!/%/ characters in composer
On Windows, AltGr is delivered as Ctrl+Alt by crossterm. European keyboard
layouts (French AZERTY, German QWERTZ, etc.) use AltGr to type characters
like @ (AltGr+0), # (AltGr+3), etc. The sidebar-focus shortcuts for
Alt+@/Alt+!/Alt+#/Alt+$/Alt+%) were matching on "contains ALT" alone,
swallowing these AltGr-typed characters instead of inserting them into
the composer.

Exclude the Ctrl modifier from these sidebar-focus shortcut guards so
AltGr-typed glyphs fall through to the  catch-all and
are inserted as text. This is consistent with the has_ctrl_or_alt /
is_altgr philosophy in key_hint.rs, which already treats Ctrl+Alt as
AltGr to preserve European keyboard input.

Closes #2863
2026-06-06 15:48:30 +00:00
reidliu41 1f99fcbd97 feat(tui): add hotbar action registry foundation
Introduce the hotbar action trait and registry, and register the built-in app
  actions needed by the first hotbar slice.
2026-06-06 23:23:48 +08:00
G1 Agent 7fcd7d7469 chore(tui): address Phase 2 bot review on narrow tab-core harvest
Six fixes for the bot review comments landed on PR #2864 head
649d3990. See phase2-playbook.md §7 for the triage rationale.

* persistence.rs: oversized state file now surfaces an InvalidData
  error instead of silently returning a default. The old behaviour
  would let the next save overwrite the oversized file and destroy
  the user's data. Test updated to expect the error.

* persistence.rs: PersistedDelegation gains a `status` field so
  in-flight `InProgress` delegations aren't silently demoted to
  `Pending` on restart. The snapshot now writes the live status
  and restore_from_snapshot honours it. Adds a regression test.

* mention.rs: resolve_tab_mention no longer sorts its input — tab
  mentions (@Tab2) must map to the visual order in the tab bar,
  not to an arbitrary ID sort. Test updated.

* manager.rs: `pending_tasks` renamed to `completed_delegations`
  because the getter returns completed DelegationResults, not
  in-flight tasks. Docstring points to the in-flight getter
  `pending_delegations` to avoid the same confusion recurring.

* manager.rs: delegate_task and start_meeting now validate that
  the from/to tab IDs (or all participant IDs) currently exist
  in the manager. Returns `None` on any unknown ID, preventing
  orphaned tasks / meetings with stale tab references. Two new
  regression tests cover both methods.

Local CI matrix (Windows runner, flags matching ci.yml):
- cargo fmt --all -- --check: exit 0
- cargo clippy --workspace --all-features --locked -- -D warnings: exit 0
- cargo test --workspace --all-features --locked: 4282 pass, 6 fail
  (the 6 failures are pre-existing on the baseline; not caused
  by this PR)
- git diff --exit-code -- Cargo.lock: exit 0

The three deferred threads (#1 close_tab cleanup, #5 cross_tab_links
snapshot, #8 TabGroup::new collision risk) are explicitly out of
scope here; they belong to the follow-up collab/UI PR per the
narrow-harvest promise to Hmbown.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 20:23:51 +08:00
G1 Agent 649d3990d6 feat(tui): add multi-tab system core (manager + persistence)
Sister PR to #2753, scoped to the narrow tab-core/persistence slice
Hmbown asked for in the v0.9 stewardship review. Adds the `tab`
module under `crates/tui/src/tui/` and a one-line module registration
in `tui/mod.rs`. Nothing else in the host changes here — the
switcher / picker / meeting UI pass and the host wiring
(`App::tab_manager`, keyboard shortcuts, mouse menu, tab-bar layout
in `ui.rs`) live on #2753 and land in a follow-up PR.

Scope:

* `tab::TabManager` with monotonic `next_tab_id`, max 9 tabs by
  default, snapshot/restore round-trip, group assignment,
  cross-tab event/links, and persistence integration
* `tab::delegator::TaskDelegator` — bounded pending queue with
  `MAX_COMPLETED_RESULTS` auto-prune; `take_pending_for_tab` marks
  InProgress in place and returns a clone so subsequent
  `start_task` / `complete` / `fail_task` / `cancel_task` can still
  find the task (the previous `swap_remove` would have dropped it
  on the first call)
* `tab::meeting::MeetingManager` — participants, messages by
  type (Regular / Question / Answer / Proposal / Agreement /
  Objection / Summary), decisions
* `tab::cross_tab` — `CrossTabEvent` (TaskDelegation / ReviewRequest
  / MeetingInvite / ContextSync / ResultReturn) and `SharedContext`
* `tab::group` — `TabGroup` / `TabGroupManager` /
  `GroupColor` (Red/Orange/Yellow/Green/Cyan/Blue/Magenta/Gray)
* `tab::mention` — `@Tab<N>`, `@N`, `@tab<n>` (case-insensitive)
  parser, with `resolve_tab_mention` for 1-indexed tab lookups
* `tab::persistence` — JSON file in the user's data dir,
  `PersistedTabState` / `PersistedTab` / `PersistedDelegation` /
  `PersistedGroup` with schema-version header, atomic save,
  bounded file size, corruption-tolerant load
* `tab::benches` and `tab::key_e2e` regression suites (roundtrip,
  save/load, end-to-end save→load with keymap)

Lint posture:

* `#![allow(dead_code, unused_imports)]` on `tab/mod.rs` because
  the collab/UI pass is not on this branch; the public surface is
  intentionally exposed for the follow-up wiring in #2753
* One pre-existing `tools/shell.rs` fix piggy-backed: drop the
  redundant `as *mut c_void` cast on `child.as_raw_handle()` (the
  return type is already `*mut c_void`). Pre-existing on
  `codex/v0.9.0-stewardship`; promoted to `clippy::unnecessary_cast`
  by rust 1.95

Local CI matrix on this branch (Windows runner, same flags as
`.github/workflows/ci.yml`):

* `cargo fmt --all -- --check` — pass
* `cargo clippy --workspace --all-features --locked -- -D warnings`
  — pass, 0 errors
* `cargo test --bin codewhale-tui tab::` — 63/63 pass
* `git diff --exit-code -- Cargo.lock` — clean

GitHub Actions will run on the standard fork-PR approval gate; the
`on.pull_request` branch filter on this repo matches
`codex/v0.9.0-stewardship` so the same matrix will run on
ubuntu-latest, macos-latest, and windows-latest.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 19:06:38 +08:00
Hunter Bown 5bd2f6a99b feat(runtime-api): expose git status metadata for agent view (#2862) 2026-06-06 02:51:21 -07:00
Hunter Bown cc3cbc823c docs(release): record Linux startup evidence (#2861) 2026-06-06 02:45:11 -07:00
Hunter Bown 137d65c31a docs(release): record DeepSeek v4 live smoke (#2860) 2026-06-06 02:41:09 -07:00
Hunter Bown 7bd68279e7 docs(release): record macOS startup evidence (#2859) 2026-06-06 02:37:22 -07:00
Hunter Bown b2e1ba13df docs(release): mark asset verification as pre-npm gate (#2858) 2026-06-06 02:33:51 -07:00
Hunter Bown ab8e3a12ca docs(release): record v0.9 core gate evidence (#2857) 2026-06-06 02:32:29 -07:00
Hunter Bown 2561a54df0 docs(release): close v0.9 credit rollback gates (#2856) 2026-06-06 02:24:16 -07:00
Hunter Bown a5a6b0a2d0 docs(release): record slash picker v0.9 evidence 2026-06-06 02:14:02 -07:00
Hunter Bown e69ea4539a docs(release): resolve v0.9 UI acceptance cutline 2026-06-06 02:11:38 -07:00
Hunter Bown caa1d4a993 docs(release): mark deferred v0.9 acceptance gates 2026-06-06 02:06:47 -07:00
Hunter Bown 73c8318b1f test(whaleflow): replay dogfood workflow from recorded trace
Add recorded mock-trace replay coverage for workflows/rlm_cache_change.star and prove missing dogfood records produce ReplayDiverged instead of live fallback.\n\nVerification:\n- cargo test -p codewhale-whaleflow rlm_cache_change --locked\n- cargo fmt --all --check\n- git diff --check\n- cmp -s CHANGELOG.md crates/tui/CHANGELOG.md\n- ./scripts/release/check-versions.sh\n- ./scripts/release/check-ohos-deps.sh
2026-06-06 02:01:37 -07:00
Hunter Bown e60eeb8162 feat(config): add dormant harness profile resolver
Add a pure HarnessProfile resolver for provider/model routes while keeping runtime provider/model routing, prompts, tools, auth, context, and persisted config unchanged.\n\nVerification:\n- cargo test -p codewhale-config harness_profile --locked\n- cargo fmt --all --check\n- git diff --check\n- cmp -s CHANGELOG.md crates/tui/CHANGELOG.md\n- ./scripts/release/check-versions.sh\n- ./scripts/release/check-ohos-deps.sh
2026-06-06 01:58:17 -07:00
Hunter Bown 35cd09a9f7 fix(tui): classify stream decode failures as network errors
Classify stream/body decode failures such as the #2847 report as recoverable network interruptions and add focused taxonomy coverage.\n\nVerification:\n- cargo test -p codewhale-tui error_taxonomy::tests --locked\n- git diff --check\n- cmp -s CHANGELOG.md crates/tui/CHANGELOG.md\n- ./scripts/release/check-versions.sh\n- ./scripts/release/check-ohos-deps.sh
2026-06-06 01:54:36 -07:00
Hunter Bown 23a188e8fd fix(vscode): keep agent view metadata on snapshot errors 2026-06-06 01:49:32 -07:00
Hunter Bown cd9a044387 docs(release): fill v0.9 acceptance evidence 2026-06-06 01:47:25 -07:00
Hunter Bown e22a7da53f docs(harness): align v0.9 profile acceptance 2026-06-05 23:28:50 -07:00
Hunter Bown efbcc681ae docs(harness): define profile cutline (#2844) 2026-06-05 23:23:49 -07:00
Hunter Bown 2bb24d0c64 docs(release): add v0.9 acceptance matrix (#2843) 2026-06-05 23:20:24 -07:00
Hunter Bown a7052751e4 docs(whaleflow): define external memory cutline (#2842) 2026-06-05 23:18:34 -07:00
Hunter Bown 7fc4ec820a feat(whaleflow): mark mock cancellation and budgets (#2841) 2026-06-05 23:17:01 -07:00
Hunter Bown 6a527fc161 feat(whaleflow): add student replay promotion gate (#2840) 2026-06-05 23:13:49 -07:00
Hunter Bown 14d14f56de feat(whaleflow): add teacher candidate artifacts (#2839) 2026-06-05 23:08:10 -07:00