# Pile of Shame > Sort a video-game backlog against the hours you really have. Paste the games you keep meaning to play (title, hours left, progress, notes) and your weekly play hours; the page stands the pile on a cartridge shelf, counts the hours against the budget and gives a fixed verdict. One metered run sorts every game, guilt-free: play next, a two-hour try, the shelf, or retire with thanks. https://pile-of-shame.skillsafe.ai/ ## What is free (runs in the browser) - Parsing a pasted or dropped pile (.txt or .csv): one game per line, columns split on | or a tab (or commas, as in a title,hours,progress export), as title | hours left | progress | notes. Hours left is the player's own estimate (12, 12h, 90 min) or ? for unknown; progress is a percent, blank or "new" for not started. Up to 40 games; duplicate titles and a header row are skipped, and the page says which lines. - The play budget: hours a week times the weeks between two dates (a part week counts as a week). The pile ratio: known hours left over budget hours. - The verdict, a fixed rule on the ratio: clearable at 1.00 or less, needs a trim above 1.00 up to 3.00, avalanche above 3.00. - A draft queue without any model: unstarted games with unknown hours or an unsure note get a two-hour try, started games with unknown hours wait on the shelf, then started games by progress and then the shortest fill the budget. - The cartridge shelf (width grows with hours left, colour shows the call, queued games carry their play-order number), a budget meter, and save slots: each queued game with the weeks it fills at the weekly hours. - Exports: Markdown, CSV, JSON and a calendar file (.ics, one all-day event per save slot), and a print view of the slots. - The loop: a Finished button on each slot takes that game off the pile; a saved pile, reopened, says what changed since it was saved (games off the pile, games added, the ratio move). ## The paid task (one run, model gpt-terra, metered per run) Task id `sort`. Input fields (all strings): `task`, `pile` (a JSON-encoded array of `{id, title, hours, progress, notes}`), `budget`, `mood`, `page_facts`, optional `clip_note` and `retry_note`. The reply is one JSON object: `title`, `verdict` (copied from the rule), `verdict_reason`, `games` (one per game: `id`, `call` = play-next | sample | shelve | retire, `order`, `why`, `reentry`, `thanks`), `mood_note`, `first_step`. Calls follow a fixed order: retire only when the game's own note says the interest is gone; a two-hour try for an unstarted game with unknown hours or an unsure note; the shelf for a started game with unknown hours; then play next while the queue fits the budget, and the shelf for the rest. The page re-checks every reply: the verdict against the rule, one call per game, retirements backed by a note, tries only for unstarted games, no queued game without hours, the queue total against the budget, the play order, word limits, and no weekday, month, season, he or she, or internal field name in the text. ## Grounding The sort only knows what was typed. It never looks up a game and never guesses how long one takes: every number is the player's own. The three free samples use made-up game titles. ## Sources - Built on the SkillSafe skill @rysweet/backlog-curator (https://skillsafe.ai/skill/@rysweet/backlog-curator): multi-criteria backlog prioritisation that recommends the best next task, here pointed at a pile of games. ## Pages - App: https://pile-of-shame.skillsafe.ai/ - API tutorial: https://pile-of-shame.skillsafe.ai/api.html