Skip to content

Conversation

@mbertrand
Copy link
Member

@mbertrand mbertrand commented Nov 12, 2025

What are the relevant tickets?

Backend part of https://github.com/mitodl/hq/issues/9206

Description (What does it do?)

  • Adds a best_run_id field to learning resource serializers and search index

How can this be tested?

When this gets to RC/production, the search index will need to be recreated to include the new best_run_id field.

@github-actions
Copy link

github-actions bot commented Nov 12, 2025

OpenAPI Changes

Show/hide 208 changes: 0 error, 0 warning, 208 info
208 changes: 0 error, 0 warning, 208 info
info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/vector_learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/courses/
		added the required property 'results/items/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/courses/{id}/
		added the required property 'best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/
		added the required property 'results/items/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/featured/{id}/
		added the required property '/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/
		added the required property 'results/items/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/
		added the required property '/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/learning_paths/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/similar/
		added the required property '/items/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learning_resources/{id}/userlists/
		added the required property '/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{id}/vector_similar/
		added the required property '/items/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learning_resources_search/
		added the required property 'results/items/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/
		added the required property 'results/items/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/
		added the required property 'best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{id}/
		added the required property 'best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{id}/
		added the required property 'best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/learningpaths/{learning_resource_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/learningpaths/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcast_episodes/
		added the required property 'results/items/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcast_episodes/{id}/
		added the required property 'best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/
		added the required property 'results/items/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{id}/
		added the required property 'best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/podcasts/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/programs/
		added the required property 'results/items/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/programs/{id}/
		added the required property 'best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v1/userlists/{userlist_id}/items/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '201' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v1/userlists/{userlist_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/
		added the required property 'results/items/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{id}/
		added the required property 'best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/
		added the required property 'results/items/resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ArticleResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/CourseResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/LearningPathResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastEpisodeResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/PodcastResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/ProgramResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoPlaylistResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/video_playlists/{learning_resource_id}/items/{id}/
		added the required property 'resource/allOf[#/components/schemas/LearningResource]/oneOf[#/components/schemas/VideoResource]/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/videos/
		added the required property 'results/items/best_run_id' to the response with the '200' status

info	[response-required-property-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/videos/{id}/
		added the required property 'best_run_id' to the response with the '200' status


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

def best_run(self) -> Optional["LearningResourceRun"]:
"""Returns the most current/upcoming enrollable run for the learning resource"""
published_runs = self.runs.filter(published=True)
if hasattr(self, "_published_runs"):
Copy link
Member Author

Choose a reason for hiding this comment

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

The inclusion of best_run_id in the serializer introduced lots of n+1 query errors, which is why this property needed to be refactored.

@mbertrand mbertrand added the Needs Review An open Pull Request that is ready for review label Nov 12, 2025
@shanbady shanbady self-requested a review November 13, 2025 15:56
Copy link
Contributor

@shanbady shanbady left a comment

Choose a reason for hiding this comment

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

Approving 👍 refactoring here looks good and worked as described.

There are two corner cases which are good to be aware of but probably warrants a separate discussion+PR:

  1. Our contentfile loader has a bunch of logic that tries to pick a "best run" - currently seems to just grab the first published run which is potentially causing issues
  2. We have these "test_mode" courses which may not have any published runs but should still fallback to something (maybe the first run with contentfiles if it has multiple unpublished runs)

@shanbady shanbady added Waiting on author and removed Needs Review An open Pull Request that is ready for review labels Nov 13, 2025
@mbertrand
Copy link
Member Author

I will create a separate issue for the 2 things you mentioned above, I don't think they should be addressed in this PR.

@mbertrand mbertrand changed the title Refactor next_start_date, add best_run_id Add best_run_id to REST/search API results Nov 14, 2025
Comment on lines 577 to 578
# If no current enrollable run found, find the next upcoming run
upcoming_runs = [
Copy link
Contributor

Choose a reason for hiding this comment

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

In the past, I've understood "published" to mean "enrollable". Is that no longer true?

Copy link
Member Author

Choose a reason for hiding this comment

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

Never was - all OCW courses are published but not enrollable for example, You can access all the course material but there is no enrollment possible. Ditto for OpenLearningLibrary,

Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks. That makes sense.

Copy link
Contributor

Choose a reason for hiding this comment

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

Wouldn't OCW and OLL be included in enrollable_runs array via this filter?

                   not run.enrollment_start
                    and run.start_date
                    and run.start_date <= now
                )

Copy link
Member Author

Choose a reason for hiding this comment

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

No, run.start_date is always None for OCW and OLL

if upcoming_runs:
return min(upcoming_runs, key=lambda r: r.start_date)

# If current_run is still null, return the run with the latest start date
Copy link
Contributor

Choose a reason for hiding this comment

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

current_run ... typo?

Comment on lines 577 to 578
# If no current enrollable run found, find the next upcoming run
upcoming_runs = [
Copy link
Contributor

Choose a reason for hiding this comment

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

Wouldn't OCW and OLL be included in enrollable_runs array via this filter?

                   not run.enrollment_start
                    and run.start_date
                    and run.start_date <= now
                )

@mbertrand mbertrand merged commit f6aa06d into main Nov 20, 2025
13 checks passed
@mbertrand mbertrand deleted the mb/next_start_date branch November 20, 2025 13:33
@odlbot odlbot mentioned this pull request Nov 24, 2025
11 tasks
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