Skip to content

refactor: remove legacy docs, aliases, settings and features - #4615

Merged
ScriptedAlchemy merged 13 commits into
masterfrom
refactor/remove-legacy-lane-a
Oct 30, 2026
Merged

ScriptedAlchemy merged 13 commits into
masterfrom
refactor/remove-legacy-lane-a

Conversation

@ScriptedAlchemy

@ScriptedAlchemy ScriptedAlchemy commented Oct 29, 2026 •

Copy link
Copy Markdown
Owner

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.md commit 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

Unit Removes
U2 Docs that mandated keeping compatibility, including REBRAND-COMPATIBILITY-POLICY.md (L005, L010–L012)
U1 Stale doc comments and help text describing legacy paths (L001–L004, L006–L009)
U3 Dead internal re-exports and rename aliases; callers move to the canonical names (L014, L015, L017–L021). A follow-up drops runtime-core's #![allow(unreachable_pub)] (L018)
U4 Eval, benchmark, and CI cache fallbacks, and the retired benchmark workload (L022, L029, L046, L066)
U5 Retired hook subcommands and CLI flag aliases (L023, L024, L032, L033, L059)
U6 The operator-mcp host component identity (L025)
U7 Retired setting keys and deprecation machinery (L026–L028, L040, L108). The TS SDK, dashboard contracts, and ChatGPT-extension embed are regenerated
U8 Code-index retention and runtime remnants (L034–L037)
U9 Absence-guard tests, the fusion oracle, and semantic-error text sniffing (L031, L038, L039, L041, L042, L045, L047)
U10 Dashboard retired views and old-daemon tolerance (L048–L050, L065, L082)
U11 Host-installer cleanup of old-release artifacts (L030, L051, L054, L055)
AGENTS.md Replaces the "add compatibility only after proving the prior shape shipped" guidance with the no-legacy rule. .cursor/skills/zack-mode/SKILL.md repeated it and is updated too

Upgrade impact

  • U5: Claude configs from old plugins fail on every hook call or serve start until tracedecay update-plugin. Old Kiro hooks fail until update-plugin --agent kiro.
  • U6: --component operator-mcp is a usage error. Old operator-mcp receipt files are left orphaned.
  • U7: a configuration store holding a retired key, stale_lock_secs, or a non-compiling index pattern returns configuration ResetRequired. configuration get no longer returns findings. Regenerate SDK clients.
  • U8: leftover read-bundle files stay on disk as inert files.
  • U10: the Explorer shows three lanes instead of four.
  • U11: stale mcp.tracedecay and lsp.tracedecay entries in an old opencode.json are no longer flagged. An unedited retired Codex skill is reported as a foreign entrypoint.
  • U4: dev tooling only. No benchmark evidence ships until a new acceptance run is published.

Notes for review

  • U9, L041: ToolResult.semantic_error is now a plain bool, 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 an Option.
  • U9, L042: the fusion oracle is replaced by a test of current behavior. It asserts one compact sort, the duplicate-collapse decision, the same admitted anchors under every lane order, and cursor pages that cover the ranked set exactly.
  • U7, L026: validate_written_value is folded into validate_value, so bad index patterns are rejected on read as well as on write.
  • U3: the cfg(windows) changes (the windows_security rewrite and the new tracedecay-private-fs dependency in daemon-control) can't compile on macOS. This PR's Windows job is their first build.

Verification

  • Per unit: bazel build --config=clippy and bazel test on the touched crates. Dashboard typecheck, the vitest suite (2,237 tests), and the build pass after U10.
  • After rebasing on current master:
    • gen_builds --check: current.
    • Dashboard contracts:check: up to date.
    • check:embedded: current.
    • Clippy on //crates/tracedecay:unit_test and //crates/tracedecay-mcp:all: clean.
  • Known failures that also fail on master: remote_cli_test (4 TLS cases) and hook_spool_drain_test. Some suites showed load flakes that passed on rerun.

🤖 Generated with Claude Code


Devin Review

@changeset-bot

changeset-bot Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 9610d6f

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 2 potential issues.

Devin Review

Comment on lines 53 to +54
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()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 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.

Devin Review


Was this helpful? React with 👍 or 👎 to provide feedback.

self.extra.remove(key);
}
self
read_profile_config::<Self>(profile_root)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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.

Devin Review


Was this helpful? React with 👍 or 👎 to provide feedback.

ScriptedAlchemy and others added 13 commits October 29, 2026 03:31
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>
@ScriptedAlchemy

Copy link
Copy Markdown
Owner Author

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.

@ScriptedAlchemy
ScriptedAlchemy merged commit d728103 into master Oct 30, 2026
17 of 18 checks passed
@ScriptedAlchemy
ScriptedAlchemy deleted the refactor/remove-legacy-lane-a branch October 30, 2026 06:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant