- ngn-weekly-stale-summary: skill-backed cron at Sunday 20:00 SGT - ngn-weekly-archive: no_agent cron at Sunday 20:05 SGT (5 min after summary) - Both registered, verified, test-run successful
6.5 KiB
6.5 KiB
phase, plan, subsystem, tags, requires, provides, affects, tech-stack, key-files, key-decisions, patterns-established, requirements-completed, duration, completed
| phase | plan | subsystem | tags | requires | provides | affects | tech-stack | key-files | key-decisions | patterns-established | requirements-completed | duration | completed | |||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 08-cron-reporting | 02 | cron |
|
|
|
|
|
|
|
|
|
~1 min | 2026-06-15 |
Phase 8 Plan 2: Weekly Stale Summary + Archive Cron Summary
Two weekly cron jobs registered: ngn-weekly-stale-summary (Sunday 20:00 SGT, skill-backed) and ngn-weekly-archive (Sunday 20:05 SGT, no_agent with archive-stale-sessions.sh) — completing the stale session lifecycle and Jira-awareness reporting
Performance
- Duration: ~1 min
- Started: 2026-06-15T14:46:32Z
- Completed: 2026-06-15T14:47:26Z
- Tasks: 2
- Files modified: 2 (Hermes cron DB entries — outside project repo)
Accomplishments
- Registered
ngn-weekly-stale-summarycron at Sunday 20:00 SGT with--skill session— LLM agent loads session skill to understand session structure, enumerate stale sessions via JSONL export, discover Jira ticket keys via hysteresis_recall, and compose Telegram summary (no Jira mutations per D-10/D-15) - Registered
ngn-weekly-archivecron at Sunday 20:05 SGT with--no-agent --script archive-stale-sessions.sh— deterministic CLI archive that exports sessions to JSONL and optionally prunes stale ones (DRY_RUN=true default from Plan 1) - 5-minute offset between summary (20:00) and archive (20:05) prevents race condition where prune could delete sessions the summary agent is still enumerating
- Both cron jobs visible in
hermes cron listwith correct schedules - Test-run of both jobs succeeded without CLI errors
- Requirements CRON-02 (weekly archive) and CRON-03 (Jira-awareness in reports) both addressed
Task Commits
Each task was committed atomically:
- Task 1: Register weekly stale session summary cron (Sunday 20:00 SGT, skill-backed) —
90214dd(feat) - Task 2: Register weekly archive cron (Sunday 20:05 SGT, no_agent) —
2faeb0a(feat)
Plan metadata: See final metadata commit.
Note: Cron jobs are registered in Hermes internal DB — committed with --allow-empty descriptors.
Files Created/Modified
- Hermes cron DB:
ngn-weekly-stale-summaryjob (schedule:0 20 * * 0, skills: session, delivery: telegram, prompt: stale session summary with Jira discovery) - Hermes cron DB:
ngn-weekly-archivejob (schedule:5 20 * * 0, mode: no-agent, script: archive-stale-sessions.sh, delivery: telegram)
Decisions Made
- Skill-backed summary vs no_agent archive: The summary cron uses
--skill sessionbecause it needs LLM reasoning to understand session structure, identify stale sessions, and compose natural-language Telegram messages. The archive cron uses--no-agentbecause it only runs deterministic CLI commands (export + prune) with no LLM cost. - 5-minute offset: Archive at 20:05, 5 minutes after summary at 20:00. This follows RESEARCH.md Anti-Patterns guidance — prevents race condition where the prune could remove sessions the summary agent is still enumerating.
- Prompt detail: Full 5-step prompt embedded in summary cron — agent receives complete instructions for stale session discovery via JSONL export, Jira key lookup via hysteresis_recall, Telegram composition with 4096-char limit, and explicit prohibition against Jira mutations.
Deviations from Plan
None — plan executed exactly as written.
Issues Encountered
- None. Both cron registrations succeeded on first attempt.
Threat Flags
None — all threat mitigations from the plan's threat model are satisfied:
- T-08-06 (Tampering — weekly stale summary cron prompt): Accepted — prompt is authored during plan execution, not user-controllable.
- T-08-07 (Repudiation — stale session prune): Mitigated — archive script's DRY_RUN=true default means no prune until user flips the flag; timestamped JSONL exports serve as audit trail.
- T-08-08 (Denial of Service — race condition): Mitigated — archive at 20:05 (5 min after summary at 20:00), preventing prune-from-underneath during summary enumeration.
Next Phase Readiness
- Stale session lifecycle complete: summary (Sunday 20:00 SGT) + archive (Sunday 20:05 SGT) automated
- Daily report already running at 09:00 SGT from Plan 1
- Phase 8 complete — all three cron jobs registered (daily report, weekly summary, weekly archive)
- User should verify first archive dry-run output and set
DRY_RUN=falseinarchive-stale-sessions.shto enable pruning
Phase: 08-cron-reporting Completed: 2026-06-15