Read the scope and evidence
paper-table-recurring-calendar.ics
2026-10-14 · parser · passed
Custom parser for this exact finite all-day fixture: envelope, properties, DATE values, text escaping, CRLF and bounded content lines. This is not general RFC certification or application compatibility.
- One VCALENDAR, one master VEVENT and one detached override
- Physical lines use CRLF and are at most 75 octets
- Description semicolon unescapes to the exact source text
- No attendees, organizer, alarm, location, METHOD or external-resource property
Environment: Python 3.12.14 standard-library bounded ICS parser, csv, calendar/date arithmetic and SHA-256 checks on Linux; python-dateutil 2.9.0.post0 for separate recurrence-set expansion. No full independent ICS parser installed; no consumer AI or calendar application used.
SHA-256: 1af557fb6b25827183f95ed43f142bb185084b01d6f1eee8654f93d5f7e721cd
paper-table-recurring-calendar.ics
2026-10-14 · semantic fixture · passed
Independent day-by-day Saturday enumeration and literal outcome oracle; python-dateutil separately checks the master recurrence set, with the detached move applied by the bounded checker. Sixteen corrupt ICS variants rejected. A separate identical-input rebuild preserved exact bytes and identities.
- Eight original Saturdays and exact eight live dates
- 17 and 31 October absent; exactly one live 1 November slot
- Moved slot retains recurrence identity 31 October under the master UID
- 11 November is an extra date in the same series
- All-day ends are the next date; fixed initial revision metadata preserved
- 16 corrupt ICS variants rejected, including wrong exception target, duplicate override, wrong UID and wrong all-day end
Environment: Python 3.12.14 standard-library bounded ICS parser, csv, calendar/date arithmetic and SHA-256 checks on Linux; python-dateutil 2.9.0.post0 for separate recurrence-set expansion. No full independent ICS parser installed; no consumer AI or calendar application used.
SHA-256: 1af557fb6b25827183f95ed43f142bb185084b01d6f1eee8654f93d5f7e721cd
paper-table-calendar-source.json
2026-10-14 · parser · passed
UTF-8 JSON parsing and explicit bounded input-contract validation on the complete source; no solved answer is read from this source.
- Complete finite weekly rule and three exception records
- Exact title, description, fixed UID and revision controls
- All-day one-day duration and explicit no-collision policy
Environment: Python 3.12.14 standard-library bounded ICS parser, csv, calendar/date arithmetic and SHA-256 checks on Linux; python-dateutil 2.9.0.post0 for separate recurrence-set expansion. No full independent ICS parser installed; no consumer AI or calendar application used.
SHA-256: 8f11c8e189496adf3facd210d7badb460896850544b21e959a825d218acf6535
paper-table-calendar-source.json
2026-10-14 · semantic fixture · passed
Source expansion checked against independent calendar enumeration and a separate literal output oracle. Source hash remained unchanged during checking.
- Eight Saturdays from 3 October through 21 November
- Cancel 17 October; move original 31 October to 1 November; add 11 November
- No duplicate live dates or occurrence identities
- Identical fixed-input rebuild preserved source and generated artifact hashes
Environment: Python 3.12.14 standard-library bounded ICS parser, csv, calendar/date arithmetic and SHA-256 checks on Linux; python-dateutil 2.9.0.post0 for separate recurrence-set expansion. No full independent ICS parser installed; no consumer AI or calendar application used.
SHA-256: 8f11c8e189496adf3facd210d7badb460896850544b21e959a825d218acf6535
paper-table-occurrences.csv
2026-10-14 · parser · passed
Strict CSV parsing, exact six-column header and full-row oracle comparison. Literal CSV bytes are checked; no spreadsheet-app import.
- One header and eight complete data rows
- Exact source title and UID in every row
- Chronological starts and unique series/recurrence key pairs
Environment: Python 3.12.14 standard-library bounded ICS parser, csv, calendar/date arithmetic and SHA-256 checks on Linux; python-dateutil 2.9.0.post0 for separate recurrence-set expansion. No full independent ICS parser installed; no consumer AI or calendar application used.
SHA-256: 92abf48527d9bd5f504d6e24bffd5429913c8e4a0aee0abf68bfb704fa7ed530
paper-table-occurrences.csv
2026-10-14 · semantic fixture · passed
Every row compared to independently transcribed identity/start/end/type controls, not only a row count. Four corrupted ledger variants rejected.
- Exact eight live dates with next-day exclusive ends
- Moved row has recurrence_date 2026-10-31 and start_date 2026-11-01
- One added 11 November row; six regular rows and one moved row
- Duplicate row, missing row, wrong recurrence key and changed title rejected
Environment: Python 3.12.14 standard-library bounded ICS parser, csv, calendar/date arithmetic and SHA-256 checks on Linux; python-dateutil 2.9.0.post0 for separate recurrence-set expansion. No full independent ICS parser installed; no consumer AI or calendar application used.
SHA-256: 92abf48527d9bd5f504d6e24bffd5429913c8e4a0aee0abf68bfb704fa7ed530
paper-table-exceptions.txt
2026-10-14 · semantic fixture · passed
Readable exception log reviewed against the source and exact live ledger; checker confirms all live starts/ends, moved original identity and the no-import boundary. This does not test app behavior.
- Cancellation, moved-instance identity and addition described
- All eight starts and next-day ends present
- Import, repeated import and notification behavior explicitly untested
- Stable UID is not presented as a deduplication guarantee
Environment: Python 3.12.14 standard-library bounded ICS parser, csv, calendar/date arithmetic and SHA-256 checks on Linux; python-dateutil 2.9.0.post0 for separate recurrence-set expansion. No full independent ICS parser installed; no consumer AI or calendar application used.
SHA-256: 284c80bf90ef80ddb0e190843ec6f0ac7dcaad571c7dc405c9756aa2db6cdcb0
paper-table-calendar-invalid-cases.json
2026-10-14 · semantic fixture · passed
Six independent replacement-exception lists were applied in memory to the original source; each was held for its expected reason before export.
- Unknown original occurrence held
- Conflicting moves and cancel-plus-move held
- Move onto occupied live date and duplicate addition held
- Impossible date held; source file unchanged
Environment: Python 3.12.14 standard-library bounded ICS parser, csv, calendar/date arithmetic and SHA-256 checks on Linux; python-dateutil 2.9.0.post0 for separate recurrence-set expansion. No full independent ICS parser installed; no consumer AI or calendar application used.
SHA-256: 60f26562d0ad596799380737de71c1e37ae8173996d5da446fe09dc271d81b3e
2026-10-14 · confirmed
DATE-valued starts use DATE-valued ends; DTEND is exclusive.
Limits: This review does not establish a provider plan, import compatibility, notification behavior or repeated-import deduplication.
2026-10-14 · confirmed
DTSTART is the first occurrence counted by COUNT.
Limits: This review does not establish a provider plan, import compatibility, notification behavior or repeated-import deduplication.
2026-10-14 · confirmed
EXDATE excludes recurrence-set dates and takes precedence over inclusions.
Limits: This review does not establish a provider plan, import compatibility, notification behavior or repeated-import deduplication.
2026-10-14 · confirmed
RDATE adds dates to the recurrence set; duplicate inclusion values collapse in the format.
Limits: This review does not establish a provider plan, import compatibility, notification behavior or repeated-import deduplication.
2026-10-14 · confirmed
RECURRENCE-ID identifies the original occurrence start, even when that occurrence moves.
Limits: This review does not establish a provider plan, import compatibility, notification behavior or repeated-import deduplication.
2026-10-14 · confirmed
UID identifies the recurring series; RECURRENCE-ID references an individual occurrence.
Limits: This review does not establish a provider plan, import compatibility, notification behavior or repeated-import deduplication.
2026-10-14 · confirmed
Content lines use CRLF; lines longer than 75 octets should be folded.
Limits: This review does not establish a provider plan, import compatibility, notification behavior or repeated-import deduplication.
2026-10-14 · confirmed
TEXT values escape backslashes, commas and semicolons; colons are not escaped.
Limits: This review does not establish a provider plan, import compatibility, notification behavior or repeated-import deduplication.
2026-10-14 · confirmed
A newly created component starts with SEQUENCE 0.
Limits: This review does not establish a provider plan, import compatibility, notification behavior or repeated-import deduplication.