feat(teched): list all-day activities like Developer Garage (issue #2392 item 6) - #2400
Merged
Merged
Conversation
All-day activities (Developer Garage, AI Showfloor Expo, etc.) live under a SEPARATE RainFocus catalog tab (`tab.alldayactivities=<id>`), NOT in the regular `type=session` feed. This PR wires them in end-to-end. **Model** (`db/external/teched.cds`) - Add `allDay Boolean default false` to `TechEdSessions`. **Fetcher** (`srv/lib/teched/rainfocus-fetcher.js`) - New `parseAllDayActivity(item, venue)` — lenient parser (synthesises `allday-<sourceId>` code when absent, room from `location`/`venue` fallback, `allDay: true`). - `fetchAllTechEdSessions` issues a best-effort per-venue all-day POST (own try/catch; `allDayFilter` env-configurable; empty ⇒ skipped). - `parseVenuePayload` accepts `allDayItems`; dedup via `seenSourceIds` (regular session wins on collision). - `dropPast` never drops a row where `s.allDay === true`. - Defaults: Berlin filter `1742815606768001gh9v` (Tom's capture), Virtual unset; tab param `tab.alldayactivities`. **Normalize** (`srv/lib/teched/normalize.js`) - `normalizeSession` maps `allDay: raw.allDay === true` (part of hash). **Seed** (`srv/lib/teched/seed-core.js`) - `SESSION_COLS` includes `'allDay'`. **Feed** (`srv/lib/teched-feed.js`) - SELECT includes `allDay`; emits `allDay: isAllDay(r.allDay)`. - Shared `isAllDay(v)` helper (coerces `true`/`1` → boolean). - `upcoming=true` filter uses tagged-template CQL (safe ISO binding) with explicit `OR allDay = true OR scheduledEnd is null` carve-out so timeless all-day rows survive the filter. **UI** (`hugo-apps/src/teched-sessions-grid/App.vue`, `filter.ts`) - `allDay?: boolean` on `TechEdSession` interface. - `filteredAllDay` / `filteredTimed` computed splits. - Distinct `<section aria-label="All-day activities">` with "All-day" badge rendered above the timed grid; timed grid unaffected. - `test/unit/teched-allday.test.js` — parseAllDayActivity, dedup, fetchAllTechEdSessions all-day tab, normalizeSession allDay flag. - `test/unit/srv/build-teched-allday.test.js` — allDay flows through seed → /build/teched; upcoming filter keeps all-day rows. - `hugo-apps/src/teched-sessions-grid/__tests__/App.allday.test.ts` — all-day section renders, excluded from timed grid, badge, detail panel, filter across both sections. - `test/unit/teched-normalize.test.js` — allDay flag coverage extended. - `test/fixtures/teched/rainfocus-alldayactivities.json` — synthetic raw all-day tab capture (live params unconfirmed — see OPEN ITEM). - `test/fixtures/teched/teched-allday-feed.json` — derived feed shape. The exact live RainFocus request param name/value for the all-day tab is NOT yet confirmed against the real API. Parsing, model, seed, feed, and UI are proven against the synthetic fixture. Tune `RAINFOCUS_TE26_ALLDAY_FILTER` / `RAINFOCUS_ALLDAY_TAB_PARAM` when a live capture is available — a mismatch yields 0 all-day rows and never breaks the regular session ingest. - #2 iCal all-day gap: graceful 404 out of scope for this unit. - #3 NULL-first ordering on SQLite vs HANA: catalog << 1000 cap, latent. - #5/#6 UI/parser duplication: deliberate (scoped CSS + tested parseSession). - #7 mass UPDATE on first ingest: one-time benign, expected behaviour.
jung-thomas
force-pushed
the
feat/teched-allday-activities-2392
branch
from
September 17, 2026 17:42
6c8b2bf to
dee90c1
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
allDay BooleantoTechEdSessions(DB model).parseAllDayActivity(lenient: synthesised code when absent, room fromlocation/venuefallback,allDay: true), merges intodata.sessions;dropPastnever drops an all-day row.allDaythrough content hash; seed includes the column;/build/techedfeed emitsallDaywith the sharedisAllDay()helper.upcoming=truefilter uses tagged-template CQL with an explicitOR allDay = true OR scheduledEnd is nullcarve-out (timeless rows survive)./teched/island splitsfilteredAllDay/filteredTimed; renders a distinct<section aria-label="All-day activities">with an "All-day" badge above the timed grid.OPEN ITEM — live request params unconfirmed
The all-day tab request params (
RAINFOCUS_TE26_ALLDAY_FILTER = 1742815606768001gh9v,RAINFOCUS_ALLDAY_TAB_PARAM = tab.alldayactivities) are based on Tom's Berlin browser capture but have not been confirmed against the live API. Parsing, model, seed, feed, and UI are proven againsttest/fixtures/teched/rainfocus-alldayactivities.json(synthetic fixture). A mismatch simply yields 0 all-day rows and never breaks the regular session ingest. Tune the env vars when a live capture is available.Test plan
test/unit/teched-allday.test.js— parseAllDayActivity, dedup, fetchAllTechEdSessions all-day tab, normalizeSession allDay flag (new file).test/unit/srv/build-teched-allday.test.js— allDay flows through seed → /build/teched;upcoming=truekeeps all-day rows despite NULL scheduledEnd (new file).hugo-apps/src/teched-sessions-grid/__tests__/App.allday.test.ts— all-day section renders, excluded from timed grid, badge, detail panel, filter (new file).test/unit/teched-normalize.test.js— extended with allDay flag coverage.parsers.bundle.mjsbuild artifact + missinggraphologyin fresh-worktree node_modules — unrelated to this PR).Deferred code-review findings (deliberate, noted for follow-up)
allDay=falsewritten)