Skip to content

chore(core): pull ddd-core through #30 and link core's skills - #217

Merged
JakeGinnivan merged 3 commits into
mainfrom
jakeginnivan/core-pull-after-ddd-core-30
Oct 30, 2026
Merged

JakeGinnivan merged 3 commits into
mainfrom
jakeginnivan/core-pull-after-ddd-core-30

Conversation

@JakeGinnivan

Copy link
Copy Markdown
Contributor

Don't squash-merge this. Use "Create a merge commit" or "Rebase and merge". A squash rewrites the git-subtree-split trailer the next /core-pull needs to find where this one left off.

Pulls ddd-core through dddwa/ddd-core#30, which carried this fork's #204–#215 upstream, plus the fixes core needed to run them against its stub.

Summary

d7c21a6  Squashed 'core/' changes from 89be5d1..8a6c80a   (git-subtree-split: 8a6c80a)
70b2f5f  chore(core): pull ddd-core through #30           (merge + conflict resolutions)
139f875  chore(skills): link core's skills instead of copying them up

What arrives in core/. Mostly this fork's own changes coming back, plus what core added on top:

  • a synthetic fixture conference year (E2E_FIXTURE_CONFERENCE, lib/e2e-fixture-conference.server.ts) that feedback-links and temporal-browser specs now opt into, so conference-day tests stop depending on a real year's dates. Years are read through getConferences(context) rather than conferenceManifest.conferences.
  • tests that no longer assume the conference is in Perth or has a sponsor portal.
  • MDX pre blocks take tabIndex={0} (axe scrollable-region-focusable).
  • setup-* targets run with parallelism: false (the ENOTEMPTY race).
  • /core-pull and /new-conference skill updates: Temporal migration notes, porting root-config changes, and linking skills.

Skills are symlinks now, not copies.

 .claude/skills/
-├── core-pull/SKILL.md        # copied up by scripts/sync-core-skills.mjs on prepare
-├── core-push/SKILL.md
-└── new-conference/SKILL.md
+├── core-pull -> ../../core/.claude/skills/core-pull
+├── core-push -> ../../core/.claude/skills/core-push
+└── new-conference -> ../../core/.claude/skills/new-conference
-scripts/sync-core-skills.mjs
 package.json                 # - "prepare", - "sync-skills"

ddd-core#30 makes forks link their skills, so a pull updates the skills in effect with no step to remember. That supersedes sync-core-skills.mjs, and its pnpm sync-skills step in core-pull was the one place this fork's core/ differed from upstream. core/ now matches ddd-core exactly. The fork's copies had no local edits (checked against core's pre-pull versions), so nothing was lost.

Conflicts (97), all expected. The last sync point predated #26, so everything this fork had upstreamed since came back as add/add:

  • 24 code files → upstream. Each was the fork's version plus core-only fixes.
  • 72 baselines → the fork's. Core's are rendered against the stub.
  • core/nx.json → stays deleted.
  • e2e/routes.ts auto-merged with HEADER_DATE_STATES declared twice. Removed the copy; the file is unchanged from main.

Evidence

Check Result
nx build website passes
typecheck, lint, test pass, 945 unit tests
pnpm vr against this fork's baselines 108 passed, 36 skipped. Nothing in the pull changes how the site renders
nx e2e website 110 passed, 1 failed: my-agenda "picking the long talk displaces both short talks" timed out in dark mode, then passed 72/72 on --repeat-each 4. Flaky, not this pull
git-subtree-split trailer present, 8a6c80a = ddd-core#30's merge

Merge Danger

Door: two-way

No new migrations: 0031_sponsor_feedback.sql has been in this fork since #204.

Blast Radius: small

  • Windows checkouts. Git on Windows checks symlinks out as plain text files unless core.symlinks is on, and the skills then fail to load. The copy script didn't have that problem. Reverting 139f875 restores it.
  • Conference-day e2e now runs against the fixture year, not 2026's config.

🤖 Generated with Claude Code

8a6c80a Merge pull request #30 from dddwa/jakeginnivan/upstream-fork-prs-204-215
1e1dcac docs(skills): forks link core's skills instead of copying them
dd3b73e docs(skills): tell forks how to take the Temporal move and core's root-config changes
6cf477e test(visual): regenerate baselines for the blog fixtures, content grid and header
8ba20c2 fix(a11y): let keyboard users scroll MDX code blocks
2105946 test(e2e): run the Temporal browser check against the fixture conference
ef415a3 docs: record the blog fixtures and header sweep in the visual suite notes
26b4815 test(dates): don't assume the conference is in Perth
e659fe3 feat(blog): migrate every Medium post onto the site and retire blog.dddperth.com
47f371f feat(agenda): close agenda building once the conference is over
62a364b Introduce standard Temporal dates with a native-first fallback
a5e0b8c fix(admin): move sponsor tools out of the Jira sync card
98b32f7 refactor(styles): replace bracket escapes with design tokens
44682fe Default dates to conference timezone and enforce safe date patterns
5e7c52e feat(portals): move the sponsor portal to /sponsor-portal and give both portals a proper header
f60ec60 feat(sponsors): collect sponsor feedback through the portal
ad6ba02 Merge pull request #29 from dddwa/jakeginnivan/upstream-fork-pr-208-review-fixes
ae2d81b Merge pull request #27 from dddwa/jakeginnivan/fix-theme-token-references
d66c6c0 fix: address five defects found reviewing the upstream feature stack
9ef5430 fix(theme): make theme token references resolve
5ecc615 Merge pull request #26 from dddwa/jakeginnivan/upstream-fork-prs-158-202
ebe65ca test(visual): regenerate talk-detail baselines for the talk dialog
5c2b668 test(e2e): run conference-day tests against a fixture conference year
085ed43 feat(feedback): ask about Meet the Experts on the conference form
7b0fe87 feat(feedback): only take feedback on talks once they've finished
cfed0c1 feat(admin): grouped sidebar nav with a mobile menu drawer
5f52ff8 feat(agenda): embed talk recordings in the talk dialog
0339862 feat(agenda): open talks in a dialog with speaker bios
a682741 feat(feedback): conference and talk feedback form, admin view and Excel export
c8b0951 Merge pull request #25 from dddwa/jakeginnivan/upstream-4-runsheets
5a84a25 feat(runsheets): add a Show Breaks toggle
1ed02de feat(runsheets): bump-in run sheet matches the conference-day one
a4697e6 fix(runsheets): offline service worker works on a first visit and on bad Wi-Fi
67a3945 feat(runsheets): Show Agenda switch, and filter actions at the top of the panel
e1f8bb8 feat(agenda): show the Meet the Experts schedule
75e4269 feat(runsheets): highlight what's happening now, refresh every minute, close after the weekend
4d54742 fix(admin): show a no-access page instead of the sponsor portal error
2bf7681 feat(runsheets): Agenda and Porters filters, 1-minute bump-in cache
f8ba8ca feat(runsheets): copyable volunteer rosters, plenum spans, refresh fix
80ce318 feat(runsheets): agenda sessions, session details, client-side filters and offline
4b4a1ae feat(runsheets): bump-in run sheet from the sponsors board, plus admin refresh
fe14cde Merge pull request #24 from dddwa/jakeginnivan/upstream-3-speaker-portal-volunteers
5721e18 test: make the speaker settings and exhibitor tests conference-agnostic
33a1a88 feat(sponsor-portal): exhibitor export room, space number and screen order
2255825 feat(sponsor-portal): exhibitor export loading dock attendees; leave off digital and in-kind sponsors
56eed31 fix(portal): explain an unlinked email instead of "something went wrong"
edd8e5c feat(admin): volunteer roster, and read queued planner saves as JSON
16f71c6 feat(speaker-portal): editable speaker settings, RSVP lists and Meet the Experts schedule email
01a28bb Merge pull request #23 from dddwa/jakeginnivan/upstream-2-my-agenda
eb38d01 fix(auth): let magic-link login work locally without a SESSION_SECRET
128825a feat(agenda): build my agenda, calendar export and organiser shortlist counts
d38d185 Merge pull request #22 from dddwa/jakeginnivan/upstream-1-sponsor-portal-jira-sync
25d412c Merge pull request #21 from dddwa/fix/agenda-revalidate-loop
eb94625 test(sponsor-portal): skip Jira mapping tests where no portal is configured
a5292e6 feat(sponsor-portal): sponsor follow-up list with mailto drafts
1f6e57b feat(sponsors): community and in-kind sponsor tiers
16f8ee6 chore(content): FAQ and conference-day page fixes
0861cbb fix(agenda): stop a null tagLine 500ing talk pages, and log rejected sponsor saves
33b6af0 feat(app): retire the mobile app without breaking installed copies
1516b02 feat(sponsor-portal): count committee Jira answers in progress, and a support link
ff7cb2e feat(sponsor-portal): Jira-canonical sync, committee data protection, exhibitor room
c8a4370 feat(sponsor-portal): prefill sponsor profile fields from Jira
1715a75 fix(runsheets): make the public run sheet safe to expose anonymously
961b722 fix(sponsor-portal): harden Jira sync and exports
9504209 Fix agenda builder revalidating in an endless loop
9b163bc Merge pull request #20 from dddwa/jakeginnivan/split-slot-agenda-fixture
4bc5f7f test(fixtures): give the agenda fixture a split-slot room
15024ab Merge pull request #19 from dddwa/jakeginnivan/bring-the-sponsor-portal-up-to-date-with-the-fork
8d0e6ee feat(sponsor-portal): bring the portal up to date with the fork
0a96392 Merge pull request #18 from dddwa/jakeginnivan/pin-sponsor-strip-in-visual-baselines
177c589 fix(ci): stop the setup targets racing each other
997d5e6 test(visual): pin the home page's sponsor strip to fixtures

git-subtree-dir: core
git-subtree-split: 8a6c80a0c708b5b9378bf611edb2ddebed2c259f
# Conflicts:
#	core/nx.json
#	core/website/app/lib/admin-settings/speakers.test.ts
#	core/website/app/lib/dates/date-lint-rules.test.mjs
#	core/website/app/lib/dates/dev-date-override.test.ts
#	core/website/app/lib/feedback/feedback-report.server.ts
#	core/website/app/lib/feedback/talk-ended.test.ts
#	core/website/app/lib/published-agenda.server.ts
#	core/website/app/lib/services/cloudflare/jira-sponsor-sync.server.test.ts
#	core/website/app/lib/speakers/checklist.test.ts
#	core/website/app/lib/sponsor-fallback.server.ts
#	core/website/app/lib/sponsor-fallback.test.ts
#	core/website/app/lib/sponsors/jira-client.test.ts
#	core/website/app/lib/sponsors/sponsor-portal-config.test.ts
#	core/website/app/remix-app-load-context.ts
#	core/website/app/routes/_layout.agenda.($year).talk.$sessionId.tsx
#	core/website/app/routes/_layout.agenda.($year).tsx
#	core/website/app/routes/admin.agenda-shortlist.($year).tsx
#	core/website/app/routes/admin.feedback.tsx
#	core/website/app/routes/admin.speakers._index.tsx
#	core/website/app/routes/admin.sponsors.exhibitor-export.tsx
#	core/website/app/routes/agenda.my[.ics].tsx
#	core/website/app/routes/api.runsheets.session.$sessionId.tsx
#	core/website/e2e/__screenshots__/visual.spec.ts/agenda-visual-chromium-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/agenda-visual-chromium-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/agenda-visual-chromium-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/agenda-visual-firefox-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/agenda-visual-firefox-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/agenda-visual-firefox-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/agenda-visual-webkit-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/agenda-visual-webkit-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/agenda-visual-webkit-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-index-visual-chromium-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-index-visual-chromium-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-index-visual-chromium-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-index-visual-firefox-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-index-visual-firefox-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-index-visual-firefox-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-index-visual-webkit-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-index-visual-webkit-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-index-visual-webkit-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-post-visual-chromium-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-post-visual-chromium-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-post-visual-chromium-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-post-visual-firefox-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-post-visual-firefox-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-post-visual-firefox-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-post-visual-webkit-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-post-visual-webkit-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/blog-post-visual-webkit-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/content-page-mdx-template-visual-chromium-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/content-page-mdx-template-visual-chromium-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/content-page-mdx-template-visual-chromium-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/content-page-mdx-template-visual-firefox-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/content-page-mdx-template-visual-firefox-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/content-page-mdx-template-visual-firefox-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/content-page-mdx-template-visual-webkit-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/content-page-mdx-template-visual-webkit-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/content-page-mdx-template-visual-webkit-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/home-visual-chromium-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/home-visual-chromium-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/home-visual-chromium-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/home-visual-firefox-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/home-visual-firefox-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/home-visual-firefox-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/home-visual-webkit-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/home-visual-webkit-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/home-visual-webkit-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/site-header-visual-chromium-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/site-header-visual-chromium-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/site-header-visual-chromium-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/site-header-visual-firefox-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/site-header-visual-firefox-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/site-header-visual-firefox-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/site-header-visual-webkit-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/site-header-visual-webkit-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/site-header-visual-webkit-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/sponsors-visual-chromium-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/sponsors-visual-chromium-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/sponsors-visual-chromium-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/sponsors-visual-firefox-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/sponsors-visual-firefox-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/sponsors-visual-firefox-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/sponsors-visual-webkit-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/sponsors-visual-webkit-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/sponsors-visual-webkit-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/talk-detail-visual-chromium-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/talk-detail-visual-chromium-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/talk-detail-visual-chromium-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/talk-detail-visual-firefox-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/talk-detail-visual-firefox-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/talk-detail-visual-firefox-tablet.png
#	core/website/e2e/__screenshots__/visual.spec.ts/talk-detail-visual-webkit-desktop.png
#	core/website/e2e/__screenshots__/visual.spec.ts/talk-detail-visual-webkit-mobile.png
#	core/website/e2e/__screenshots__/visual.spec.ts/talk-detail-visual-webkit-tablet.png
#	core/website/e2e/feedback-links.spec.ts
#	core/website/e2e/start-dev-server.mjs
#	core/website/e2e/temporal-browser.spec.ts
ddd-core#30 makes a fork's .claude/skills symlinks into core/.claude/skills,
so a pull updates the skills in effect with no extra step. That replaces
scripts/sync-core-skills.mjs, which did the same job by copying on prepare
or pnpm sync-skills. Its core-pull step was the one difference left between
this fork's core/ and upstream, so that goes too.
@JakeGinnivan
JakeGinnivan merged commit ebb66f4 into main Oct 30, 2026
3 checks passed
@JakeGinnivan
JakeGinnivan deleted the jakeginnivan/core-pull-after-ddd-core-30 branch October 30, 2026 03:59
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