Skip to content

Upstream dddperth #204–#215: sponsor feedback, portal move, Temporal dates, blog - #30

Merged
JakeGinnivan merged 15 commits into
mainfrom
jakeginnivan/upstream-fork-prs-204-215
Oct 29, 2026
Merged

JakeGinnivan merged 15 commits into
mainfrom
jakeginnivan/upstream-fork-prs-204-215

Conversation

@JakeGinnivan

@JakeGinnivan JakeGinnivan commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Upstreams the eight dddperth PRs core didn't have yet: #204, #207, #210, #214, #215, #211, #212 and #209. Everything up to #208 was already here (#26, #27 and #29).

Summary

One commit per fork PR, in the fork's merge order, then the adjustments core needed:

f60ec60  #204  sponsor feedback through the portal         (+ migration 0031)
5e7c52e  #207  sponsor portal moves to /sponsor-portal     (/portal/* → 308)
44682fe  #210  dates default to the conference timezone
98b32f7  #214  bracket escapes → design tokens
a5e0b8c  #215  sponsor tools out of the Jira sync card
62a364b  #211  Temporal replaces Luxon                     (+ core-only ports, below)
47f371f  #212  agenda building closes after the conference
e659fe3  #209  blog machinery, fixture blog posts, header overflow sweep
─── core-only ───
26b4815  tests stop assuming the conference is in Perth
ef415a3  CLAUDE.md: blog fixtures + header sweep notes
2105946  temporal-browser spec runs against the fixture conference
8ba20c2  a11y: MDX code blocks take keyboard focus
dd3b73e  /core-pull + /new-conference: fork migration notes
1e1dcac forks symlink core's skills instead of copying them
…        visual baselines regenerated against the stub

Each PR went across as a 3-way patch of its core/ diff, minus baselines, so any clash with code only core has stopped the patch instead of being overwritten. Four did, and each keeps core's code:

 e2e/fixtures/conference-year.ts      # core-only; Luxon goes away in #211
-  conferenceDate,
-  agendaPublishedDateTime: conferenceDate.minus({ weeks: 4 }),
+  get conferenceDate() { return conferenceTime(`${FIXTURE_DATE}T08:00:00`) },
+  get agendaPublishedDateTime() { … .subtract({ weeks: 4 }) },
  • admin-settings/speakers.test.ts keeps core's inConferenceZone helper, rebuilt on conferenceTime
  • dev-date-override.test.ts keeps the fixture-conference-cookie marker next to #209's fixture-blog one
  • e2e/routes.ts takes #209's fixture blog slug: the suites now render e2e/fixtures/blog for every conference
  • nx.json gets #211's lint inputs, with eslint-rules/ here in place of core/eslint-rules/

Left in the fork on purpose: its 33 baselines, the Medium posts, conference/config/**, scripts/sponsor-manager.mjs, and its root CLAUDE.md/AGENTS.md. Core already had its own date-doc and Temporal notes, which arrived through #211.

Evidence

Stub-only failures, fixed in core. These tests and checks from the fork passed only where the conference zone is Perth, or failed only once they ran against the stub:

Check Before After
checklist.test.ts RangeError: Timezones must be the same if unit is a day unit (NOW was Perth, due dates parse into the stub's Etc/UTC) NOW is the same instant in the conference zone
talk-ended.test.ts default zone instants built as +08:00 built with conferenceTime
date-lint-rules.test.mjs ENOENT …/conference/config (a fork-only path) the fork case runs only where that path exists
temporal-browser.spec.ts timed out waiting for "Add … to my agenda" on /agenda/2026 opts into the fixture conference year, like feedback-links.spec.ts
axe on /e2e-content-fixture scrollable-region-focusable on pre (#209's minmax(0, 1fr) column made the code block scroll) MDX pre gets tabIndex={0}

Visual. pnpm vr --update-snapshots in the pinned container, then a clean pnpm vr against the result: 108 passed, 36 skipped.

  • blog index and post (18 changed): fixture posts now, instead of the stub's own post
  • content page, mobile (3 changed): text no longer runs off the right edge, and only the code block scrolls; dates read "17 Oct" instead of "Oct 17" (#210/#211)
  • site-header (9 new): #209's header capture

The header shows the DDD Perth logo. That isn't from this branch: core's logo.svg already is DDD Perth's, and main's home baseline shows it too. It's a follow-up PR, not part of this one.

Rest of the suite: typecheck, lint and build are clean. Unit tests: 892 passed, 38 skipped. Two typed-ESLint cases in date-lint-rules.test.mjs timed out at 5s once under full-suite load and passed on rerun; the fork has the same file. E2E: 69 passed, 36 skipped. The a11y-e2e comment in pr.yml says 14 skipped. I haven't checked how much of that gap is new; most likely the new date-dependent tests skip in the stub.

Fork vs this branch. Comparing this branch's tree with the fork's current core/, ignoring baselines: every remaining difference is either divergence core already had, or one of the four hand resolutions above. That check can't see files that exist only in core; there I changed only conference-year.ts and nx.json.

Merge Danger

Door: one-way, narrowly

0031_sponsor_feedback.sql creates a new table (CREATE TABLE IF NOT EXISTS). It's additive, but once a fork applies it to D1, a code revert doesn't undo it. Everything else is a two-way door, and /portal/* keeps working through a 308 to /sponsor-portal/*.

Blast Radius: wide

  • Every fork's year configs. #211 moves ConferenceYear dates from Luxon to Temporal. A fork that hasn't ported its conference/config/years/*.ts to conferenceTime getters stops typechecking on its next /core-pull. DDD Perth already has; the stub is ported here. /core-pull now walks a fork through the port (dd3b73e), including the step nothing forces: copying the date lint rules into the fork's root eslint.config.mjs, which a subtree pull never updates. Forks also kept copies of the skills, so a pull never updated them; new forks now symlink them into core/.claude/skills/, and /core-pull converts an existing fork's copies. An existing fork's old copy never learns any of this on its own, so the pull that lands this PR should be run from core/.claude/skills/core-pull/SKILL.md (tell the agent to read it after the subtree pull). That run converts the copies, and every pull after it uses core's current skill.
  • Shared links and bookmarks to /portal: they redirect, but anything that matches on the exact path breaks.
  • Layout: header and content-column grid changes from #209, covered by the new header baseline and overflow sweep.

After this merges, DDD Perth should run /core-pull to pick up the core-only fixes above. The fork most likely fails the pre axe check today too, unnoticed because its a11y job doesn't block merging.

🤖 Generated with Claude Code

Upstreamed from dddwa/dddperth#211.

Upstream-only adjustments, since core has code the fork doesn't:
- e2e/fixtures/conference-year.ts (the fixture conference year) moves from
  Luxon to conferenceTime getters, like the stub's year configs.
- admin-settings/speakers.test.ts keeps core's conference-agnostic
  inConferenceZone helper, rebuilt on conferenceTime.
- dev-date-override.test.ts keeps the fixture-conference-cookie marker.
- nx.json gets the fork's lint inputs, so lint re-runs when the date
  rules change (path is eslint-rules/ here, core/eslint-rules/ in a fork).
…ddperth.com

Upstreamed from dddwa/dddperth#209. The Medium posts themselves are fork content and stay there; this carries the blog machinery (legacy-host redirects, header nav, fixture blog posts for the e2e and visual suites).

e2e/routes.ts takes the fixture post's slug in place of the stub's own post, since the suites now render e2e/fixtures/blog for every conference. Visual baselines are regenerated here against the stub, not copied.
Three tests from dddperth #210/#211 passed only where the conference zone is
Australia/Perth. In ddd-core the stub runs in Etc/UTC:

- checklist: NOW was a Perth ZonedDateTime while due dates parse into the
  conference zone, and Temporal throws on day arithmetic across zones. NOW
  keeps the same instant, expressed in the conference zone as the app's clock
  always is.
- talk-ended: the default-zone case built its instants as +08:00.
- date-lint-rules: the fork's conference/config path doesn't exist here; the
  stub case covers core.
…otes

Core's counterpart to the CLAUDE.md section dddperth #209 added, in core's own register.
From dddperth #211, the spec assumed /agenda/2026 is the current conference
with a published agenda on the fixture date, which holds in DDD Perth and not
in the stub. It now opts into the fixture conference year, as
feedback-links.spec.ts does.
dddperth #209 gave the content grid a minmax(0, 1fr) track so a code block
no longer widens the page on phones. The block now scrolls inside the column
instead, and axe's scrollable-region-focusable flags it on
/e2e-content-fixture: a scrollable region needs to take focus so it can be
scrolled without a mouse.
…d and header

Rendered in the pinned Playwright container against conference-stub, not
copied from the fork.

- blog index/post (18): the suites now render e2e/fixtures/blog (#209).
- content page, mobile (3): the minmax(0, 1fr) content track stops long
  lines running off the right edge; text now wraps and only the code block
  scrolls. Dates also read "17 Oct" rather than "Oct 17" (#210/#211).
- site-header (9, new): the header's own capture from #209.

The header shows the DDD Perth logo because core's logo.svg still is one;
that predates this branch (main's home baseline shows it too).
…t-config changes

/core-pull now explains the Luxon -> Temporal type errors and the eager-
construction trap, and adds a step to port changes in core's root configs
(eslint, tsconfig.base, package.json) to the fork root, which a subtree pull
never touches. /new-conference repoints the copied date-rules block at the
fork's paths.
/core-pull only updates core/, so a fork's copied skills stayed at whatever
version it was scaffolded from, and a pull that changed how pulls work was
run by the old instructions. /new-conference now symlinks core-pull,
core-push and new-conference into core/.claude/skills/, and /core-pull
converts an existing fork's copies, checking first for fork edits, then
re-reads its own updated copy.
@JakeGinnivan
JakeGinnivan merged commit 8a6c80a into main Oct 29, 2026
3 checks passed
@JakeGinnivan
JakeGinnivan deleted the jakeginnivan/upstream-fork-prs-204-215 branch October 29, 2026 23:45
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