Repository navigation
refactor: remove legacy docs, aliases, settings and features - #4615
Conversation
|
| pub fn tool_result_has_semantic_error(result: &ToolResult) -> bool { | ||
| result | ||
| .semantic_error() | ||
| .unwrap_or_else(|| value_has_semantic_error(&result.value)) | ||
| result.semantic_error() |
There was a problem hiding this comment.
🔴 Failed tests appear as successful tool calls
When affected tests fail, tool_result_has_semantic_error returns false because their graph-tool result has no structural failure marker. MCP omits isError and records the failed run as a successful call.
Learn more
The graph-tool renderer sets a structural semantic-error marker for Git failures, but not for affected-test results. The affected-test producer returns a typed result with failed, exit_code, and a terminal receipt; failed tests can reach this renderer without an outer dispatch error. Previously, the removed text classifier recognized nonzero failed or exit_code in the JSON result. The new false default therefore makes MCP isError and analytics report success for those runs. See render_graph_tool, run_affected_tests_body, and mark_semantic_tool_error.
Example: An affected-test run returns failed: 1 and exit_code: 101. The tool body names the failure, but its MCP result has no isError: true and analytics records success.
Recommended fix: Classify affected-test failures from their typed RunAffectedTestsResultV1 in render_graph_tool, set with_semantic_error(true) and a failure message, and cover failed, cancelled, and nonzero-exit terminals.
Was this helpful? React with 👍 or 👎 to provide feedback.
| self.extra.remove(key); | ||
| } | ||
| self | ||
| read_profile_config::<Self>(profile_root) |
There was a problem hiding this comment.
🟡 Retired profile data survives every save
When an existing profile contains retired keys, UserConfig::load retains them in extra. Subsequent saves write them back, leaving retired counter and setting data in the active profile indefinitely.
Learn more
The profile config is decoded into UserConfig, whose flattened extra map retains unknown TOML keys. The removed filter previously discarded a closed set of retired fields while preserving fields owned by other readers. Without that filter, a routine profile update serializes the retired values again. The repository requires cutovers to migrate every datum and retain no legacy state. See UserConfig and save.
Example: A profile containing pending_upload = 4200 and last_worldwide_total = 1000000 is loaded, then cached_latest_version is updated and saved. Both retired keys remain in the written config.
Recommended fix: Remove the retired fields from the flattened map before serializing the active profile, while retaining keys owned by other profile readers. If compatibility-based load filtering is intentionally prohibited, perform a one-time explicit profile reset/refusal instead of silently rewriting retired data.
Was this helpful? React with 👍 or 👎 to provide feedback.
Items removed: L005, L010, L011, L012. - L010: delete docs/REBRAND-COMPATIBILITY-POLICY.md and the pre-rebrand shim and compatibility-policy sections of TREESITTERS-RENAME-CONSTRAINTS. - L005: drop the retired qualification-gate history from the search-quality module docs and dev doc; delete the deny_unknown_fields re-proof test a_workload_declaring_a_qualification_methodology_is_refused and rename the matrix test to describe the current fact. - L011: remove /legacy dashboard, legacy local store and legacy .tracedecay fallback narration (dashboard.md, DOMAIN-EXTRACTORS, LCM payload docs, USER-GUIDE). Delete LCM-PAYLOAD-LIFECYCLE section 11 and renumber the contract sections and cross-references. Delete the test retired_dashboard_routes_fall_through_to_the_canonical_spa_index. - L012: plans 08 and 17 no longer prescribe compatibility aliases, deprecated-name bindings, older-shape conformance or reserved retired identifiers. Upgrade impact: none (documentation and two tests only). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Items removed: L001, L002, L003, L004, L006, L007, L008, L009. - L001: uninstall/wipe help describes profile project stores, not checkout-local .tracedecay indexes or "legacy" stores. - L002: drop the doctor "migration advisory" section and the legacy core_doctor wording. - L003: remove the dead default_collection slot from MultiRootCollectionSelectorV1 (new() takes only the explicit target; the single caller is migrated) and reword the NoCollectionNamed reason. - L004, L006, L007, L008, L009: comments describing gone behaviour are reworded or deleted. LiveActivityPulse.detail is now required (string | null) and the pulse fixtures set detail: null. Callers migrated: multi_root_api.rs selector construction; dashboard pulse fixtures. Tests deleted: none. Upgrade impact: none. The only wire-visible text change is the multi-root "no collection named" reason string. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Items removed: L014, L015, L017, L018, L019, L020, L021. - L014: delete CanonicalEvidenceHit::compatibility_hit and the orphaned tracedecay_lcm::LcmGrepHit; skill_writer reads CanonicalEvidenceHit. - L015: rename AutomationConfig, AutomationTaskConfig, AutomationTaskSet, AutomationBackend, AutomationHostMode, SkillUsageSummary and AutomationSettledProblem to their V1/Record domain names in 61 files and delete the `as` re-export renames and the two `pub type` aliases. - L017: delete the identity legacy_/registered_registry_reap_* copy converters in the profile registry test support. - L018: delete runtime_core::windows_security; callers use tracedecay_private_fs::windows (daemon-control gains a cfg(windows) tracedecay-private-fs dependency; Cargo.lock updated). - L019: delete RetainedSessionRefreshPortV1; callers use tracedecay_session_memory::session::SessionRefreshServicePort. - L020: delete CLAUDE_SESSION_MESSAGE_PROJECTOR_VERSION; tests use SESSION_MESSAGE_PROJECTOR_VERSION. - L021: delete the mcp_server_test re-export; three callers use mcp_server_test::support. Tests deleted: none. Upgrade impact: none. Source-level renames only; serialized shapes are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Items removed: L022, L029, L046, L066. - L022: scorecard.py reads only the `pass` field; delete row_passed and test_passed_alias. - L029: delete the legacy Bazel disk-cache restore-key fallback in the ci-linux-test job. - L046: the Claude observation benchmark validates only acceptance artifacts. Delete RETIRED_WORKLOAD_ID, the historical and retired validators and their helpers, EvidenceIndex.historical_stale, the five historical result-*.json files, the runner's symlink loop, the publication test's historical fixture, and the optional ProviderBaseline.measurement and catalog compatibility field. - L066: the agent-adoption grader accepts only Codex 0.144+ item.* envelopes and the <id>__<host>__<model> basename. The selftest fixtures moved to those shapes and the legacy-basename check was deleted. Tests deleted: test_passed_alias; the legacy id__host basename check in agent_adoption selftest. Upgrade impact: dev tooling only. Old hermetic results.jsonl rows that carry only `passed` score as not triggered, old Codex msg transcripts and old-named transcript files no longer grade, and the repo carries no benchmark evidence until a new acceptance run is published. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Items removed: L023, L059, L024, L032, L033. - L023/L059: delete the hook-pre-tool-use and hook-prompt-submit subcommands (Commands variants, the pre-tool-use fast path, the NATIVE_CAPTURE_COMMANDS and capture_command_name rows, the dispatch arms, and the TOOL_INPUT doc clause). - L032: delete hook-kiro-pre-tool-use, hook-kiro-post-tool-use, hook-cursor-subagent-start and hook-cursor-before-submit-prompt, plus the host-bundles README paragraph. - L024: drop the `--claude-code-tool-search` alias on `serve`. - L033: delete the CLI tombstone tests for retired commands, flags and config keys. Callers migrated: none remain; no installer or bundle emits these names. Tests deleted: the_beta_83_claude_plugin_flag_serves_the_full_tool_list, retired_worldwide_counter_commands_are_refused_by_the_parser, automation_config_set_rejects_retired_lock_timeout_flags, gitignore_command_is_refused_as_unknown, the pre-tool-use and Kiro pre/post replay rows, the lifecycle-lease rows and no-input block, the Kiro postToolUse half of the prompt-boundary test (renamed kiro_hooks_capture_prompt_boundary), and the legacy-seed, retired automation-defaults and sidecar asserts in the Codex automation install test and the user.upload_enabled.v1 block in the user-settings test. Upgrade impact: Claude configs from old plugins that still name hook-pre-tool-use or hook-prompt-submit, or a beta.83 MCP config that passes --claude-code-tool-search, fail with a clap usage error on every hook call or `serve` start until `tracedecay update-plugin` for Claude. Old Kiro agent hooks naming preToolUse or postToolUse exit 2 until `tracedecay update-plugin --agent kiro`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Items removed: L025. - Delete HostComponentV1::OperatorMcp and HostBundleComponentArg::OperatorMcp (the hidden `--component operator-mcp` value), and drop them from the Claude, Cursor and Codex component lists. - Delete the receipt supersede/translate machinery in host_bundle/control.rs (LEGACY_COMPONENT_IDENTITIES, canonical_component, legacy_aliases, superseded_identities, translate_to_identity, ComponentReceiptsV1, component_receipts) and the writer ownership guard, writer remove_receipt, planner superseded_receipt_digests, doctor canonical_marker and the component-set superseded-receipt retirement loop. Planning evidence is the component's own receipt. - Strip every OperatorMcp arm in capability_admission, codex/mcp_registry, cursor, kimi, droid, vibe, opencode and host_bundle_registry. Callers migrated: selected_host_component is gone, so --component passes straight through; the unscoped-sweep test uses ContextMcp. Tests deleted: agent_cmd/mcp_identity_tests.rs (whole file), the retired spelling half of the component help test, opencode_non_owner_component_cannot_ remove_context_registration, the six legacy-receipt migration tests and helpers in host_bundle/tests.rs, and legacy_mcp_only_install_updates_and_uninstalls_as_one_server. Upgrade impact: `--component operator-mcp` is a clap usage error. On Claude, Cursor and Codex an operator-mcp receipt written by an older release (receipt.<host>.operator-mcp.v1.json) is no longer recognised and is left as an orphan file; the deployed MCP file it recorded is treated as an unreceipted path, so byte-identical bytes converge and drift needs `--yes --adopt`. Codex MCP-only installs registered under that identity are no longer cleaned up by uninstall. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the guidance that allowed compatibility aliases, deprecation paths and data migrations once a prior shape shipped with the operator's rule: tracedecay keeps no legacy or backward-compatibility code. When a shape changes, every caller migrates and the old one is deleted; old stores, clients and hosts are refused through the typed reset and refusal paths, never shimmed. The zack-mode skill repeated the old allowance for time-boxed adapters and is updated to match. Upgrade impact: none (documentation only). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
L018 follow-up: the allow and its comment described root shims that re-exported the extracted kernel. With windows_security removed the crate builds clean under Clippy on every target without it. Upgrade impact: none. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Items removed: L026, L027, L028, L108, L040. - L108: delete RETIRED_CORE_SETTING_KEYS_V1 and RETIRED_PROFILE_SETTING_KEYS_V1 and the retired-key arguments, removals and drift allowance in converge_registry_shape and the profile store. A snapshot holding a retired key is configuration ResetRequired. - L027: delete AutomationTaskSettingsV1.legacy_stale_lock_secs and every retire_lock_timeout projection (automation config and admission, configuration get and pin, global-db convergence and rollback), plus RetiredAutomationLockTimeout. - L026: index include/exclude patterns are validated on read as well as write (validate_written_value is folded into validate_value). Delete partition_index_patterns, setting_findings, ConfigurationSettingFindingV1, ConfigurationSettingActionV1, ResolvedSetting.findings, ConfigurationDriftV1::Unapplied and unapplied_statement. The generated TypeScript SDK, dashboard contracts and embedded ChatGPT server bundle are regenerated. - L028: delete UserConfig RETIRED_KEYS and without_retired_keys and the USER-GUIDE counter history. - L040: delete DeprecationStateV1 and SettingDefinitionV1.deprecation. Callers migrated: automation config/admission, configuration operations and pin, daemon-service doctor_kernel and profile configuration get, global-db registry/store/mutation/control. Tests deleted: the retired-sync, retired-key convergence, released-key, retired-lock-timeout, stored-pattern-finding and profile retired-upload tests, the retired-keys half of the user config save test, and the retired-sync list/get assertions. Upgrade impact: a project or profile configuration store holding a retired key (diagnostics.prewarm.v1, index.git_ignore.v1, semantic.runtime.v1, sync.full_sync_escalation_files.v1, sync.max_concurrent_syncs.v1, sync.orphan_db_gc_days.v1, user.upload_enabled.v1, user.watcher_debounce_ms.v1, user.extraction_timeout_secs.v1), an automation value carrying stale_lock_secs, or an index include/exclude pattern that does not compile now returns configuration ResetRequired; reset the project or profile configuration and re-apply custom settings. Configuration get no longer returns `findings`; regenerate SDK clients. Dead keys left in config.toml stay as inert entries. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Items removed: L034, L035, L036, L037. - L034: delete is_retired_read_bundle_file and the read-bundle-* reclaim in code-index generation retention. - L035: delete RETIRED_BINDING_CLEANUP_INTENT_FILE and its removal in recover_scope_root_retention. - L036: delete seat_retained_generation_on_empty_serving, retained_empty_seat_settles_source, the mount.rs legacy-graph-recovery branch, CodeTextGenerationSharedV1.sealed_format_revision, the bind_text parameter and uses_partitioned_manifest(); the partitioned-manifest guards collapse to their true arm. - L037: delete the five always-zero retired fields of CodeGraphBuildBoundV1. Callers migrated: mount.rs guards, bind_text and restore call sites; the three tests that asserted uses_partitioned_manifest now assert the owner exists. Tests deleted: maintenance_reclaims_retired_read_bundle_files, scope_recovery_deletes_a_retired_binding_cleanup_intent, equal_metadata_without_a_decoded_generation_does_not_settle_the_seat. Upgrade impact: stores from older builds keep leftover read-bundle-* files and the .code-index-scope-binding-cleanup-intent-v1.json marker as inert files on disk. Nothing decodes differently. The code_index_graph_build_bound tracing event's Debug field loses five zero fields. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Items removed: L031, L038, L039, L041, L042, L045, L047. - L041: ToolResult.semantic_error is a plain bool set by the handler. Delete plain_text_tool_failure, value_has_semantic_error and the rendered-text fallback in tool_result_has_semantic_error and semantic_failure_reason. No production handler emitted the sniffed shapes (top-level success:false, error, failed>0, exit_code, "git error:" text): refusals go through problem_tool_result and edit/graph results set the marker. - L042: delete the former split fusion pipeline oracle (mod same_source_fusion_tests, legacy_compose). The duplicate-accounting test now asserts current behaviour directly: one compact sort, the duplicate collapse decision, the same admitted anchors under every lane order, and cursor pages that cover the ranked set exactly. - L038: the request-identity restart test no longer carries legacy id strings and is renamed every_process_local_surface_mints_a_fresh_identity_ after_restart. - L031, L039, L045, L047: delete tests that only assert the absence of retired features, routes, aliases and wire shapes. Callers migrated: with_semantic_error(false) calls dropped; semantic_error() tests assert a bool. Tests deleted: legacy_opencode_lsp_entries_do_not_disable_diagnostic_engines, doctor_routes_expose_diagnostics_without_mutation_endpoints, retired_file_metadata_is_absent_and_refused_by_public_dispatch, the retired-counter, worldwide, selector-alias and relation-table assertions, three dashboard retired-shape tests, the retired fact-state loop and the superseded diagnostics assert. Upgrade impact: none. Test and internal result-classification changes only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Items removed: L048, L049, L050, L065, L082. - L048: unknown ?view values open Cortex; tests no longer name the retired atlas and core lenses. - L049: delete the Explorer "Semantic" lane, the 'unregistered' lane state and semanticLane. LaneId is the three source lanes (SourceLaneId folded into it); the summary reads "of 3 lanes". - L050: drop the negative assertions against retired /work/snapshot, delta, accept-task and replan routes and the retired-snapshot narration. - L065: the capabilities schema requires multi_root and multiRootReading takes a capability; the 'absent' reading is gone. - L082: fetchProjectRegistry accepts a registry envelope only on a 2xx. The daemon answers every registry outcome with a 200 (projects.rs, the gateway's registry_unavailable_response); non-2xx is an error. Callers migrated: MultiRootPanel, the controller and lane switches; the ShellTruth and BrainPage fixtures now serve registry outcomes with the 200 the daemon sends. Tests deleted: the retired Atlas link, semantic-lane and semanticLane tests, the retired-route negative assertions, the silent-bundle multi-root assertion, the decoded 503 registry test and the non-2xx rows of the registry outcome tables. Upgrade impact: the Explorer shows three lanes instead of four. The bundled dashboard always matches its daemon, so a newer dashboard against an older daemon would show "HTTP <code>" for non-2xx registry answers and unsupported_schema for a capabilities bundle without multi_root. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Items removed: L030, L051, L054, L055.
- L030: delete codex/retired_bundle_files.rs (the table of released skill
file digests) and remove_codex_retired_bundle_files; every unexpected
Codex plugin entrypoint is reported as foreign.
- L051: delete the doctor's Cursor literal ${workspaceFolder} log finding
and the former-template README history. serve's path sanitizer is kept: it
still discards an unexpanded template from hosts that pass one.
- L054/L055: OpenCode no longer reads, strips or flags the V1
`mcp.tracedecay` key or the retired `lsp.tracedecay` registration.
LEGACY_MCP_SERVER_KEY, remove_legacy_lsp_registration, the legacy_lsp
state term, the doctor checks and the remove_lsp/remove_mcp parameters of
strip_registration_entries are gone; Core lifecycles leave opencode.json
untouched.
Callers migrated: codex activate/deactivate/uninstall, OpenCode
activate/deactivate/state/doctor/merge/strip; the cross-crate OpenCode
companion lifecycle test now seeds only an operator LSP and asserts
opencode.json is byte-identical across Core lifecycles.
Tests deleted: activation/deactivation_retires_released_skill_files,
RELEASED_RETIRED_SKILL, existing_core_with_legacy_lsp_requires_activation,
legacy_mcp_registration_remains_detectable_for_migration,
doctor_reports_retired_lsp_registration,
opencode_core_cleanup_is_reversible_and_revision_checked, the retired-file
setup in two Codex tests, the V1/LSP parts of the OpenCode merge test, and
the placeholder half of the Cursor log scan test.
Upgrade impact: stale `mcp.tracedecay` and `lsp.tracedecay` entries in an
old opencode.json stay and doctor no longer flags them; delete them by hand.
An unedited retired skill under the Codex plugin dir (for example
skills/tracedecay-find-impact) is reported as a foreign entrypoint; delete
that skills/<name> directory or reinstall the Codex plugin. Doctor no longer
warns about old Cursor ${workspaceFolder} spawns.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4544803 to
9610d6f
Compare
|
Combined into #4623 with lanes A, B and C, merged with --no-ff so this branch's commits land unchanged; that PR's merge commit marks this one merged. |
Why
tracedecay keeps no legacy or backward-compatibility code. This PR removes inventory units U1–U11: docs, aliases, dev tooling, CLI aliases, retired config keys, retired features, dashboard tolerance for older daemons, and installer cleanup. There is one commit per unit, plus an
AGENTS.mdcommit and a follow-up. Each commit body lists the items removed, the callers migrated, the tests deleted, and the upgrade impact. 277 files changed, +1,479 / −22,862. About 15k of the deletions are the retired observation-benchmark workload data in U4.Units
REBRAND-COMPATIBILITY-POLICY.md(L005, L010–L012)runtime-core's#operator-mcphost component identity (L025)AGENTS.md.cursor/skills/zack-mode/SKILL.mdrepeated it and is updated tooUpgrade impact
servestart untiltracedecay update-plugin. Old Kiro hooks fail untilupdate-plugin --agent kiro.--component operator-mcpis a usage error. Oldoperator-mcpreceipt files are left orphaned.stale_lock_secs, or a non-compiling index pattern returns configurationResetRequired.configuration getno longer returnsfindings. Regenerate SDK clients.mcp.tracedecayandlsp.tracedecayentries in an oldopencode.jsonare no longer flagged. An unedited retired Codex skill is reported as a foreign entrypoint.Notes for review
ToolResult.semantic_erroris now a plainbool, with no error-text sniffing. A search of production handlers found none that emit the sniffed shapes. After rebasing on master, no code uses it as anOption.validate_written_valueis folded intovalidate_value, so bad index patterns are rejected on read as well as on write.cfg(windows)changes (thewindows_securityrewrite and the newtracedecay-private-fsdependency indaemon-control) can't compile on macOS. This PR's Windows job is their first build.Verification
bazel build --config=clippyandbazel teston the touched crates. Dashboard typecheck, the vitest suite (2,237 tests), and the build pass after U10.gen_builds --check: current.contracts:check: up to date.check:embedded: current.//crates/tracedecay:unit_testand//crates/tracedecay-mcp:all: clean.master:remote_cli_test(4 TLS cases) andhook_spool_drain_test. Some suites showed load flakes that passed on rerun.🤖 Generated with Claude Code