Skip to content

The calendar is still blank and I was told the paid models would sort it #11

Closed

Description

@RabHanz

The household calendar prints "(not implemented yet)" for every chore. The deep clean should land on the last day of each month, piano practice should be every other week, and anything falling on a holiday should move to the next free day.

This time the attempts include two paid models beside a free one, so we can see whether paying buys a right answer.

pack: packs/chore-recurrence
models: openrouter:openai/gpt-oss-20b,openrouter:qwen/qwen3.7-flash,gemini:gemini-3.5-flash-lite

Activity

  1. added
    assaya task several models attempt; the board arrives in the thread
    on Sep 12, 2026
  2. github-actions commented on Sep 12, 2026

    @github-actions

    3 attempts at chore-recurrence v1, judged

    One of 3 attempts got every check right: A. 2 wrote nothing at all.

    Each attempt ran alone in its own copy of the tree, with the same brief and the same ceilings: 6 turns · 8000 completion tokens · 300s. A check written before any of them saw the task, and that none of them could read, judged what they produced.

    verdict stopped what the check said
    B no file written transport_error stopped before writing the file
    A passed done
    C no file written transport_error stopped before writing the file

    The next three times each chore comes round

    as of Wednesday 28 January 2026, skipping the household's holidays

    next then after that
    Bins out weekly:1:MO Tue 03 Feb Mon 09 Feb Mon 16 Feb
    Water the plants daily:3 Sat 31 Jan Tue 03 Feb Fri 06 Feb
    Deep clean monthly:1:31 Sat 31 Jan Sat 28 Feb Tue 31 Mar
    Piano practice weekly:2:MO,WE Tue 03 Feb Wed 04 Feb Mon 16 Feb

    All 1 attempts produced exactly this, and it is right in every row. Nothing separates them on the outcome, so the receipts decide once you choose.

    Identities, costs and timings stay hidden until someone chooses. The code itself, for whoever wants it:

    Candidate A — 3003 bytes
    --- fixture/solution.py
    +++ workspace/solution.py
    @@ -1,7 +1,26 @@
    -from datetime import date
    +from datetime import date, timedelta
    +from calendar import monthrange
     
     
    -def next_due(start: date, rule: str, after: date, holidays):
    +def _add_months(d: date, months: int) -> date:
    +    year = d.year + (d.month - 1 + months) // 12
    +    month = (d.month - 1 + months) % 12 + 1
    +    day = d.day
    +    _, last_day = monthrange(year, month)
    +    if day > last_day:
    +        day = last_day
    +    return date(year, month, day)
    +
    +
    +def _resolve_holiday(d: date, holidays) -> date:
    +    if holidays is None:
    +        return d
    +    while d in holidays:
    +        d += timedelta(days=1)
    +    return d
    +
    +
    +def next_due(start: date, rule: str, after: date, holidays) -> date:
         """Return the next due date strictly after `after` for a chore.
     
         rule is one of:
    @@ -11,4 +30,64 @@
         A due date landing on a date in `holidays` (a set of date) rolls FORWARD
         to the next day that is not a holiday.
         """
    -    raise NotImplementedError
    +    parts = rule.split(':')
    +    freq = parts[0]
    +
    +    weekday_map = {'MO': 0, 'TU': 1, 'WE': 2, 'TH': 3, 'FR': 4, 'SA': 5, 'SU': 6}
    +
    +    if freq == 'daily':
    +        N = int(parts[1])
    +        diff_days = (after - start).days
    +        if diff_days < 0:
    +            k = 0
    +        else:
    +            k = diff_days // N + 1
    +        
    +        cand = start + timedelta(days=k * N)
    +        while cand <= after:
    +            cand += timedelta(days=N)
    +        return _resolve_holiday(cand, holidays)
    +
    +    elif freq == 'weekly':
    +        N = int(parts[1])
    +        weekdays = sorted([weekday_map[w] for w in parts[2].split(',')])
    +        
    +        start_monday = start - timedelta(days=start.weekday())
    +        approx_days = (after - start_monday).days
    +        w_idx = max(0, approx_days // (N * 7) - 2)
    +
    +        while True:
    +            week_start = start_monday + timedelta(weeks=w_idx * N)
    +            for wd in weekdays:
    +                cand = week_start + timedelta(days=wd)
    +                if cand >= start and cand > after:
    +                    resolved = _resolve_holiday(cand, holidays)
    +                    if resolved > after:
    +                        return resolved
    +            w_idx += 1
    +
    +    elif freq == 'monthly':
    +        N = int(parts[1])
    +        D = int(parts[2])
    +        
    +        total_months = (start.year - 1) * 12 + (start.month - 1)
    +        approx_months = (after.year - start.year) * 12 + (after.month - start.month)
    +        m_idx = max(0, (approx_months // N) - 3)
    +
    +        while True:
    +            m_total = total_months + m_idx * N
    +            y = m_total // 12 + 1
    +            m = m_total % 12 + 1
    +            
    +            _, last_day = monthrange(y, m)
    +            day = min(D, last_day)
    +            cand = date(y, m, day)
    +            
    +            if cand >= start and cand > after:
    +                resolved = _resolve_holiday(cand, holidays)
    +                if resolved > after:
    +                    return resolved
    +            m_idx += 1
    +
    +    else:
    +        raise ValueError(f"Unknown frequency {freq}")

    Reply /assay choose B (any label above) to commit to one. That reveals every identity and receipt, and opens a pull request carrying exactly that attempt — nothing else is applied.

    round 2026-09-12T21-23-00Z-chore-recurrence · a pass means it passed this pack's checks, not that the code is correct · a choice is taken only from an account with write access to this repository

  3. RabHanz commented on Sep 12, 2026

    @RabHanz
    OwnerAuthor

    Closing this one honestly: the two paid rows failed with a 401 because the workflow's OpenRouter secret had been set with the surrounding quotes from an env file, so the request carried an invalid header and never reached a model. Nothing was spent. The secret is re-set clean and the same line-up runs again on the next issue. The two transport_error rows above are exactly what the board is supposed to show when a call never happened: not a wrong answer, not a pass.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    assaya task several models attempt; the board arrives in the thread

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions