Age signal for the temporary tier: commit-age vs mtime for untracked artifacts #48

Closed
opened 2026-07-14 19:02:39 +00:00 by jared · 1 comment
Owner

Map: #31
Blocked by: (none)

Question

#43 fixed the temporary tier as retain_recent: 3 + max_age_days: 3 measured on git-commit age. But the clearest clutter in the #45 answer key — autoresearch/<run-id>/ — is untracked/gitignored and therefore HAS no commit age, so a commit-age-keyed rule can never fire on it. Same likely applies to other generated-but-untracked trees.

Does the temporary tier need a second age signal (mtime) for untracked paths, a per-rule age_source field, or a different measure entirely? Whatever this concludes either amends or supersedes #43 — record it (ADR if it changes the rulebook schema from #40).

Note the user's stated preference: mtime is simple and sufficient; parsing timestamps out of directory names (260703 in classic-260703-1522) is overly complex by comparison.

Map: #31 Blocked by: (none) ## Question #43 fixed the temporary tier as `retain_recent: 3` + `max_age_days: 3` measured on **git-commit age**. But the clearest clutter in the #45 answer key — `autoresearch/<run-id>/` — is untracked/gitignored and therefore HAS no commit age, so a commit-age-keyed rule can never fire on it. Same likely applies to other generated-but-untracked trees. Does the temporary tier need a second age signal (mtime) for untracked paths, a per-rule `age_source` field, or a different measure entirely? Whatever this concludes either amends or supersedes #43 — record it (ADR if it changes the rulebook schema from #40). Note the user's stated preference: mtime is simple and sufficient; parsing timestamps out of directory names (`260703` in `classic-260703-1522`) is overly complex by comparison.
jared added the
wayfinder:grilling
label 2026-07-14 19:02:39 +00:00
jared self-assigned this 2026-07-14 19:46:52 +00:00
Author
Owner

RESOLUTION: #43's age-signal decision stands unamended — this ticket sharpens one definition rather than superseding anything.

  1. The premise was a misread. #43 point 5 already specifies the fallback: age = git commit time, falling back to filesystem mtime for untracked files. mtime-alone was rejected there because clone/branch-switch resets mtimes — an objection that does not apply to the fallback, since untracked files don't exist in a fresh clone and checkouts don't rewrite them. So untracked artifacts (autoresearch runs, scratch notes) are covered, and no per-rule age_source field is needed.

  2. Sharpened definition — directory-entry mtime. For a directory-rule entry that is untracked (e.g. autoresearch/improve-260710-1057/), its mtime is the directory inode's own mtime (one stat), NOT a recursive max-mtime walk. Rationale: the temporary tier's failure mode is self-healing — a spuriously bumped mtime merely delays deletion one round — so the cheap signal suffices. Decided with the user (option A).

  3. No rulebook schema change (#40 untouched), so no ADR needed. #46 should fold the sharpened definition into the spec's temporary-tier section.

RESOLUTION: #43's age-signal decision stands unamended — this ticket sharpens one definition rather than superseding anything. 1. **The premise was a misread.** #43 point 5 already specifies the fallback: age = git commit time, **falling back to filesystem mtime for untracked files**. mtime-alone was rejected there because clone/branch-switch resets mtimes — an objection that does not apply to the fallback, since untracked files don't exist in a fresh clone and checkouts don't rewrite them. So untracked artifacts (autoresearch runs, scratch notes) are covered, and no per-rule age_source field is needed. 2. **Sharpened definition — directory-entry mtime.** For a directory-rule entry that is untracked (e.g. autoresearch/improve-260710-1057/), its mtime is the **directory inode's own mtime** (one stat), NOT a recursive max-mtime walk. Rationale: the temporary tier's failure mode is self-healing — a spuriously bumped mtime merely delays deletion one round — so the cheap signal suffices. Decided with the user (option A). 3. **No rulebook schema change** (#40 untouched), so no ADR needed. #46 should fold the sharpened definition into the spec's temporary-tier section.
jared closed this issue 2026-07-14 19:58:20 +00:00
Sign in to join this conversation.
No description provided.