| Files | Last commit | Last update |
|---|---|---|
fix(ci): give codewhale-portable-config the codewhale-sanitize dependency CI 38943023960 on 3cf53b6cb7 failed Lint and MSRV (1.89) with E0433 "cannot find module or crate codewhale_sanitize" at crates/tui/src/commands/groups/config/permissions.rs:240. tests/portable-config mounts the real config command group by #[path], and 53ae15645c (CW-7236) replaced permissions.rs's local bidi helper with codewhale_sanitize::sanitize::is_bidi_control, which that crate did not depend on. Local verification of 53ae15645c ran clippy for -p codewhale-tui only, so it never compiled this crate. tests/portable-config/Cargo.toml now depends on the path crate codewhale-sanitize. That crate has no TUI dependency (icu_properties, regex, serde_json, url), so the portable proof still holds. Cargo.lock gains the one dependency line. Verification (tree also holding the #6964 change committed next) - scripts/dev-cargo.sh clippy --workspace --all-targets --all-features --locked -- -D warnings -A clippy::uninlined_format_args -A clippy::too_many_arguments -A clippy::unnecessary_map_or: clean. This is the CI Lint command. - scripts/dev-cargo.sh nextest run -p codewhale-portable-config -p codewhale-command-contract --locked: 114 tests run: 114 passed. - cargo fmt --all -- --check: clean. - Not run locally: cargo +1.89 check --workspace (the MSRV job). It failed on this same unresolved crate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NBKbhx19BRbZtvWK8rVKjz | 23 days ago | |
refactor(commands): adopt portable core navigation Shapes (FEAT-031) (#7009) * test(commands): reconcile baseline capability and config proof guards Match /init's existing WORKSPACE|PRESENTATION authority after 8867749f5. Approve only the already-declared pure sanitizer in the config normal graph; preserve all existing service rejection controls. FEAT-031 P0 baseline: 19066 nextest passed, 34 skipped; 3 doctests passed, 8 ignored; config proof 35 passed and 7 controls. Full Clippy, debug/release builds and format passed. No navigation implementation or product behavior change. Refs #5316. * refactor(commands): adopt pure core navigation outcomes and registration FEAT-031 P2 replaces hotbar/transcript/turn FunctionCommand App wrappers with shared pure handlers, real navigation inventory and exhaustive host action conversion. Preserve the original metadata, grammar, output and nine leaf assertions; core remains pending. Verified: 79 contract and 482 scoped native tests pass; 1125 actual observations across 15 locales plus all 40 metadata entries replay byte-identically. Full Clippy, rustfmt, 30 boundary and 63 migration controls pass. Complete 13-command portability proof remains P4; no physical move. Refs #5316. * refactor(commands): adopt stateful core navigation Shapes FEAT-031 P3 replaces the App-bound help/home/overview/links/anchor/workspace/translate wrappers and nine core.rs helpers with command-owned parsing/rendering, NAVIGATION bit30, narrow workspace/config operations and explicit host adapters. Retain all34 relocated host tests, old capability identities and confinement controls. No physical move or complete-core claim. Verified:79 contract and1289 commands/help/voice tests pass;1125 native observations across15 locales plus40 metadata entries remain byte-identical. Full Clippy, formatting,30 boundary/63 migration controls and locale guards pass; all failures/retries retained. Refs #5316. * refactor(commands): complete portable core navigation voice boundary FEAT-031 P4 replaces the remaining voice App handlers with VOICE_INPUT bit31 Shapes, preserving u32 identities and exact authority. Relocate the unchanged capture runtime outside the movable group and retain builtin shortcut semantics. The real complete13-entry root compiles independently as an unpublished normal library; core remains pending for other slices. Verified:79 contract and1289 native command/help/voice tests;1125 observations/15 locales and40 metadata entries byte-identical;9 actual-source portable tests and7 rejection controls. Normal graph/build, full Clippy/fmt,30 boundary/63 migration controls, locales, developer routing and publication-order validation pass. No physical move or release. Refs #5316. * test(commands): strengthen navigation preservation assertions FEAT-031 P5 extends existing host tests for user help precedence/alias shadowing, one-dismissal help behavior, home-directory routes and exact anchor read/open/partial-write/replacement failures. Production code and all original test identities remain unchanged. Verified:1289 commands/help/voice tests pass after correcting the fixture's comma-separated alias syntax;58 native/PTY acceptance tests pass against rebuilt current CLI. Contract79, navigation9+7 controls, config35+7, session65+5, boundary30/migration63 and locale/format checks pass. Numeric final coverage remains pending. Refs #5316. * docs(web): refresh generated agent docs from current main * fix(commands): address core navigation extraction review Relocate the existing canonicalization budget without increasing total authority or blocking-call allowance. Correct both localization guides, restore native command tests for command source paths, and make the complete navigation proof tolerate unrelated registry insertions while rejecting omitted/duplicate/reordered entries. Enforce source and normal graph checks on heavy main and PR lint jobs; retain explicit dependency review. Verified: 1215 native command tests (including all 34 relocated host tests), 9 portable tests, 7 proof controls, 34 blocking-budget controls, workflow regression, docs/facts and formatting pass. Preserved maintainer merge fc5ac7d904. Workspace operation-level authority remains an explicitly documented follow-up; no capability renumbering or widening. Refs #5316. Signed-off-by: Paulo Aboim Pinto <paulo.aboim.pinto@gmail.com> * fix(commands): resolve builtin voice shortcut by canonical name Address the non-blocking PR #7009 review nits: replace dispatch::<10> with builtin-registry lookup using VOICE_INFO.name, preserve capability-scoped dispatch and user-command shadowing isolation, and fix all 13 proof-message spacing. Verified 1215 native command tests, including existing shadowed-voice and pure action assertions plus safe missing-name rejection; 9 portable tests and 7 proof controls pass. Scoped TUI Clippy and formatting pass. No workspace authority redesign; maintainers own that follow-up and the post-v0.10.2 merge timing. Refs #5316. Signed-off-by: Paulo Aboim Pinto <paulo.aboim.pinto@gmail.com> * fix(security): patch follow-redirects in Feishu and WeCom bridges Resolve the two red npm-audit checks on PR #7009 (GHSA-q3jh-wrc6-jgq8 and GHSA-8r9p-f939-6h3c). Update only the follow-redirects lock entries from 1.16.0 to 1.16.1; keep SDK versions, manifests and all other packages unchanged. No audit exclusions or threshold changes. Verified on Node 22.22.1: clean locked installs, syntax checks, Feishu 19/19 tests and WeCom 17/17 tests, zero vulnerabilities in both npm audit JSON reports, and installed dependency trees at 1.16.1. Original failing reports retained. Refs #5316. Signed-off-by: Paulo Aboim Pinto <paulo.aboim.pinto@gmail.com> --------- Signed-off-by: Paulo Aboim Pinto <paulo.aboim.pinto@gmail.com> Co-authored-by: Paulo Aboim Pinto <paulo.aboim.pinto@gmail.com> Co-authored-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Hunter Bown <hmbown@gmail.com> | 17 days ago | |
feat(tui): /color gives one chat's composer box its own color CW-7186. /color cycles the composer border through red, orange, amber, green, cyan, blue, purple and pink (wrap-around); /color <name> picks one, completing from the usage string in the slash menu; /color off|clear|none|default returns to the theme. Alias colour. The color is per chat: saved on that session (SavedSession.composer_color, serde default, skipped when unset), restored on resume, cleared on /new, /clear, /fork and a new chat from the launch screen, and never touches the global theme. Design: - The command is a portable session-control command beside /title (groups/session/color.rs). The facet gains composer_color() and set_composer_color(Option<String>); the host stores the name. - The /title save path is factored into persist_session_display and shared by both commands. Title error strings are unchanged. - Rendering: focus_color() uses the chat color only while the composer owns focus, so the focus signal stays (unfocused stays ui_theme.border). Theme tokens could not give honest names: accent_primary alone is purple, coral, green, pink or gray-green in five built-in themes. So each name has a fixed dark RGB, a light RGB (Light and SolarizedLight modes) and a named ANSI color for the Terminal theme, and the RGB is floored with enforce_contrast at SECONDARY_CHROME_CONTRAST against composer_bg. - Description key cmd_color_description, translated in all 15 locale packs. - docs/features.toml row chat-color; GUIDE.md and zh_hans/GUIDE.md command tables; the two design docs that said the focused outline is always action blue now name /color. Also fixed while here: importing a session container left the previous chat's /title on the App, and the next snapshot wrote it onto the imported chat; a new chat from the launch screen kept it too. Both now take the new session's values. Known limits: in the Grayscale theme every color is mapped to gray by the backend adapter, so names cannot be told apart there. When the composer enclosure is off, only the quiet top rule is drawn and the color does not show. Like /title, /color needs an active session (send a message first). Evidence: - Real TUI (debug build, local mock provider, tmux): border escape colors read 38;2;106;166;220 by default, 242;95;92 after bare /color (red), 91;141;239 after /color blue, the error text for /color nope, default again after /color off, 190;120;236 after /color purple. The session file holds "composer_color": "purple", and codewhale resume <id> redraws the border 190;120;236. Artifacts: CW/artifacts/cw7186-color-20261018/. - Tests (nextest): codewhale-portable-session + command-contract + localization 198 passed; tui commands:: 1215 passed (after adding "color" to the structcopy frozen session_order baseline, which pins the session inventory); session_control 42, title 77, composer 173, hotbar 82, help 193, feature 11, session_manager 137, fork 60, apply_loaded 15, launch 131, import 92, save 269, structcopy 40, all passed; feature_registry integration 2 passed. - clippy (tui, command-contract, portable-session, localization; --all-targets --locked, CI flags) clean; fmt clean. - Scripts: check-command-session-proof, check-command-crate-boundaries, check-command-migration-manifest, check-tui-locale-parity, check-tui-product-vocabulary, blocking-call and dead-code budgets all pass. web prebuild regenerated agent-docs and features JSON; check-facts OK; web tests 772 passed. - Not run: the full workspace suite (CI owns it), a release build. No new tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NBKbhx19BRbZtvWK8rVKjz | 21 days ago |
| Files | Last commit | Last update |
|---|---|---|
| 23 days ago | ||
| 17 days ago | ||
| 21 days ago |