mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-10 22:47:02 +01:00
The transcript analyzer behind /compile-candidate lived only in the working tree. Untracked meant unlinted — pre-commit only inspects files handed to it — so nothing had ever checked it, and it had been abandoned mid-refactor with every parse raising AttributeError: '_Accumulator' object has no attribute 'first_timestamp'. The accumulator had been moved onto the grouped records dataclasses, but three increment sites and parse_session still read flat attributes that no longer existed. parse_session now hands over acc.meta and acc.counts directly; only subagent_count comes from elsewhere, since no transcript line carries it. Two modules broke the 500-line limit, so they were split along seams that were already there. signatures.py takes the text-signature helpers — traces.py was importing them from parse.py, making parse an accidental hub, and now neither imports the other. stats.py takes the pure number and time helpers. parse.py 521 -> 458, detectors.py 559 -> 467. The structural lint findings were refactored, not configured away. _counter_candidates took eight arguments; the five naming which counter field to mine and at what thresholds became a frozen _CounterSpec, so both call sites are one line. _extract_skill carried in_span and a line budget as loop variables across thirteen branches; a _SpanBuffer owns that state now, leaving the walk at four. record() took twelve flat kwargs and now takes one override per record block, with session_meta() so a partial meta override keeps the standard timestamp — a bare SessionMeta(slug=...) would have nulled started_at and quietly changed the per-week arithmetic. All 36 call sites rewritten by an AST pass. tests/factories.py moved into conftest.py, where every other package here keeps shared builders and where name-tests-test does not object. 965 tests pass at 100% statement and branch coverage, every hook is green, and no suppression was added anywhere. `candidates` and `traces skill-finish` both run against the real corpus. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
31 lines
857 B
Python
31 lines
857 B
Python
"""Filesystem locations for the session-autopsy store.
|
|
|
|
Both locations are overridable via environment variables so tests (and any
|
|
future relocation) never touch the real ``~/.claude`` tree.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
from pathlib import Path
|
|
|
|
|
|
def autopsy_home() -> Path:
|
|
"""Return the directory holding sessions.jsonl, REPORT.md and state.json.
|
|
|
|
Returns:
|
|
The ``CLAUDE_AUTOPSY_HOME`` override or ``~/.claude/autopsy``.
|
|
"""
|
|
return Path(os.environ.get("CLAUDE_AUTOPSY_HOME", "~/.claude/autopsy")).expanduser()
|
|
|
|
|
|
def projects_dir() -> Path:
|
|
"""Return the directory containing Claude Code session transcripts.
|
|
|
|
Returns:
|
|
The ``CLAUDE_PROJECTS_DIR`` override or ``~/.claude/projects``.
|
|
"""
|
|
return Path(
|
|
os.environ.get("CLAUDE_PROJECTS_DIR", "~/.claude/projects")
|
|
).expanduser()
|