Skip to content

Add Scenario progress foundation - #2372

Draft
Roman Lutz (romanlutz) wants to merge 1 commit into
mainfrom
copilot/romanlutz-scenario-pr-01-progress-upstream
Draft

Add Scenario progress foundation#2372
Roman Lutz (romanlutz) wants to merge 1 commit into
mainfrom
copilot/romanlutz-scenario-pr-01-progress-upstream

Conversation

@romanlutz

@romanlutz Roman Lutz (romanlutz) commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds persistent versioned Scenario run plans, stable logical work identities, backend-authoritative sizing, incremental progress cursors, and corrected timing/resume semantics. Planned units deduplicate repeated logical objectives while execution attempts remain observable.

What this layer adds

  • Versioned normalized ScenarioRunPlan and progress models persisted in Scenario result metadata.
  • Stable atomic-group and seed-unit identities shared across planning and execution.
  • Incremental, run-bound opaque progress cursors with bounded delta paging.
  • Backend-authoritative sizing, corrected timing, resume validation, and legacy reconstruction.
  • Keyword-only multi-parameter APIs and typed completion callbacks.

Visual contract

Observable Scenario progress contract

Stack

This is 1 of 7 in the Scenario GUI dependent PR stack and targets main.

Layer Scope Pull request
1 Progress foundation (this PR) #2372
2 Catalog and launch #2373
3 Live progress #2374
4 Run history #2375
5 FIFO scheduling #2376
6 Configuration sizing #2377
7 Result details #2378

See the full implementation, screenshots, walkthrough, validation, and operational notes.

Validation

  • Complete backend unit suite: 15,212 passed, 120 skipped.
  • Complete frontend suite: 68/68 suites, 1,286/1,286 tests; lint, TypeScript, and production build passed.
  • Mock Playwright with retries disabled: 91 passed, 0 failed, 0 skipped.
  • Seeded Playwright with retries disabled: 62 passed, 0 failed, 0 skipped.
  • All configured pre-commit hooks passed; distinguished-engineer review approved the final stack.

Compatibility note

Prepended-conversation request converters now default to user-role messages, and strict non-chat targets can reject excluded roles. This intentional behavior change is isolated in this foundation layer.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 5d02c2d5-b499-4f78-a04d-03bffa750817

task.cancel()
with pytest.raises(asyncio.CancelledError):
await task
await started.wait()
cancelled_waiter.cancel()
with pytest.raises(asyncio.CancelledError):
await cancelled_waiter
service._registry = MagicMock()
service._registry.create_instance.return_value = scenario
stale = asyncio.create_task(asyncio.sleep(0, result=estimate))
await stale

from alembic import op

revision: str = "6b8d0f2a4c1e"
from alembic import op

revision: str = "6b8d0f2a4c1e"
down_revision: str | None = "4c9a6e1f2b7d"

revision: str = "6b8d0f2a4c1e"
down_revision: str | None = "4c9a6e1f2b7d"
branch_labels: str | Sequence[str] | None = None
revision: str = "6b8d0f2a4c1e"
down_revision: str | None = "4c9a6e1f2b7d"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None
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.

2 participants