feat(domain): W5-C subscription gaps, episode totals, multi-inflight slot, hard conditions and priority ladder

- resolveEpisodeTotal: totals only grow; TMDB regression floored at highest covered episode; manual lock
- computeUnitGaps / seasonProgress / unitsOverlap: missing = units ∩ range − covered − in-flight,
  season wildcard reservation, suspected-missing when total unknown
- transitionWithInflight: slot status aggregates several in-flight plans (Slot × unit reservation)
- hard conditions: excludeSources, hdr sets, codec sets, per-unit size, include/exclude regex
  (whitelist-validated), site scope, minSeeders, freeOnly (site facts via EvaluationContext)
- priority ladder (MP rule-group tiers) → pri 0-100 with per-tier trace; priority-basis upgrades,
  targetPri ceiling, upgrade modes movie/per_unit/full_pack, improvableUnits
- all evaluations carry readable trace via describeViolation

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-27 23:33:46 +08:00
1 parent 89ea68465e
commit d162d464c4
9 files changed
+1023 -42

No files matched your search

+27
View File
@@ -6,17 +6,44 @@ export {
type UnitCompletion,
unitCompletion,
} from "./completion.ts";
export {
type EpisodeTotalInput,
type EpisodeTotalResult,
type EpisodeTotalSource,
resolveEpisodeTotal,
} from "./episode-total.ts";
export {
checkHardConditions,
compareRank,
currentPri,
DEFAULT_SOURCE_TIERS,
describeViolation,
evaluateCandidate,
improvableUnits,
priorityLadder,
qualityTier,
type RankedEvaluation,
RESOLUTION_RANK,
rankForSlot,
softRank,
unitCountOf,
validateKeywordPattern,
} from "./evaluate.ts";
export {
computeUnitGaps,
episodeKey,
inRange,
parseUnitKey,
type SeasonProgress,
type SeasonProgressInput,
seasonProgress,
seasonWildcard,
type UnitGapInput,
type UnitGaps,
type UnitRange,
unitsOverlap,
} from "./gaps.ts";
export { busyStatus, type PlanStage, stageAfter, transitionWithInflight } from "./inflight.ts";
export {
canTransition,
type SlotEvent,