task: timestamp-unification
created: 2026-02-06
phase: COMPLETE
before_count: 6
current_count: 0
description: |
  Unified 5 different implementations of current_timestamp() into single canonical functions.

instances_fixed:
  - episteme/corpus.rs:15 - made pub, added docstring, added millis variant
  - research/gap_store.rs:297 - REMOVED duplicate fn, now imports from crate
  - corpus_build.rs:63 - now uses current_timestamp()
  - policy.rs:128 - now uses current_timestamp()
  - policy.rs:236 - now uses current_timestamp()
  - expiry.rs:102 - now uses current_timestamp()
  - scan/scanner.rs:267 - now uses current_timestamp_millis()

remaining_acceptable:
  - episteme/corpus.rs:21,28 - CANONICAL IMPLEMENTATION (source of truth)
  - expiry.rs:132,153,212,219 - test code (in #[cfg(test)] module)
  - tests/ack_expiry.rs - test code (acceptable)

enforcement:
  - Added "Do Not #11" to aphoria-dev skill: "Write inline timestamp code"
  - Added to Constraints/NEVER: "Write inline timestamp code"
  - Added to Constraints/ALWAYS: Use current_timestamp() and current_timestamp_millis()

documentation:
  - Updated .claude/skills/aphoria-dev/skill.md with timestamp usage rules
