Skip to content

[metadata.tvshows.themoviedb.org.python] v2.0.6 - #140

Open
MikeSiLVO wants to merge 1 commit into
xbmc:piersfrom
MikeSiLVO:piers-v2.0.6
Open

[metadata.tvshows.themoviedb.org.python] v2.0.6#140
MikeSiLVO wants to merge 1 commit into
xbmc:piersfrom
MikeSiLVO:piers-v2.0.6

Conversation

@MikeSiLVO

Copy link
Copy Markdown
  • Show the season regular cast instead of everyone who ever appeared
  • Fix episodes listing the whole series cast
  • Fewer API calls when scraping a show

@kodiai

kodiai Bot commented Aug 3, 2026

Copy link
Copy Markdown

Decision: NOT APPROVED

Issues:

  • MAJOR lib/api/tmdb.py:75 — Incomplete deduplication when cast member appears in multiple seasons
    [MAJOR] When a cast member appears in multiple seasons with different billing orders, this line updates the billing to the minimum but doesn't update the member data. This means the final cast list will show the character name and profile_…

The findings need attention even though Kodiai could not produce safe automatic patches for them.

Review Details
  • Review plan: ready hash=dc565aa6ef61 route=standard task=review.full files=4 lines=152(local-diff) budget=na/695s gates=3/3 publish=canonical-visible-surface graph=skipped candidates=preferred doctrine=disabled/0/0/0 reasons=disabled

  • Review reducer: ready input=1 kept=1 suppressed=0 rewritten=0 deprioritized=0 lowConfidence=0 auditEvents=0 severityDemoted=0 graphValidated=0 graphUncertain=0 doctrine=disabled/0/0/0 reasons=disabled

  • Review candidates: shadow recorded=1 rejected=0 errors=0 artifact=present repo=xbmc-metadata.tvshows.themoviedb.org.python pr=140 key=kodiai-review-output:v1:inst-109141824:xbmc-metadata.tvshows.themoviedb.org.pyth delivery=ef60cb10-8f5b-11f1-992c-ab38decda17e

  • Review candidate publication: mode=moved-to-details approved=1 rewritten=0 publishable=0 nonPublishable=1 fixBlocked=1 published=0 directFallback=0 reasons=candidate-moved-to-details,fix-eligibility-blocked movedToDetails=1 detailsOmitted=0 buckets=blocked:1:fix-eligibility-blocked+missing-replacement,moved-to-details:1:candidate-moved-to-details+missing-replacement

  • Moved review candidates preserved in details:

    • [major/correctness] Incomplete deduplication when cast member appears in multiple seasons (lib/api/tmdb.py:75, reason=missing-replacement) — [MAJOR] When a cast member appears in multiple seasons with different billing orders, this line updates the billing to the minimum but doesn't update the membe…
  • M072 candidate publication bridge: status=denied; bridgeVersion=candidate-publication-bridge.v1; bridgeId=candidate-publication-record:4ce1b9ce6ed8fb5958d6d85a63b1e505; recordKey=candidate-publication-record:4ce1b9ce6ed8fb5958d6d85a63b1e505; correlationKey=candidate-publication-bridge:a2915424a0558b60450ca069986cc159; source=review-handler-publication; candidateRef=candidate-publication-summary-1a632199; verification=none; counts=candidateCount:0,evidenceCount:0,verifiedCount:0,partiallyVerifiedCount:0,unverifiedCount:0,disprovenCount:0,publicationEligibleCount:0,malformedRecordCount:0,unsafeInputFieldCount:0; reasons=no-evidence,publication-ineligible; malformed=none; presence=deliveryId:y,reviewOutputKey:y,upstreamCorrelationKey:y,policyCorrelationKey:y; handoffOwner=available; redaction=privateOnly:y,rawPayloads:n,publicationFields:n,evidencePayloads:n,githubCommentBody:n,reducerRawPayload:n,discardedRawPayload:n,discardedPublicationFields:n,discardedEvidencePayloads:n

  • Review finding lifecycle: status=normalized; counts=input:1,recorded:1,rejected:0,unsafeInputFields:0; correlation=repo:y,pull:y,reviewOutputKey:y,deliveryId:y,commit:y; statuses=detected:1,open:1,suggested:0,validated:0,revalidated:0,resolved:0,blocked:0,degraded:0; severity=critical:0,major:1,medium:0,minor:0; actionability=actionable:0,needs-human-review:1,needs-reproduction:0,blocked:0,not-actionable:0; reasons=automatic-detected,automatic-open,automatic-review; rejected=none; redaction=privateOnly:y,rawPrompts:n,rawModelOutput:n,candidateBodies:n,toolPayloads:n,secretLike:n,diffs:n,unboundedArrays:n,unsafeFields:0

  • Review validation truth: status=normalized; counts=detected:1,suggested:0,validated:0,revalidated:0,resolved:0,blocked:0,degraded:0,open:1,uncertain:0,inputFindings:1,unsafeInputFields:0; evidence=fresh:0,stale:0,missingValidation:1,missingRevalidation:1; reasons=validation-missing:1; refs=rfl-91a47c504a82da2b:open:validation-missing:fix:n:validation:n:revalidation:n; correlation=reviewOutputKey:y,deliveryId:y; redaction=privateOnly:y,rawPrompts:n,rawModelOutput:n,candidateBodies:n,replacementText:n,toolPayloads:n,secretLike:n,diffs:n,unboundedArrays:n,unsafeFields:0

  • Files reviewed: 4

  • Findings: 0 critical, 0 major, 0 medium, 0 minor

  • Lines changed: +84 -68

  • Profile: balanced (auto, lines changed: 152)

  • Contributor experience: profile-backed (using linked contributor profile guidance)

  • Shadow specialist: lane=docs-config-truth status=skipped reason=no-operator-truth-paths candidateCount=0 decisionCount=0 decisionCounts=candidate:0,duplicate:0,disagreement:0,dismissed:0,unclassifiable:0 duplicateCount=0 disagreementCount=0 dismissedCount=0 unclassifiableCount=0 truncatedCandidateCount=0 metricAvailability=token:n,cost:n,latency:n visiblePublicationDenied=true approvalPublicationDenied=true privateOnly=true shadowOnly=true redacted=raw:n,publication:n,approval:n,unsafe:0 correlationKey=660d9d9a45b9a817 deliveryId=ef60cb10-8f5b-11f1-992c-ab38dec… reviewOutputKey=kodiai-review-output:v1:inst-10…

  • Review completed: 2026-08-03T16:59:32.835Z

  • Total wall-clock: 5m 27s

  • Phase timings:

    • queue wait: 0ms
    • workspace preparation: 568ms
    • retrieval/context assembly: 2.9s
    • executor handoff: 1.5s
    • remote runtime: 5m 19s
    • publication: 194ms (degraded: captured before publication completed)
  • Tokens: 106 in / 12,786 out | 0.4921

  • Keyword parsing: No keywords detected

  • Budget behavior: scoped (prompt-budget-limited).

  • Prompt budget: 5 sections, 1 trimmed, 0 bypassed, 291 trimmed tokens.

  • Cache behavior: 2 observations, 1 hits, 1 misses, 0 degraded, 0 bypassed.

  • Continuation behavior: 0 observations, 0 compacted, 0 fallback, 0 degraded, 0 bypassed.

@MikeSiLVO

Copy link
Copy Markdown
Author

@kodiai re-review based on latest force push

@kodiai kodiai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Decision: APPROVE

kodiai response

Decision: APPROVE
Issues: none

Evidence:

  • The critical deduplication bug identified in the previous review has been fixed in lib/api/tmdb.py:73. The line now correctly updates both billing and member data together: found[name] = [billing, member], ensuring that when a cast member appears across multiple seasons, the character information matches the season with the best billing order.
  • Cast handling architecture is sound: _season_regulars() (lines 61-80) aggregates cast from season-level credits, deduplicates by actor name, keeps the member with lowest billing order, and returns up to 200 cast members sorted by billing.
  • Fallback mechanism works correctly: _set_series_cast() (lines 146-153) attempts season regulars first, falls back to _aggregate_cast() (lines 155-167) for shows with no season regulars (episode-credited shows).
  • API efficiency improvements verified: _attach_season_data() (lines 169-196) now batches both images and credits together (per_call = _MAX_APPENDS // 2, lines 176-182), reducing total API calls. Initial show fetch removed aggregate_credits from append list (line 127), only fetching it on-demand when season regulars are unavailable.
  • Cache structure correctly simplified: Module-level cache documentation (line 25) no longer includes 'season_cast' key, matching the removal of per-season cast storage throughout the implementation.
  • Episode cast handling is correct: lib/scraper.py:876 now only adds guest stars to episode cast, with the comment "Kodi merges show cast into every episode, regulars already there" (line 875). The season_cast parameter has been properly removed from _populate_episode() signature (line 786) and all call sites (line 299).
  • Version metadata properly updated: addon.xml bumped to 2.0.6 with accurate changelog, changelog.txt prepended with matching release notes describing the three improvements.
  • No resource leaks, threading issues, or unhandled error paths introduced. All API calls remain wrapped in proper error handling inherited from _get() method.

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