Notable changes to the OTE template — the files that live in your fork
(dashboard, thin workflows, issue templates, docs). Improvements to validation
and exports arrive automatically via OpenTechEvents/ote-tools and are not
tracked here.
This file, together with the VERSION marker, is what the dashboard
reads to tell you a newer template is available and what it changed. To pull an
update in: git pull upstream main (see Staying up to date in SETUP.md,
or below if you've already deleted it).
The format follows Keep a Changelog; versions follow Semantic Versioning.
This version number is unrelated to the OTE spec's own specVersion
(currently 0.3.0, tracked in
opentechevents-spec).
They're two independent axes that happen to share small numbers right now —
this file versions the template repo (dashboard, workflows, docs), the spec
versions the data format. A template release never implies a schema bump, or
the other way around.
- Swapped the shields.io "OTE spec" badge for the official static
OTE feedSVG from opentechevents-spec/docs/badge (https://opentechevents.org/badge/ote-feed.svg,.es.svgin the Spanish starter). It's a proper "subscribe to my feed" button — hand-written, served fromopentechevents.orgwith no third-party service or version-string query behind it — rather than a dynamic version-number badge that needed shields.io up and afeed.jsonalready published to render. Updated the matching instructions inREADME.md,i18n/README.es.mdandSETUP.md: the badge now needs a link target (your ownfeed.json), not a shields.io query to build.
Restructured around one principle: every file has exactly one owner,
upstream or the fork, never both. Prompted by a real fork
(ComBuildersES/events) that had to fully rewrite README.md and
CONTRIBUTING.md to be usable, and shipped with a textLanguage: "en"
default that didn't match its own content.
SETUP.md: the one-time onboarding manual (enable Actions/Pages/Issues, create theote-eventlabel, register as an adopter, turn on badges…), upstream-owned. Read once, safe to delete. Absorbs the "Using an AI coding assistant" block and the update-from-upstream recipe that used to live inREADME.md.i18n/README.es.mdandi18n/CONTRIBUTING.es.md: optional Spanish starting points for the two fork-owned files below, referenced fromSETUP.md.
README.mdandCONTRIBUTING.mdare now minimal, fork-owned skeletons from the moment you fork — modeled on whatComBuildersES/eventsindependently rewrote them into. Upstream commits to never editing either file again in a future template release, sogit pull upstream mainhas nothing left to conflict with on them.ote.config.json: dropped the hardcodedtextLanguage: "en"default — the field is optional and "absent = unknown, never English" was already the documented rule; shipping"en"anyway contradicted it. Also fixed two comments that referenced the sample events removed in 0.3.0.events/README.md: theote-tools#23reference now reflects that it's fixed upstream, not still open.
- Warning (not failing) validation when
feed.url/organizers[].urlstill ends in.example. - A
dashboard-checks.jsbanner for disabled Issues or a missingote-eventlabel. - A "configure your feed" mode in the
ote-toolseditor, writingote.config.jsonthrough the same propose-change/edit-directly pipeline events already use — preferred over a self-committingworkflow_dispatchbootstrap in this repo, since the steps causing the most friction (enabling Issues/Pages, allowing Actions to open PRs) are repo Settings that the defaultGITHUB_TOKENcan't change regardless of mechanism. - A
.gitattributesmerge=oursdriver: skipped as the primary fix, since it requiresgit config merge.ours.driverset locally per clone and doesn't travel with the repository — the file-ownership split above makes it unnecessary rather than papering over it.
DESIGN.md: a pre-implementation proposal doc (Spanish, "nothing implemented yet") that added nothing for an organizer and was already stale even in its canonical home,OpenTechEvents/ote-tools— phase 2 (the central editor) is substantially built there already.CLAUDE.mdas a shipped file. The guardrails it held (don't add validation/export/UI logic here, keep the repo simple, English is the official language) now live as a copy-paste block under a new README section, "Using an AI coding assistant on your fork" — tool-agnostic (CLAUDE.md,AGENTS.md, Copilot instructions…) instead of committing every fork to one assistant's file format.
- The three README badges added in 0.4.0 now ship commented out instead of rendering broken by default: a broken badge is a fine nudge in your own fork, but it also made both the template's own README and every freshly forked one look broken before anyone had a chance to configure anything. Setup step 9 tells you where to uncomment and edit them.
- README badges:
ValidateandPublishworkflow status, and a dynamicOTE specbadge that reads thespecVersionstraight from your publishedfeed.json(via shields.io) instead of a hardcoded number that could drift from what the workflows actually validate against. All three needyour-user/your-reporeplaced with your fork.
- The bundled GDG Sample City example events.
events/ships empty again, with anevents/README.mdexplaining the format and pointing to the spec reference.
README.md: "Replace the sample events" → "Add your events"; the license section no longer claims sample event data.
events/README.mdkeeps the directory tracked by Git even with zero real events. Anevents/directory with no files at all isn't tracked by Git, andote-build-feedcurrently treats a missing directory as a fatal error rather than zero events — see ote-tools#23 for the upstream fix. Keeping this file in place sidesteps it either way.
Sample data upgraded to OTE schema v0.3.0.
- Replaced the generic sample events with a complete example: a GDG chapter
running a monthly meetup series plus its annual conference, DevFest —
events/2026-08-monthly-meetup.jsonandevents/2026-09-monthly-meetup.json(two editions of the same series, linked viapartOf),events/2026-10-online-workshop.json(co-organized) andevents/2026-11-devfest.json(call for papers, ticket tiers, waitlist). Together they exercise the fields schema v0.3 added:organizers,image,location.address,offers,cfp,partOfandtranslations. ote.config.json:feed.organizersandfeed.textLanguageset for the sample community;profiledefaults toallsince the samples mix a meetup and a conference.- Bumped every sample event and the README's minimal-event example to
specVersion: "0.3.0".
Phase 1 (MVP): fork → configure three values → a validated OTE feed with ICS/RSS exports published on GitHub Pages.
- Thin workflows calling
ote-toolsreusable workflows: validate, publish (build Pages), and issue-to-PR. - Static dashboard (
docs/index.html) linking to the central tools, with the adopter-registry banner. propose-eventissue form and theote-eventlabel contract.ote.config.json, sample events,CONTRIBUTING.md, and the setup guide.VERSION+ this changelog, so the dashboard can surface template updates client-side.