Three read-only audits on 2026-10-01 at mainedee7f30 found the same jobs implemented many times across the ways crates, the attend crates and the shell hooks, with copies that disagree. Seven live defects traced to those disagreements are fixed in PR #689 (open); three known ones remain. This record lists the copies by job, the defects, the legacy and dead code the audits found, the crate-merge candidates and the Python scripts. Where an audit named a canonical owner for a job, it is marked proposed; nothing here is decided.
tools/*/src excluded; gh-tasks, several macros, gh-monitor, attend examples and agents/ sampled or skipped; github/macro.sh:300-408 against settings_merge.rs not compared; workflows compared by diff size only
Paths below are relative to tools/ for crate sources (crate named where the file name is ambiguous) and to the repository root otherwise. Line numbers are at edee7f30.
Claude Code maps every character outside [A-Za-z0-9] to -; only claude-projects matches. No slug function existed; paths::transcripts_root (paths.rs:278) is used only by transcript.rs
Ways: a path with _ lost its transcript (token position 0 driving refire, context-window fallback, empty introspect timeline, wrong project_memory_dir). Attend: wrong for spaces and symbols
~/.claude/sessions/*.json: attend-session:152find_session_in, :269,277; sensor-peers:806,868; attend-chat sessions.rs:36-86; sessions dir built 3x; sensor-peers:891 pass-through wrapper
sensor-peers copy is not whitespace-tolerant. Proposed owner: attend-session
Hand JSON extractors sensor-trait:421, tune.rs:278
serde_json is already a dependency
Agent-ways sessions root: hooks/ways/sessions-root.sh copies session.rs:34 ("MUST stay identical"), sourced by 8 consumers; ways sessions-root (main.rs:349) used only by check-portability.sh:98
clear-markers.sh:21-22 overlaps ways reset; writes session_start with jq (:30-35), which only Rust reads
With no session id, :24-25 ran rm -rf "$SESSIONS_ROOT"
Field scanners show/helpers.rs:7,120, tree.rs:233, scanner.rs:51; body strippers show/helpers.rs:31, tree.rs:252, rethink/drilldown.rs:70, late_interaction.rs:381
Way detection differs (scanner.rs requires description:)
introspection.rs:481 fails on CRLF; body_text and check_sections_text dropped --- rules in way bodies (two shipped ways lost lines). Six more readers still count every --- as a fence
Runs find over every way root per PostToolUse with its own root precedence; 5 postchecks re-parse stdin (reflow :27, density :29, overbuild :19, quality :15,22, versioning :20,27). No post-tool scan mode in the binary
Stop/prompt round trip: check-response.sh:33 parses the transcript with tail/grep/jq and writes state :46-50; check-prompt.sh:35-38 reads it back as --response-context
transcript.rs and response-topics-path (main.rs:342) exist in the binary
Ways crates. Dead: util.rs:6xdg_cache_dir, paths.rs:159frontmatter_schema, reflow.rs:512is_wrapped, agents/mod.rs:122resolve_to_lang_code, session.rs:158,178way_fired_scope(s), config.rs:334Config::write_user_targets (removed in PR #689), reduce.rs:608-640 ignored test with claude-ways paths, three not(tui) stubs never compiled (the tui feature is always on). Legacy: ways embed alias ignoring --model; ways rethink; match --cosine; config layers ways.json and $XDG/ways/config.yaml; ADR-179 fallbacks (a policy call); scoring.rs:122 combined-corpus fallback. Kept on purpose: tests/project_ways.rs:38 contract copy.
Attend crates. Dead: attend-groupsreceive_dirs, legend.rs:149best_group_completion, agent-fmt print_commands, DeltaAccumulator::summary, siblings.rs:169_xdg; test-only pubs legend.rs:103, groups.rs:121; docs naming a nonexistent session_alive (run/mod.rs:273, attend-heartbeat:8, sensor-peers:237). Legacy: --focus alias (cli.rs:109,132), attend focus subtree (cli.rs:174,264, main.rs:153-169), field focus (main.rs:75); rooms vs channels (scenes.rs:22-65, attend-groups:330); send --broadcast no-op (send.rs:168) and cmd_reply(_broadcast) (:317); one-shot @open migration on every run (groups.rs:45, run/mod.rs:142); empty ENGAGEMENT_DEPRECATED; burst_window rejection (config.rs:363-390); legacy signal_salience rows (sensor-peers:761); attend's six optional sensor features, never built off.
Outside tools/*/src.check-config-updates.sh scenarios 0 and 1-5 (~170 of 301 lines); sync-to-home (scripts/sync-to-home.sh 201 lines, its test 123, Makefile:204-211, commands/sync-to-home.md, show/metrics.rs:193-196, reconcile.rs:93 comment); Makefile install/hooks-install/INSTALL_HOOKS (:16,22,162-185), make update (:195-198; scripts/update.sh and make relink are used by update.rs), make uninstall overlap, release: (:508-515); stale make install advice (optimization/macro.sh:6, attend/macro.sh:7, skills/attend/SKILL.md:34); check-setup.sh:15-18 legacy cache and :44-80 duplicating ways status; pre-ADR-155 .topics in events-log.sh:23, signal-report.py:76, check-prompt.sh:38; statusline.sh:41-47 old attend whoami parse; the five deploy-skew guards; skills/ways-update/SKILL.md:16-60 hand-rolling ways update; stale ways.json mentions (bug_report.md:36, ways-localize SKILL.md:55, knowledge/provenance.yaml:10, inject-subagent.sh:70); unreferenced attend-demo.sh, attend-format-probe.sh, hook-fire-detector.sh, audit-permissions.sh, tools/scripts/docs-enact-*.mjs, *-fanout.mjs; install.sh migration messaging tied to the ways-v1.8.3 migrator (a judgment call).