Skip to content

fix: keep every answer from repeated provider blocks - #255

Merged
vjovanov merged 4 commits into
mainfrom
fix/issue-253
Nov 5, 2026
Merged

vjovanov merged 4 commits into
mainfrom
fix/issue-253

Conversation

@vjovanov

@vjovanov vjovanov commented Nov 5, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #253

With two github-issues blocks answering [1 2 3] and [4], ephor refresh javelin --quiet previously kept only whichever block finished last and exited 0. It now retains [1 2 3 4] in either completion order.

Both project providers and site sources retain every contribution under the existing provider identity. Each configured block contributes to that provider's slot, as clarified in §FS-001-forge-interface.9. Overlapping subjects retain their combined reasons. Shared reports also combine every report's attribution evidence before placing the subject once, preserving existing precedence and ambiguity rules. Combination and completeness are established before attribution or persistence publishes an answer (§AR-008-pipeline.2).

Any failed contribution makes the whole provider slot incomplete. Every distinct diagnosis remains visible, and the previous whole complete slot stays labelled last-good without advancing its timestamp or cursor. A successful subset cannot replace it as current; without previous data, the failure remains explicit and no rows are invented. A later complete answer replaces the old slot and clears failure state, including when empty. Discovered task stores of the same kind follow the same completeness and failure rule (§FS-001-forge-interface.6.1).

Refresh exits count actual contributions: mixed success and failure gives exit 4; every attempted contribution failing gives exit 3. Empty successful answers count, while idle projects and cached last-good data cannot turn total failure into partial failure. Five existing E2E-004 store-only failure expectations now require exit 3 because their sole attempted store failed. The manual explains repeated blocks, incomplete answers and recovery. Configuration shape, public provider identity, cache schema and binding/move policy are preserved. Query-cost work in #252 is separate.

Eight enabled regressions in E2E-065-every-provider-contribution-counts cover project and site answers, overlapping reasons and placement evidence, mixed and total failures, whole-slot last-good/recovery, and discovered stores. The overlapping shared-report regression failed before the attribution repair and passed afterward: both block orders now yield one project row with both reasons and no duplicate in the unattributed bucket. All eight passed with zero ignored tests.

Local validation at 508f2229bf finished READY: yes on the first gate run, in 8m02s:

  • The original offline reproducer retained [1 2 3 4] in both forced completion orders and all six unheld turns; mixed failure returned exit 4 with a diagnosis in either order.
  • pre-commit run --all-files passed Rust formatting, the warnings-as-errors locked all-target build, locked all-target Rust tests, Python tests, CI-pinned grund 0.18.0 check/format, file budgets and content guards.
  • Explicit Python integration discovery passed 113 tests; check_boundary.py and check_parity.py passed.
  • The full Rust suite passed again with symlinked TMPDIR, including all eight issue-253 regressions with none ignored.

These fixtures use an offline forge. Hosted CI and merge verification remain for shipping; the generated workflow summary below covers recorded invocations before shipping.

AI workflow: `rhei`, 13 agent invocations across 1 model; 8 tasks completed, 8 in progress.
  1. github-issues-agent-grounds-ephor-253-implement-fba34977.ticket supervising (visit 1) — cdx, openai/gpt-6.1-sol — 1m43s — 523.7k in / 3.5k out
  2. github-issues-agent-grounds-ephor-253-implement-fba34977.ticket supervising (visit 2) — cdx, openai/gpt-6.1-sol — 3m09s — 817.3k in / 7.0k out
  3. github-issues-agent-grounds-ephor-253-implement-fba34977.ticket.specify specify — cdx, openai/gpt-6.1-sol — 11m32s — 4.1M in / 26.2k out
  4. github-issues-agent-grounds-ephor-253-implement-fba34977.ticket supervising (visit 3) — cdx, openai/gpt-6.1-sol — 2m07s — 629.6k in / 5.0k out
  5. github-issues-agent-grounds-ephor-253-implement-fba34977.ticket.implement implement — cdx, openai/gpt-6.1-sol — 12m18s — 5.4M in / 22.9k out
  6. github-issues-agent-grounds-ephor-253-implement-fba34977.ticket supervising (visit 4) — cdx, openai/gpt-6.1-sol — 1m53s — 578.2k in / 4.5k out
  7. github-issues-agent-grounds-ephor-253-implement-fba34977.ticket.review-1 review — cdx, openai/gpt-6.1-sol — 6m00s — 2.8M in / 14.5k out
  8. github-issues-agent-grounds-ephor-253-implement-fba34977.ticket supervising (visit 5) — cdx, openai/gpt-6.1-sol — 1m53s — 493.2k in / 4.0k out
  9. github-issues-agent-grounds-ephor-253-implement-fba34977.ticket.fix-1 fix — cdx, openai/gpt-6.1-sol — 14m52s — 5.9M in / 29.5k out
  10. github-issues-agent-grounds-ephor-253-implement-fba34977.ticket supervising (visit 6) — cdx, openai/gpt-6.1-sol — 2m02s — 729.7k in / 4.8k out
  11. github-issues-agent-grounds-ephor-253-implement-fba34977.ticket.review-2 review — cdx, openai/gpt-6.1-sol — 2m45s — 1.2M in / 6.6k out
  12. github-issues-agent-grounds-ephor-253-implement-fba34977.ticket supervising (visit 7) — cdx, openai/gpt-6.1-sol — 1m54s — 840.2k in / 4.4k out
  13. github-issues-agent-grounds-ephor-253-implement-fba34977.ticket supervising (visit 8) — cdx, openai/gpt-6.1-sol — 1m59s — 527.3k in / 4.0k out
Accounting Value
cost $6.13
total tokens 24.6M
input tokens (incl. cache) 24.4M
input cache read 23.2M
input cache write -
output tokens (incl. cache) 137.0k
output cache read -
output cache write -
coverage Complete

Keep every overlapping report’s reasons and attribution evidence before choosing one home, preserving existing claim precedence and ambiguity (§FS-001-forge-interface.6.1).
@vjovanov vjovanov changed the title spec: retain every contribution to a provider answer fix: keep every answer from repeated provider blocks Nov 5, 2026
@vjovanov
vjovanov marked this pull request as ready for review November 5, 2026 19:40
@vjovanov
vjovanov requested a review from kimeta November 5, 2026 19:40
The rebase onto main brought batched, aliased issue comment reads
(§FS-001-forge-interface.8.3), which the #253 fixture forge refused as an
unknown query. Answer each aliased read from the same four issues.
@vjovanov
vjovanov merged commit e885b97 into main Nov 5, 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.

Two blocks of one provider under a project overwrite each other's result, so refresh silently loses one block's whole answer and exits 0

1 participant