Skip to content

Upstream 5/5: feedback, talk dialog and a fixture conference year for e2e (dddperth #198–#203) - #26

Merged
JakeGinnivan merged 8 commits into
mainfrom
jakeginnivan/upstream-fork-prs-158-202
Oct 19, 2026
Merged

JakeGinnivan merged 8 commits into
mainfrom
jakeginnivan/upstream-fork-prs-158-202

Conversation

@JakeGinnivan

Copy link
Copy Markdown
Contributor

Summary

5/5 of the upstream catch-up. Conference and talk feedback, the talk dialog and admin nav, fork PRs #198–#203.

feedback   conference and talk forms, admin view, Excel export; talks open once they've finished; Meet the Experts question
agenda     talks open in a dialog with speaker bios and embedded recordings
admin      grouped sidebar nav with a mobile drawer
migrations 0029–0030

New: a fixture conference year for e2e (8652a72). The feedback e2e spec needs a conference whose agenda is published and whose feedback is open, but the stub's real 2026 is only a save-the-date. Rather than tie tests to a real year's config, a test can now opt its browser into a made-up year:

sequenceDiagram
    participant Spec
    participant Worker
    Spec->>Worker: cookie __e2eFixtureConference
    Worker->>Worker: load-context: if not production && E2E_FIXTURE_CONFERENCE=true
    Worker->>Worker: conferences = FIXTURE_CONFERENCES (fixture year only)
    Worker-->>Spec: /agenda/FIXTURE_YEAR with feedback open
Loading
-getYearConfig(year, appConfig)          // read from the static manifest
+getYearConfig(context, year)            // read the request's conferences
+getConferences(context)
+resolveYearConfig(conferences, year, appConfig)   // pure, for code with no request

It works per browser, like __devDateOverride, so the home page and its baselines still render the real conference. Portal-year lookups (map-sessionize, admin.speakers, exhibitor-export) deliberately keep reading conferenceManifest.conferences.

Evidence

  • Before: feedback-links.spec.ts fails in the stub because 2026 has no published agenda.
    After: e2e 67 passed. Build, typecheck, lint and unit tests (734 passed) all pass. dev-date-override.test.ts greps the production worker for the fixture cookie name and doesn't find it.
  • Visual: pnpm vr 81 passed. The 9 talk-detail-* baselines were regenerated in the container (82944f3), because the talk page is now a dialog with the speaker's bio. Those are the only baselines that change across the whole stack.

Merge Danger

Door: one-way

Adds D1 migrations 0029–0030.

Blast Radius: agenda

The getYearConfig signature change touches about 30 call sites. Forks with their own callers will need to switch to the (context, year) form, and dddperth's next /core-pull will conflict there and in a few tests. Resolve those toward upstream.


Part of a 5-PR stack that brings ddd-core up to date with every core/ change merged in dddwa/dddperth since #157. Each fork PR is replayed as one commit, credited to its author, with its fork PR number in the message. Merge the stack in order, starting at 1/5.

@JakeGinnivan
JakeGinnivan added this pull request to stack #28 October 19, 2026 00:41
@JakeGinnivan
JakeGinnivan force-pushed the jakeginnivan/upstream-fork-prs-158-202 branch from 82944f3 to 8270b83 Compare October 19, 2026 01:47
@JakeGinnivan
JakeGinnivan force-pushed the jakeginnivan/upstream-fork-prs-158-202 branch from 8270b83 to 2f11bf7 Compare October 19, 2026 02:09
Base automatically changed from jakeginnivan/upstream-4-runsheets to main October 19, 2026 02:14
…el export

Upstreamed from dddwa/dddperth#198 (fork merge 37f4654).
Visual baselines are left fork-local.

- feat(feedback): D1 tables and store for conference and talk feedback
- feat(feedback): /feedback form for conference and talk feedback, linked from the agenda
- feat(feedback): admin feedback page with per-talk summaries and an Excel export
- fix(feedback): send the feedback cookie with data requests so resubmissions replace
- chore(2026): commit the public agenda endpoint now the agenda is published
- feat(feedback): mark every text field as optional
- feat(feedback): scroll to the top and focus the thank-you after submitting
- fix(feedback): solid focus outline on inputs and stars
- feat(feedback): one talk response per browser, unlimited conference responses
Upstreamed from dddwa/dddperth#199 (fork merge ca5756e).
Visual baselines are left fork-local.

- feat(theme): dvh, dialog max-height and zero radius tokens
- feat(agenda): open talks in a dialog over the agenda, with speaker bios
- test(visual): regenerate talk detail baselines for the talk dialog
- test(fixtures): label the fixture speaker tagline as a tagline
Upstreamed from dddwa/dddperth#201 (fork merge 2fc2a80).
Visual baselines are left fork-local.

- feat(agenda): embed talk recordings on the talk detail page
- docs(core): prefer Panda tokens over [...] escape-hatch values
Upstreamed from dddwa/dddperth#200 (fork merge a2f8f15).
Visual baselines are left fork-local.

- feat(admin): grouped sidebar nav, collapsing to a menu drawer on small screens
- fix(admin): pin the admin area to the light theme
Upstreamed from dddwa/dddperth#202 (fork merge 67b34c0).
Visual baselines are left fork-local.

- feat(feedback): refuse feedback on talks that haven't finished
- feat(agenda): show feedback links only once a talk has finished
- feat(feedback): explain when a linked talk hasn't finished yet
- feat(feedback): stop taking feedback on Meet the Experts
Upstreamed from dddwa/dddperth#203 (fork merge e9855a5).
Visual baselines are left fork-local.

- feat(feedback): ask about Meet the Experts on the conference form
feedback-links.spec.ts (from dddwa/dddperth#202) only passed where the
current conference happened to fall on the Sessionize fixture date with an
open feedback window. DDD Perth's 2026 does; conference-stub's 2026 is a
"save the date" skeleton with no agenda, so here every test in it failed.

Instead of depending on any real year's dates, a test can now opt its
browser context into a synthetic conference year
(e2e/fixtures/conference-year.ts): it sits on FIXTURE_DATE, takes its
agenda from the Sessionize fixtures and has its feedback window open. The
worker then sees that as the only conference, so it is current by
construction. Per context, by cookie, like __devDateOverride — suite-wide
would change what `/` and its baselines render for every other test.

That needs the request, not the module, to decide which conferences exist:

- load-context builds the request's conferences (fixture or manifest) and
  derives conference state from it; routes read years via getConferences.
- getYearConfig(context, year) replaces getYearConfig(year, appConfig).
  resolveYearConfig keeps a context-free path for code with no request.
- Lookups keyed by a portal's configured year (speaker portal endpoint,
  admin speaker emails, exhibitor export) keep reading the real manifest,
  explicitly: they are about the real event, not the request.

Guarded like the other e2e seams: a production-mode check Vite folds away,
plus E2E_FIXTURE_CONFERENCE, set only by e2e/start-dev-server.mjs. The
cookie name is in the production-build grep in dev-date-override.test.ts.
dddwa/dddperth#199 opens talks in a dialog with speaker bios, which changes
the talk-detail capture at every engine and viewport: 9 baselines, the same
9 the fork regenerated. Rendered here in the pinned container against
conference-stub's theme and fixture speakers, not copied from the fork.

No other baseline moved across the whole series: slices 1-4 pass the visual
suite against the existing baselines unchanged.
@JakeGinnivan
JakeGinnivan force-pushed the jakeginnivan/upstream-fork-prs-158-202 branch from 2f11bf7 to ebe65ca Compare October 19, 2026 02:14
@JakeGinnivan
JakeGinnivan merged commit 5ecc615 into main Oct 19, 2026
3 checks passed
@JakeGinnivan
JakeGinnivan deleted the jakeginnivan/upstream-fork-prs-158-202 branch October 19, 2026 02:21
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