Maester v5.2 — ActionItem 수명주기 (감쇠+휴면) LIVE 배포
BLUF
보드/recall이 지나간·완료된 액션을 today/critical로 잘못 리마인드하던 문제를 근본 해결. 액션에 직교 수명주기 축(active/dormant) + freshness 반감기(14일) 도입. 오래된(>~24일 무접촉) open 액션을 **되돌릴 수 있는 dormant**로 내림(삭제·작업상태 변경 0). 레거시 1회 청소로 stale 2,294건 휴면 → 보드 후보 2,514→262, overdue 2→0, today=신선한 실제 업무 3건만. main 머지(311061f)+서비스 재시작+야간 타이머(05:07 KST) 배포 완료. 어제 v5.1(추출 정밀화)의 나머지 절반.
변경 (커밋 311061f, main)
tools/action_lifecycle.py— 순수함수(freshness/decay/supersession/plan_sweep) + 19 유닛테스트graph/neo4j_client.py—lifecycle_state인덱스/ON CREATE 기본값, 보드+recall 3쿼리에active술어(list_action_board_candidates, find_action_items_for_docs, search_action_items), set_/bulk_set_/revive/list_dormant/docs_referencing/backfilltools/daily_board.py+weekly_execution.py— board_score_v2 freshness 항scripts/action_lifecycle_sweep.py— dry-run 기본 CLI (apply/legacy/revive/list-dormant/migrate-baseline)systemd/maester-action-lifecycle.{service,timer}— 매일 05:07 KST 자동 스윕
검증 (증거)
- 유닛 19/19 통과, v5.1 회귀 통과
- 라이브 API 보드: overdue 0, today 3(전부 f≥0.84 신선: 삼성 스카우트 미팅/키퍼 실사 등), 5/11 stale "아웃바운드 대시보드" P0 →
dormant(f=0.29) - 되돌리기:
scripts/action_lifecycle_sweep.py revive <action_id>
안전 / 롤백
- 데이터 삭제 0, 휴면=가역, 전 전이 audit(
data/action_lifecycle_audit.jsonl+ dormant_at/reason/by props) 기록 - 롤백 =
git reset f1c4044+ 서비스 재시작 +revive(상태 가역)
한계 / 후속
- 대체감지(supersession): Neo4j 노드
content_md미적재(clen=0)라 현재 inert → freshness 감쇠가 주 메커니즘. 노드 content 채워지면 자동 활성. blocked(40)/waiting(10)/snoozed는 의도적 보존(정밀 우선, 임의 폐기 방지) — 원하면 긴 반감기로 확장 가능.- 설계 스펙:
docs/superpowers/specs/2026-06-05-action-lifecycle-design.md