YeonGyu-Kim
efd34c151a
fix( #805 ): skills show <not-found> in text mode silently returned empty success instead of error
2026-05-27 21:05:41 +09:00
YeonGyu-Kim
2c3c0f60e7
fix( #804 ): agents/skills show <name> <extra> in text mode returned wrong error instead of unexpected_extra_args
2026-05-27 20:05:39 +09:00
YeonGyu-Kim
bad1b97f8e
fix( #803 ): agents/skills/plugins list --flag in text mode silently returned empty success
2026-05-27 19:38:31 +09:00
YeonGyu-Kim
fcebf64468
fix( #802 ): four resume-mode and broad-cwd error envelopes now include hint field
2026-05-27 19:04:15 +09:00
YeonGyu-Kim
53953a8157
fix( #801 ): diff non-git-dir error envelope now includes error_kind, hint, and message fields
2026-05-27 18:34:58 +09:00
YeonGyu-Kim
6ee67d6c61
test: add unit test coverage for invalid_history_count and unknown_option classifier arms
...
Two classifier arms had no corresponding assert_eq! in
test_classify_error_kind_returns_correct_discriminants: invalid_history_count
(both prefix and contains paths) and unknown_option (#790 ). Now 49/39 = full
coverage of all classify_error_kind return values.
2026-05-27 18:05:33 +09:00
YeonGyu-Kim
efb1542a39
fix: empty-prompt error now returns non-null hint via newline-delimited usage string
...
claw '' and claw ' ' returned empty_prompt + hint:null because the
error message had no newline delimiter. Added usage hint. 61 CLI
contract tests pass.
2026-05-27 16:34:37 +09:00
YeonGyu-Kim
bff370003b
fix: plugins extra-arg errors now return non-null hint via newline-delimited usage string
...
Parity with #791 (config extra-arg fix). The plugins arg parser emitted
'unexpected extra arguments after claw plugins show ...' with no newline
delimiter, so split_error_hint returned None. Added usage hint after newline.
60 CLI contract tests pass.
2026-05-27 15:04:03 +09:00
YeonGyu-Kim
9976585f87
fix( #796 ): agents/skills show <name> <extra> returned wrong not-found instead of unexpected_extra_args
2026-05-27 14:07:04 +09:00
YeonGyu-Kim
18b4cee5fd
fix( #795 ): skill_not_found and unsupported_skills_action now return non-null hints via fallback table
2026-05-27 13:34:09 +09:00
YeonGyu-Kim
491f179a03
fix( #794 ): plugins install not-found path returns typed plugin_source_not_found instead of unknown+null
2026-05-27 13:08:14 +09:00
YeonGyu-Kim
57a57ef771
fix( #793 ): plugins list --flag silent success + uninstall not-found hint:null
2026-05-27 12:34:35 +09:00
YeonGyu-Kim
abfa2e4cf7
fix( #792 ): agents/skills list --flag silently returned empty success; now returns unknown_option error
2026-05-27 11:39:44 +09:00
YeonGyu-Kim
93a159dca5
fix( #791 ): config extra-arg errors now return non-null hint via \n-delimited usage string
2026-05-27 11:04:50 +09:00
YeonGyu-Kim
9968a27e92
fix( #790 ): system-prompt unknown-option errors now return typed unknown_option kind + non-null hint
2026-05-27 10:36:12 +09:00
YeonGyu-Kim
e4c3c1aa80
fix( #789 ): agents show and plugins show not-found now exit 1; parity with skills ( #788 ) and mcp ( #68 )
2026-05-27 10:07:51 +09:00
YeonGyu-Kim
abdbf61acf
fix( #788 ): skills show not-found emitted duplicate JSON error envelope; use exit(1) instead of Err propagation
2026-05-27 09:36:11 +09:00
YeonGyu-Kim
113145a42a
fix( #787 ): --resume with directory path returns session_path_is_directory kind + hint; wire fallback_hint_for_error_kind into both resume error emission sites
2026-05-27 09:06:28 +09:00
YeonGyu-Kim
22b423b651
fix( #786 ): dump-manifests --manifests-dir missing-value errors now return typed missing_flag_value kind + non-null hint
2026-05-27 08:39:11 +09:00
YeonGyu-Kim
87f4334728
fix( #785 ): add unknown_subcommand classifier arm for unknown subcommand: prose prefix
2026-05-27 08:36:41 +09:00
YeonGyu-Kim
e628b4bb68
fix( #784 ): export --output missing-value and extra-positional errors now return typed error_kind + non-null hint
2026-05-27 08:07:32 +09:00
YeonGyu-Kim
81fe0ccbb7
fix( #783 ): init JSON envelope now includes hint and already_initialized fields for orchestrator parity
2026-05-27 08:04:15 +09:00
YeonGyu-Kim
32c9276fdb
fix( #782 ): acp unsupported invocation now returns non-null hint with newline-delimited remediation text
2026-05-27 07:37:26 +09:00
YeonGyu-Kim
16c1117af6
fix( #781 ): sub-classify api_auth_error/api_rate_limit_error from api_http_error; add fallback_hint_for_error_kind for hint-less API errors
2026-05-27 07:34:57 +09:00
YeonGyu-Kim
d9844cfe8d
fix( #780 ): classifier arm ordering bug — legacy_session_no_workspace_binding and no_managed_sessions shadowed by generic session_load_failed arm
2026-05-27 05:34:49 +09:00
YeonGyu-Kim
364e7909f4
fix( #779 ): resumed /skills invocation returns interactive_only error_kind + non-null hint
2026-05-27 05:09:07 +09:00
YeonGyu-Kim
fded4f6b11
fix( #778 ): doctor check JSON objects now include hint field with stable remediation text for warn/fail checks
2026-05-27 05:07:02 +09:00
YeonGyu-Kim
e02030364d
fix( #777 ): resumed /plugins mutations return interactive_only error_kind + non-null hint instead of unknown+null
2026-05-27 04:44:06 +09:00
YeonGyu-Kim
2684737d9e
fix( #776 ): resume command errors now return typed error_kind + non-null hint (invalid_history_count, session action errors)
2026-05-27 04:39:43 +09:00
YeonGyu-Kim
028998d040
test( #775 ): integration tests for #769-#771 interactive-only guards and #774 hint fields; fix stale classifier unit test string
2026-05-27 04:03:52 +09:00
YeonGyu-Kim
c760a49c47
fix( #774 ): agents/plugins/mcp unknown-subcommand errors now include non-null hint
2026-05-27 03:37:00 +09:00
YeonGyu-Kim
727a1ea4a3
fix( #773 ): config --output-format json now surfaces deprecation warnings in warnings[] array instead of only stderr text
2026-05-27 03:05:14 +09:00
YeonGyu-Kim
212f0b2ad4
fix( #772 ): slash command aliases now resolve to canonical forms in interactive_only guidance
2026-05-27 02:37:17 +09:00
YeonGyu-Kim
bf212b986d
fix( #771 ): init rejects extra args; usage/stats/fork return interactive_only instead of credential check
2026-05-27 02:33:55 +09:00
YeonGyu-Kim
3a1d88386c
fix( #770 ): cost/clear/memory/ultraplan/model with args now return interactive_only instead of falling to credential check
2026-05-27 02:10:41 +09:00
YeonGyu-Kim
9e1be05634
fix( #769 ): claw session <arg> now returns interactive_only instead of falling to credential check
2026-05-27 02:05:14 +09:00
YeonGyu-Kim
b778d4e3d4
fix( #768 ): --resume non-slash trailing arg now has error_kind:invalid_resume_argument + hint
2026-05-27 01:35:46 +09:00
YeonGyu-Kim
89735dbd33
fix( #766 ): claw diff extra args now classified as unexpected_extra_args with hint; track #767 session subcommand gap
2026-05-27 01:33:24 +09:00
YeonGyu-Kim
d29a8e216b
fix( #765 ): login/logout removed_subcommand now has error_kind + non-null hint
2026-05-27 01:28:35 +09:00
YeonGyu-Kim
4ea255ca6a
fix( #764 ): config_parse_error now populates hint field via Display newline delimiter
2026-05-27 01:23:00 +09:00
YeonGyu-Kim
c86dc73d8c
fix( #763 ): config JSON parse errors now classify as config_parse_error
2026-05-27 01:16:04 +09:00
YeonGyu-Kim
88ce181031
test( #762 ): classify_error_kind now covers all 23 classifier arms (was 8 of 23)
2026-05-27 00:33:11 +09:00
YeonGyu-Kim
d83de563c1
fix( #761 ): mcp server_not_found and skill_not_found envelopes now include hint field
2026-05-27 00:03:53 +09:00
YeonGyu-Kim
7fa81b5dae
fix( #760 ): agent_not_found and plugin_not_found envelopes now include hint field
2026-05-26 23:36:30 +09:00
YeonGyu-Kim
ef31328aab
fix( #759 ): validate_model_syntax error strings now use newline separator so hint is non-null
2026-05-26 23:04:04 +09:00
YeonGyu-Kim
b8b3af6fc9
fix( #758 ): --cwd, --date, --session missing-value errors now use missing_flag_value prefix + hint
2026-05-26 22:34:18 +09:00
YeonGyu-Kim
02d77ae1f1
fix( #757 ): --permission-mode invalid and --allowedTools missing now emit typed error_kind and hint
2026-05-26 22:04:00 +09:00
YeonGyu-Kim
4df146188f
fix+test( #756 ): missing/invalid flag-value errors now emit typed error_kind and non-null hint
2026-05-26 21:37:28 +09:00
YeonGyu-Kim
0e8a449ea9
fix+test( #755 ): -p consumes exactly one token; flags after prompt text now parse normally
2026-05-26 21:27:39 +09:00
YeonGyu-Kim
c70312bd04
fix( #754 ): missing_credentials hint now newline-delimited so JSON hint field is non-null
2026-05-26 21:23:03 +09:00
YeonGyu-Kim
e93271356f
fix+test( #753 ): claw -p (no arg) parity with #750 : error_kind:missing_prompt with non-null hint
2026-05-26 20:46:27 +09:00
YeonGyu-Kim
cfc26729cf
fix( #752 ): cli_parse unrecognized-arg errors now emit non-null hint for all subcommands
2026-05-26 20:41:12 +09:00
YeonGyu-Kim
ddc71b5620
test( #751 ): regression guard for #750 prompt no-arg error_kind and hint contract
2026-05-26 20:05:34 +09:00
YeonGyu-Kim
ac925ed41c
fix( #750 ): claw prompt (no arg) now emits error_kind:missing_prompt with non-null hint
2026-05-26 20:03:14 +09:00
YeonGyu-Kim
2dfb7af66e
fix+test( #749 ): compact interactive-only hint now non-null; extend compact JSON test for hint contract
2026-05-26 19:38:09 +09:00
YeonGyu-Kim
3975f2b3ab
fix( #748 ): mcp unknown subcommand now emits error_kind:unknown_mcp_action matching agents/plugins parity
2026-05-26 19:35:55 +09:00
YeonGyu-Kim
04eb661e57
test( #747 ): regression guard for #745 bare slash command hint contract (issue/pr/commit)
2026-05-26 19:06:59 +09:00
YeonGyu-Kim
18e7744e42
fix( #746 ): non-TTY interactive-only error populates hint field via newline split
2026-05-26 19:04:56 +09:00
YeonGyu-Kim
3c5459a33b
fix( #745 ): bare slash command guidance adds newline before hint; claw issue/pr/commit etc now have non-null hint
2026-05-26 18:36:21 +09:00
YeonGyu-Kim
92e053a133
test( #744 ): regression guard for #741 config unsupported-section hint contract
2026-05-26 18:06:35 +09:00
YeonGyu-Kim
1d5db5f77d
fix( #743 ): plugins help --output-format json now emits usage envelope matching agents/mcp/skills help shape; resolves #420
2026-05-26 18:04:04 +09:00
YeonGyu-Kim
2036f0bd4c
test( #742 ): add git-fixture test for diff changed_file_count dedup; fixes unreachable branch in #740 coverage
2026-05-26 17:41:02 +09:00
YeonGyu-Kim
6e78c1fc8b
fix( #741 ): config unsupported_config_section error now populates hint field; list/show/help verbs get usage hint
2026-05-26 17:38:02 +09:00
YeonGyu-Kim
5d072d21e9
test( #740 ): diff JSON contract test now asserts changed_file_count field behavior per #733
2026-05-26 16:45:02 +09:00
YeonGyu-Kim
d5f0d6ed3e
fix( #739 ): skills unknown-subcommand JSON path no longer emits double error envelope; help action not propagated as Err
2026-05-26 16:38:17 +09:00
YeonGyu-Kim
4c3cb0f347
fix( #738 ): interactive-only slash command error adds newline before hint; hint field now non-null with remediation text
2026-05-26 16:06:38 +09:00
YeonGyu-Kim
c592313d9a
test( #737 ): add boot_preflight details non-null-value regression guard to output_format_contract
2026-05-26 15:05:00 +09:00
YeonGyu-Kim
ad982d20c2
fix( #736 ): boot_preflight doctor details[] null-value entries: add double-space separator to Required binary, Last failed boot, MCP/Plugin eligible format strings
2026-05-26 14:33:18 +09:00
YeonGyu-Kim
b3242e8c04
fix( #735 ): classify_error_kind: /compact and other interactive-only slash commands now emit error_kind:interactive_only not unknown
2026-05-26 14:08:53 +09:00
YeonGyu-Kim
d4494a8aeb
fix( #734 ): agents/plugins show not-found envelopes gain message field; parity with skills show
2026-05-26 13:34:36 +09:00
YeonGyu-Kim
cc86f54d65
fix( #701 ): doctor JSON details[] now {key,value} objects; prose preserved as details_prose[]; acceptance check passes
2026-05-26 13:10:05 +09:00
YeonGyu-Kim
db80c9b96e
fix( #733 ): diff JSON adds changed_file_count; run git diff --name-only for staged+unstaged and deduplicate into BTreeSet
2026-05-26 13:05:44 +09:00
YeonGyu-Kim
4c16a42f39
fix( #732 ): status JSON allowed_tools.entries:null→[] when unrestricted; callers can use .entries|length without null guard
2026-05-26 12:36:13 +09:00
YeonGyu-Kim
29dcd478a0
fix( #731 ): sandbox JSON status:error→warn when filesystem sandbox active but namespace unsupported (macOS degraded state)
2026-05-26 12:05:11 +09:00
YeonGyu-Kim
425d94ee43
fix( #730 ): add path field to plugins list/show JSON; completes path-discoverability trio (agents #728 , skills #729 , plugins #730 )
2026-05-26 11:38:48 +09:00
YeonGyu-Kim
8f44ad308d
fix( #729 ): add path field to skills list/show JSON; SkillSummary parity with AgentSummary ( #728 )
2026-05-26 11:32:53 +09:00
YeonGyu-Kim
fa29909f05
fix( #728 ): add path field to agents list/show JSON; AgentSummary now stores on-disk .toml path from discovery loop
2026-05-26 11:09:46 +09:00
YeonGyu-Kim
9757fef8a7
fix( #727 ): add has_upstream bool to branch_freshness JSON to disambiguate fresh:null-no-upstream from fresh:null-unknown
2026-05-26 10:34:28 +09:00
YeonGyu-Kim
a0c6c8ba53
fix( #726 ): classify legacy_session_no_workspace_binding error_kind in export path
2026-05-26 10:04:32 +09:00
YeonGyu-Kim
d8a6109085
docs(#721/#722): re-add ROADMAP entry for config section expansion after rebase conflict
2026-05-26 08:06:11 +09:00
YeonGyu-Kim
02d1f6a04d
fix( #720 ): claw help <topic> now routes to subsystem help instead of cli_parse error; add Agents/Skills/Plugins/Mcp/Config/Diff help topics
2026-05-26 07:36:50 +09:00
YeonGyu-Kim
fe2b13a46a
fix( #719 ): plugins list <filter> now applies substring filter on plugin id, matching agents/skills parity
2026-05-26 07:03:22 +09:00
YeonGyu-Kim
556a598f2d
fix( #718 ): implement plugins show/info/describe command with not-found error, parity with agents/skills show
2026-05-26 06:33:52 +09:00
YeonGyu-Kim
8d80f2ffe7
test( #717 ): add contract tests for agents show not-found and agents list filter in output_format_contract
2026-05-26 06:04:23 +09:00
Bellman
8280f66aa1
Warn before unwritable git metadata blocks worker commits ( #3112 )
...
Use git rev-parse --git-dir so startup preflight follows worktree .git indirections to the real metadata directory, then check directory permission metadata without creating probe files. Add a regression that verifies both the warning kind and structured event path for a read-only external gitdir.
Constraint: ROADMAP #695 requires early startup/worktree diagnostics without destructive writes or broad sandbox redesign.
Rejected: write-probe detection | it mutates git metadata during a diagnostic path.
Confidence: high
Scope-risk: narrow
Directive: Keep startup preflight warnings non-destructive and structured by warning kind/path.
Tested: cargo fmt --manifest-path rust/Cargo.toml --all -- --check; cargo test --manifest-path rust/Cargo.toml -p runtime startup_preflight -- --nocapture; cargo test --manifest-path rust/Cargo.toml -p runtime worker_boot -- --nocapture; cargo check --manifest-path rust/Cargo.toml --workspace
Not-tested: full cargo test --manifest-path rust/Cargo.toml --workspace
2026-05-26 05:01:39 +08:00
YeonGyu-Kim
a0b375c157
fix( #717 ): implement agents show/info/describe and list filter commands, mirror skills handler parity
2026-05-26 05:36:27 +09:00
YeonGyu-Kim
98f8926998
fix( #716 ): align 5 resume-path error JSON envelopes from legacy type:error shape to standard kind/action/status/error_kind/exit_code contract
2026-05-26 05:04:50 +09:00
YeonGyu-Kim
76c8d4801e
Merge pull request #3110 from Yeachan-Heo/fix/issue-693-analog-phase-error
...
Fix claw-analog bootstrap phase drift errors
2026-05-26 04:39:36 +09:00
YeonGyu-Kim
4b8731ba11
fix( #715 ): add action+status fields to resume-path json responses: compact/clear/cost/stats/history/session_exists/session_delete/memory/restored
2026-05-26 04:35:46 +09:00
Yeachan-Heo
789ea9aac8
Reject drifted claw-analog bootstrap phases
...
The analog RAG/bootstrap formatter already rejected missing and literal unknown phases, but still accepted arbitrary phase strings. Keep the parser aligned with the runtime/service contract by allowlisting the known emitted phases and returning the existing typed error shape with received value and field context when drift appears.
Constraint: Scope is limited to claw-analog bootstrap/RAG phase parsing for ROADMAP #693 .
Rejected: Preserve arbitrary non-empty phases | would continue hiding producer/parser phase drift.
Confidence: high
Scope-risk: narrow
Directive: Update KNOWN_RAG_BOOTSTRAP_PHASES when claw-rag-service deliberately adds a new response phase.
Tested: cargo fmt --manifest-path rust/Cargo.toml --all -- --check; cargo test --manifest-path rust/Cargo.toml -p claw-analog rag_response -- --nocapture; cargo test --manifest-path rust/Cargo.toml -p claw-analog -- --nocapture; cargo check --manifest-path rust/Cargo.toml -p claw-analog; cargo check --manifest-path rust/Cargo.toml --workspace; git diff --check
Not-tested: Full workspace cargo test; remote CI
2026-05-25 19:33:37 +00:00
Yeachan-Heo
45dc4f6ff0
Stabilize JSON action contract for local CLI surfaces
...
Guard the local/no-credential JSON command sweep so future additions fail fast when action is absent or empty.
Constraint: ROADMAP #710-#713 fixed most JSON surfaces; #714 dogfood sweep found remaining help and sandbox gaps.
Rejected: Schema redesign for help output | outside the action-field contract scope.
Confidence: high
Scope-risk: narrow
Directive: Keep --output-format json envelopes carrying a stable non-empty action on every local CLI surface.
Tested: cargo fmt --manifest-path rust/Cargo.toml --all; cargo fmt --manifest-path rust/Cargo.toml --all -- --check; cargo test --manifest-path rust/Cargo.toml -p rusty-claude-cli --test output_format_contract -- --nocapture; cargo check --manifest-path rust/Cargo.toml -p rusty-claude-cli; git diff --check
Not-tested: full workspace cargo test
2026-05-25 19:06:16 +00:00
YeonGyu-Kim
7037d84d52
fix( #714 ): add action:help to top-level help json, render_export_help_json, render_help_topic_json, and resume repl help json
2026-05-26 04:03:34 +09:00
YeonGyu-Kim
7d6b2044d5
fix( #713 ): add missing action fields to acp and config json responses; acp->status, config bare->list, config section->show
2026-05-26 03:32:02 +09:00
YeonGyu-Kim
fdde5e45cf
fix( #712 ): add missing action fields to doctor/status/bootstrap-plan/dump-manifests json responses
2026-05-26 03:02:57 +09:00
YeonGyu-Kim
bae0099c7c
fix( #711 ): add missing action fields to version/system-prompt/export/init json responses; add contract test assertions
2026-05-26 02:33:26 +09:00
YeonGyu-Kim
42c17bc4bf
Merge pull request #3108 from Yeachan-Heo/fix/issue-335-session-created-at-ms
...
Expose created_at_ms in session list JSON
2026-05-26 02:15:40 +09:00
YeonGyu-Kim
f8a901c2a5
fix( #710 ): diff --output-format json adds missing action:diff and working_directory fields to both ok and error branches
2026-05-26 02:07:46 +09:00
Yeachan-Heo
a30624d6d4
Expose creation time in session list metadata
...
Preserve session-list consumers from depending on encoded session IDs by carrying persisted creation timestamps through managed summaries and JSON detail output, with an ID timestamp fallback only for legacy metadata that lacks created_at_ms.\n\nConstraint: ROADMAP #335 requires created_at_ms in session_details with the same millisecond unit as updated_at_ms.\nRejected: Making callers parse session IDs | undocumented ID structure is brittle and was the issue being fixed.\nRejected: Session storage redesign | scope is limited to detail metadata propagation and legacy compatibility.\nConfidence: high\nScope-risk: narrow\nDirective: Keep ID timestamp parsing fallback-only; persisted session_meta.created_at_ms remains the source of truth when present.\nTested: cargo fmt --manifest-path rust/Cargo.toml --all -- --check; cargo check --manifest-path rust/Cargo.toml --workspace; cargo build --manifest-path rust/Cargo.toml --workspace; cargo test --manifest-path rust/Cargo.toml --workspace; cargo clippy --manifest-path rust/Cargo.toml -p runtime -p rusty-claude-cli --all-targets\nNot-tested: live interactive /session list against a real provider-backed REPL
2026-05-25 17:06:08 +00:00
YeonGyu-Kim
8f8eb41e0f
fix( #709 ): remove duplicate status:ok keys from render_agents_report_json and render_skill_install_report_json; silent overwrite risk in serde_json json! macro
2026-05-26 01:32:37 +09:00
YeonGyu-Kim
47c0226a61
fix( #708 ): skills show/info/describe responses now emit action:show instead of action:list; remove duplicate status key from render_skills_report_json
2026-05-26 01:05:07 +09:00