Skip to content

Release 0.78.6 - #3903

Merged
odlbot merged 6 commits into
releasefrom
release-candidate
Sep 3, 2026
Merged

odlbot merged 6 commits into
releasefrom
release-candidate

Conversation

@odlbot

@odlbot odlbot commented Sep 3, 2026 •

Copy link
Copy Markdown
Contributor

renovate[bot]

Shankar Ambady

Matt Bertrand

Chris Chudzicki

ChristopherChudzicki and others added 6 commits September 2, 2026 13:34
…3870)

23 minor releases of drift. Renovate tracks none of the three places the
generator version is pinned (the script default and both CI jobs), which is how
it got this far behind.

The only behavioural change on the wire is `Accept: application/json`, now sent
on 120 operations (30 in v0, 90 in v1). That header is CORS-safelisted, so it
adds no preflight.

The ~16,500 lines of api.ts churn are almost entirely JSDoc removal: upstream
dropped @export, @interface, @type and @memberof from every template.

Exported-surface changes, all shape-preserving:

  - Field enums moved from shared enums to per-model copies, e.g.
    CourseResource.availability now references CourseResourceAvailabilityEnum
    with the same values. The shared enums are still exported.
  - `featured_list` went from a synthesised DepartmentChannelFeaturedList to the
    shared LearningPathPreview -- identical shape, so this is deduplication.
  - Three v0 types gained an `Enum` suffix (PatchedProfileRequestCertificateDesired
    -> ...DesiredEnum). Nothing outside generated/ referenced them.

Accompanying changes, each forced by the bump:

  - CI pins in both openapi-generated-client-check jobs. These regenerate the
    client and diff it against the checked-in copy, so leaving them at v7.2.0
    fails with the misleading "OpenAPI spec is out of date."

  - globalProperties apiDocs/modelDocs = false in both generator configs.
    v7.25.0 added api_doc/model_doc templates, which emit 345 markdown files.
    `docs/**` in .openapi-generator-ignore does not suppress them -- that ignore
    processor is not gitignore.

  - modelEnum.mustache rebased onto the v7.25.0 upstream template: adopt the
    {{#description}} guard, drop @export/@enum. The override exists to emit
    {{classname}}Descriptions as a runtime const, which is how Django choice
    labels reach the profile and search selects; upstream only puts
    enumDescription in a JSDoc comment, where it is lost at runtime. The 31 v0
    and 29 v1 Descriptions maps are byte-identical to before.

  - **/src/generated/** added to the eslint ignorePatterns. v7.25.0's
    configuration.mustache no longer emits /* eslint-disable */, which surfaces
    8 no-explicit-any errors in the two generated configuration.ts files.

  - HubspotForm defaultValues/default_values widened to (string | null)[] | null,
    with nulls filtered where the value is derived. v7.2.0 silently dropped
    item-level `nullable` on arrays; v7.25.0 emits it. Our spec says
    `default_values: {items: {type: string, nullable: true}}` because
    _scalar_field in ol_hubspot/schema.py applies allow_null=True to every
    scalar, including ListField children. Whether HubSpot actually returns null
    items is not determinable from the SDK -- its openapi_types map cannot
    express nullability -- so the frontend tolerates them rather than asserting
    they cannot occur.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…des (#3882)

* Don't publish youtube playlists that have no videos

A playlist with zero videos passed the 60% content-match threshold
vacuously (0 < 0 is false) and was created published with an empty
detail page. Treat an empty match list the same as a failed match so
the playlist is skipped or unpublished until its videos appear.

Fixes mitodl/hq#13134

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Don't publish podcasts whose feed has no episodes

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Simplify empty-podcast loader test

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Scope empty-playlist lookup by platform; unpublish episodes of emptied podcasts

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Mirror the empty-playlist approach for podcasts with no episodes

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Unpublish episodes of a podcast whose feed has no episodes

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* adding initial change-over

* add server side flag for disabling hybrid search
@odlbot
odlbot requested a review from a team as a code owner September 3, 2026 17:52
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

OpenAPI Changes

No changes detected

View full changelog

Unexpected changes? Ensure your branch is up-to-date with main (consider rebasing).

Comment on lines +99 to +104
const defaultValues = (field.defaultValues ?? field.default_values)?.filter(
(value): value is string => value !== null,
)

const rawDefaultValue =
field.defaultValues ??
field.default_values ??
field.defaultValue ??
field.default_value
defaultValues ?? field.defaultValue ?? field.default_value

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: If field.defaultValues contains only nulls, it becomes [] after filtering. This empty array prevents the nullish coalescing operator from falling back to field.defaultValue.
Severity: LOW

Suggested Fix

After filtering defaultValues, check if the resulting array is empty. If it is, treat it as undefined to allow the nullish coalescing operator to correctly fall back to field.defaultValue or field.default_value. For example: (filteredValues.length > 0 ? filteredValues : undefined) ?? ....

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.

Location: frontends/ol-components/src/components/HubspotForm/HubspotForm.tsx#L99-L104

Potential issue: In `HubspotForm.tsx`, the code filters `null` values from
`field.defaultValues`. If the original array contains only `null` values (e.g.,
`[null]`), the result is an empty array `[]`. Because an empty array is not a nullish
value, the nullish coalescing operator (`??`) in the assignment of `rawDefaultValue`
does not fall back to `field.defaultValue` or `field.default_value`. This causes the
form field to initialize with an empty value instead of the intended fallback, if one is
provided by the Hubspot API under these specific conditions.

Did we get this right? 👍 / 👎 to inform future reviews.

@odlbot
odlbot merged commit 0c91edb into release Sep 3, 2026
27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants