Skip to content

Todo burndown - #1

Merged
rnortman merged 9 commits into
mainfrom
todo-burndown
Jul 21, 2026
Merged

Todo burndown#1
rnortman merged 9 commits into
mainfrom
todo-burndown

Conversation

@rnortman

Copy link
Copy Markdown
Owner

No description provided.

Randall Nortman added 9 commits July 20, 2026 14:53
Per TODO burndown triage 2026-07-20.

- Mark recurring-phase-2-remove-flat-rrule BLOCKED as of 2026-07-20
- Delete from TODO.md and remove in-code markers for:
  done-error-taxonomy-cleanup, done-error-derive-serialize,
  mcp-preflight-shared-error-type, done-anchored-double-rrule-parse,
  workspace-handle
- Reword done-error-grouping-comment to drop the dangling slug reference

Claude-Session: https://claude.ai/code/session_011gDGijCtMBrvxhotRnSxf7
Lint errors were computed at query time and discarded, so callers that read
the cache saw a partial picture. Persist them alongside the indexed entries,
dedup at the read path, and bump SCHEMA_VERSION.

Frozen recurring series are exempted from terminal-status rules: the phase-2
recurrence design forecloses stripping their rrule, so the terminal rules
would otherwise emit permanent false positives.

Claude-Session: https://claude.ai/code/session_012E14JY77xhbbUcZ9gMf6qA
Terminal items were windowed by their effective date, so a task completed
long ago could still surface (or a recently finished one drop out) depending
on scheduling fields that no longer mean anything once the item is done.
Window them by completion date instead.

Claude-Session: https://claude.ai/code/session_012E14JY77xhbbUcZ9gMf6qA
The migration/reindex path accepted rrule strings that the rrule crate
cannot parse, so malformed recurrences silently produced no occurrences.
Lint now flags unparseable rrules, rejects newline-injected values that
could smuggle extra ICS properties, and pins the crate's error text with a
canary so a crate upgrade that changes wording trips the SCHEMA_VERSION gate.

Claude-Session: https://claude.ai/code/session_012E14JY77xhbbUcZ9gMf6qA
…tion

The resolver family read the manifest from ambient process environment, so
tests could not exercise it in isolation and risked leaking each other's
state. Thread an explicit manifest through the resolver call chain; tests now
inject in-memory manifests over TempDir instead of mutating the environment.

Claude-Session: https://claude.ai/code/session_012E14JY77xhbbUcZ9gMf6qA
Cross-repo refs were never validated, so a manifest could point at a global
ID that no repo actually defines (or that two repos both claim) and nothing
flagged it until a downstream lookup silently failed. Validate refs at check
time: report dangling refs, and treat a duplicate global ID within a repo's
own refs as an error. Ref IDs are sanitized before they reach check output so
untrusted values can't inject control characters.

Claude-Session: https://claude.ai/code/session_012E14JY77xhbbUcZ9gMf6qA
…tests

The item sort rank was computed in two places (Rust and SQL) that could
silently drift, and the multi-repo sort tests never actually exercised the
Rust min_by rank path. Collapse to one shared rank function, and rework the
tests to split competitors cross-repo so the ranked path is discriminative
against byte order and guarded by an SQL oracle.

Claude-Session: https://claude.ai/code/session_012E14JY77xhbbUcZ9gMf6qA
MCP config was re-read and re-parsed on every access, and the XDG config
directory path (including the graf/ segment) was assembled independently at
multiple call sites. Cache the parsed MCP config once, and route every caller
through a single graf_config_dir() helper that owns the full path including
the graf/ segment.

Claude-Session: https://claude.ai/code/session_012E14JY77xhbbUcZ9gMf6qA
Terminal and active status string literals were hand-written into multiple SQL
fragments, independent of the Status enum, so adding a status variant could
silently desync the SQL from the enum. Derive the SQL literals from Status
(via TERMINAL_STATUSES_SQL and Status::ALL), add a bridging test that trips
when the SQL and enum diverge, and re-pin the frozen on-disk status spellings.

Claude-Session: https://claude.ai/code/session_012E14JY77xhbbUcZ9gMf6qA
@rnortman
rnortman merged commit 7459bed into main Jul 21, 2026
2 checks passed
@rnortman
rnortman deleted the todo-burndown branch July 21, 2026 11:03
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