Skip to content

Phase 1: Contract spine — router, adapters, guardrails, slug, reset#3

Merged
joshtvill merged 21 commits intomainfrom
feat/phase1-spine
Sep 6, 2025
Merged

Phase 1: Contract spine — router, adapters, guardrails, slug, reset#3
joshtvill merged 21 commits intomainfrom
feat/phase1-spine

Conversation

@joshtvill
Copy link
Owner

Goal: each screen renders with zero side effects, using stable adapter APIs.

  • Add services/sX_adapter.py for each screen.
  • Refit screens to call adapters only.
  • Remove disk writes from screens (route via services/artifacts.py).

[Fix: Navigation]

  • Implement router in app.py.
  • Screens return valid_to_proceed; nav lives only in app.py.
  • Add ui.blocks.nav_back_next().

[Fix: Sidebar UI]

  • Add dev-only sidebar in app.py behind env flag (DOE_WIZARD_DEBUG=1).
  • No sidebar in prod.

[Fix: Service/adapter fixes]

  • Put auto-slug in utils/naming.py + s1_adapter.
  • Put roles candidates/validation in s3_adapter.

Acceptance

  • app.py can walk S1→S6 without exceptions.
  • No disk writes in screens.
  • Dev sidebar toggles with env var.
  • Grandfathered legacy screens exceptions in phase0 guardrails test gone
  • legacy unit and e2e tests have xfail tags

…mpute_slug/validate_session_inputs, candidate_role_columns/validate_roles)
…e ported in Phase 2/4) and register marker in pytest.ini
…g>-<Objective>-<Response>); keep auto_slug for back-compat
…d fixed-size buttons; router handles reset safely
… make Reset clear current screen to defaults without navigation
@joshtvill
Copy link
Owner Author

additional changes:

  • slug convention aligned to contract
  • reset button added to all screens

@joshtvill joshtvill merged commit 9a65d85 into main Sep 6, 2025
1 check passed
@joshtvill joshtvill deleted the feat/phase1-spine branch September 6, 2025 02:11
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.

1 participant