Skip to content

fix: warn when displayed feeds trail newer local caches - #248

Merged
vjovanov merged 2 commits into
mainfrom
fix/issue-244
Oct 22, 2026
Merged

vjovanov merged 2 commits into
mainfrom
fix/issue-244

Conversation

@vjovanov

@vjovanov vjovanov commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #244

After a separate ephor refresh demo successfully replaced OLD cache row with NEW cache row on disk, an open ephor tui used to keep showing OLD without saying the screen was behind. It now keeps that displayed snapshot and adds a persistent warning on the periodic tick:

Displayed feed outdated: demo — newer cache available; press r to refresh

The warning names every affected project and wraps to the terminal width. Rows, selection and seen/done state stay intact. Other messages and unrelated project refreshes cannot clear it: each project's warning disappears only when an existing feed load or refresh absorption brings that displayed snapshot up to the newer cache. The new functional point specifies this behavior and keeps it separate from provider-failure stale labeling (§FS-001-forge-interface.7.1).

The TUI observes only its session projects' known cache files. Unchanged metadata avoids parsing and added redraws; changed files are checked for valid newer fetch evidence. Initial loading, reloads and per-project absorption establish their metadata baseline before reading the displayed snapshot, so a replacement during loading remains detectable. The updated session explanation documents this local observation and when warnings retire (§AR-009-surfaces.2).

Observation starts no provider fetch, changes no provider health and writes no cache. Missing, unreadable, malformed, incompatible or wrong-project cache data preserves last-good rows and any established warning. The existing r action remains the remedy; CLI/JSON output, cache schema, provider interfaces and refresh scope retain their contracts.

The specification and three failing regressions were committed first in 86d318c6db; implementation 6f4b671dba enabled all three without changing their assertions. The real-terminal regression uses pyte==0.8.2, added as a test dependency and installed by CI before Cargo tests.

Local verification on 6f4b671dba passed:

  • All three regressions: real-terminal external refresh and r recovery, rendered warning lifecycle with reader-state preservation, and deterministic cache replacement during the initial read. None is ignored.
  • The unchanged triage reproducer: OLD remained on the current screen alongside the exact demo warning, NEW was on disk, and only the initial and external forge fetches occurred. Exit 0.
  • pre-commit run --all-files: Rust formatting, warnings-as-errors build, all-target Rust tests, Python integration, CI-pinned grund 0.18.0 check/format, fissile and content guards.
  • Standalone Python integration discovery: 113 tests passed; boundary and parity checks passed; explicit pinned grund fmt --check passed.
  • The complete Rust suite passed again with a symlinked TMPDIR, including all three regressions.

The local gate finished READY: yes on its first run; independent review approved with no findings. Remote CI is checked during shipping. The generated workflow summary below covers recorded invocations before shipping.

AI workflow: `rhei`, 11 agent invocations across 1 model; 6 tasks completed, 10 in progress.
  1. github-issues-agent-grounds-ephor-244-implement-8b944eef.ticket supervising (visit 1) — cdx, openai/gpt-6.1-sol — 2m22s — 555.6k in / 4.6k out
  2. github-issues-agent-grounds-ephor-244-implement-8b944eef.ticket.triage assessing (visit 1) — cdx, openai/gpt-6.1-sol — 1m32s — 303.7k in / 2.5k out
  3. github-issues-agent-grounds-ephor-244-implement-8b944eef.ticket.triage reproducing (visit 1) — cdx, openai/gpt-6.1-sol — 7m42s — 1.3M in / 14.4k out
  4. github-issues-agent-grounds-ephor-244-implement-8b944eef.ticket supervising (visit 2) — cdx, openai/gpt-6.1-sol — 2m34s — 707.3k in / 6.8k out
  5. github-issues-agent-grounds-ephor-244-implement-8b944eef.ticket.specify specify — cdx, openai/gpt-6.1-sol — 15m03s — 4.3M in / 28.8k out
  6. github-issues-agent-grounds-ephor-244-implement-8b944eef.ticket supervising (visit 3) — cdx, openai/gpt-6.1-sol — 1m56s — 455.6k in / 4.0k out
  7. github-issues-agent-grounds-ephor-244-implement-8b944eef.ticket.implement implement — cdx, openai/gpt-6.1-sol — 10m19s — 2.8M in / 16.8k out
  8. github-issues-agent-grounds-ephor-244-implement-8b944eef.ticket supervising (visit 4) — cdx, openai/gpt-6.1-sol — 2m24s — 450.6k in / 4.2k out
  9. github-issues-agent-grounds-ephor-244-implement-8b944eef.ticket.review-1 review — cdx, openai/gpt-6.1-sol — 5m17s — 1.3M in / 9.6k out
  10. github-issues-agent-grounds-ephor-244-implement-8b944eef.ticket supervising (visit 5) — cdx, openai/gpt-6.1-sol — 2m45s — 824.1k in / 4.7k out
  11. github-issues-agent-grounds-ephor-244-implement-8b944eef.ticket supervising (visit 6) — cdx, openai/gpt-6.1-sol — 2m07s — 514.8k in / 4.5k out
Accounting Value
cost $4.17
total tokens 13.6M
input tokens (incl. cache) 13.5M
input cache read 12.6M
input cache write -
output tokens (incl. cache) 101.0k
output cache read -
output cache write -
coverage Complete

@vjovanov vjovanov changed the title spec: identify a displayed feed older than its cache fix: warn when displayed feeds trail newer local caches Oct 22, 2026
@vjovanov
vjovanov marked this pull request as ready for review October 22, 2026 15:58
@vjovanov
vjovanov requested a review from kimeta October 22, 2026 15:58
@vjovanov
vjovanov merged commit d0bc472 into main Oct 22, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ephor tui never re-reads a feed cache another process refreshed, so it keeps showing stale last-good rows

1 participant