Redesign failed-run recovery eligibility and lineage - #3243
Open
AbigailDeng wants to merge 3 commits into
Open
Conversation
Contributor
Author
Local verification
|
…y-vnext' into fix/2026-08-06_run-retry-eligibility-lineage
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem and solution
Run detail inferred retry eligibility from failed-step count and run-again eligibility from graph shape. That made non-retryable failures look actionable, left unavailable actions unexplained, and could not represent authoritative retry consequences or lineage.
This frontend change removes those inferences and consumes an optional typed
recoverysubcontract from the run-detail read model. It:New run accepted, with transport identifiers kept in technical details;newRunActorIdas a run identity.Impact paths
Backend dependency
The current
ObservatoryRunDetailbackend contract does not yet expose typed retry/run-again eligibility, failure recommendation, definition revision, reuse semantics, cost semantics, or durable parent/child run lineage. The current fork receipt exposesnewRunActorId, not a newrunId.Until the backend adds and populates the typed read-model fields consumed here,
recoverydecodes tonull, both fork actions remain unavailable with visible explanations, and no lineage link is invented. This is therefore the frontend portion of #3225 and intentionally does not close the issue.Local verification
pnpm exec jest --selectProjects jsdom --runTestsByPath src/locales/catalog.test.ts src/pages/workflow-activity-vnext/activity/RunDetailPage.test.tsx src/pages/workflow-activity-vnext/activity/runRecovery.test.ts src/pages/workflow-activity-vnext/hooks/useRunObservation.test.ts src/shared/api/workflowActivityApi.test.ts --runInBand- PASS, 5 suites / 28 tests.pnpm exec biome format <10 analyzer-selected files>- PASS, 10 files, no fixes.pnpm exec biome lint <10 analyzer-selected files>- PASS, 10 files, no fixes.bash tools/ci/test_stability_guards.sh- PASS.python3 docs/design-baselines/workflow-activity-vnext/verify-baseline.pyfromapps/aevatar-console-web- PASS, 17/17 frames and byte-identical generator output.git diff --check- PASS.http://localhost:5188/scopes/scope-alpha/workflow-activity-vnext/activity/run-source-alpha, but local interactive verification was blocked by the existing NyxID configuration gate becauseNYXID_BASE_URLis not configured. Authentication state was not bypassed or inspected.Design baseline
Design baseline:
apps/aevatar-console-web/docs/design-baselines/workflow-activity-vnext/
Primary design:
aevatar-workflow-activity-vnext.excalidraw
Design SHA-256:
30e74d7b410ae72c4c91432355436679033679c54c10b1702908435b001577de
Contract specification:
apps/aevatar-console-web/docs/superpowers/specs/
2026-08-04-workflow-activity-vnext-design.md
User paths:
apps/aevatar-console-web/docs/superpowers/specs/
2026-08-04-workflow-activity-vnext-user-paths.md
Authentication and localization:
Existing Aevatar login, callback, session, returnTo, and Umi locale logic;
presentation may change, behavior may not.
Production data source:
Real APIs and API-acknowledged user actions only; no mock fallback.
Baseline integrity:
python3 apps/aevatar-console-web/docs/design-baselines/
workflow-activity-vnext/verify-baseline.py
Relates to #3225.
CI remediation (2026-08-07)
be74bab5302b0ec9b5d4b2d6eecb9156dbf829a0; this supplies the three backend-catalogue locale keys that caused the priorconsole-webfailure.pnpm --dir apps/aevatar-console-web exec jest src/locales/hardcodedCopyAudit.test.ts --runInBand- 1 suite / 7 tests passed.pnpm exec jest src/pages/workflow-activity-vnext/activity/RunDetailPage.test.tsx src/pages/workflow-activity-vnext/activity/runRecovery.test.ts src/pages/workflow-activity-vnext/hooks/useRunObservation.test.ts src/shared/api/workflowActivityApi.test.ts --runInBand- 4 suites / 23 tests passed.pnpm exec biome check <10 analyzer-selected changed files>- 10 files passed.bash tools/ci/test_stability_guards.sh- passed.