Skip to content

#21 co-core 0.37.0: dead-lettered give-ups publish dead_lettered - #55

Merged
gregoryfoster merged 4 commits into
mainfrom
21-dead-lettered
Oct 17, 2026
Merged

gregoryfoster merged 4 commits into
mainfrom
21-dead-lettered

Conversation

@gregoryfoster

Copy link
Copy Markdown
Contributor

Refs #21. The Watcher notice and the deploy come after the merge.

What. co-core ==0.32.0 → ==0.37.0 (all three packages), so processor_version becomes 0.37.0+1 (LOCAL_GENERATION stays 1). handler.publish_gave_up now publishes dead_lettered (cannobserv#536) where it published extraction_error.

Scope (upstream's, from the release comment on #21):

  • dead_lettered is published only on the dead-letter path: the consumer's cap, when an escape got past the handler or a publish was refused non-transiently.
  • The handler's own cap stays extraction_error. Upstream accepts that limit: a timeout or crash can't be told from a document that defeats the parser.
  • detail keeps its dead-lettered: <DLQ reason> prefix, so the DLQ entry and the fact still agree.
  • After a refused ack, the fact that already went out stands and no dead_lettered follows. test_a_refused_ack_at_the_cap_adds_no_failure_fact still holds this, unchanged.

Catch-up 0.32.0 → 0.37.0, checked in code (git diff v0.32.0 v0.37.0 -- packages/):

  • Unchanged: the extract package, canonical_text, spec_fingerprint, resolve_dispatch_essence, util.blobstore / util.hashing, co_core_sync.drivers.blobstore, effects.bus, dead_letter, bus exceptions, co_core_aio.bus.
  • changes.py: ProcessingFailureReason gains "dead_lettered", and ProcessingFailedEvent's docstring changes. The fields and validators of ContentProcessCommand, ProcessingCompleteEmit and ProcessingFailedEmit are unchanged. The rest of the file is the watch pair, FetchPolicyState.generation and the WatchStatusState levels, none of which Processor reads.
  • envelope.py / streams.py: additive only (the info.watch-events / info.watch-check streams and their key rules, plus comments).
  • Dependencies: each package's pyproject.toml changes only its version and the sibling floor.
  • CHANGELOG: the Downstream lines for 0.33.0–0.36.0 concern cli only. 0.37.0 is additive. No security entries in the range.

Goldens: co-core 0.37.0: 0 moved. Only the co_core stamp in goldens.json changed. Real corpus: passes unchanged.

Tests: the test of publish_gave_up is renamed and now asserts dead_lettered. The consumer's give-up tests that go through it (the escape cap, a transiently refused fact, a retried dead-letter, a failed dead-letter at the cap, a dead-letter refused every time) now assert dead_lettered. The handler-cap tests keep asserting extraction_error. Full suite, integration included, on the scratch Redis with child containment: required (Landlock ABI 6): 650 passed, 14 skipped (environment skips, the same as on main).

Docs: spec (a 2026-10-17 amendment, §4 rows and the #17 prose, D5, §2, §5, §7's pin test, the quick reference, OQ2), docstrings in handler.py and consumer.py, DEPLOYMENT.md's dead-letter line, and AGENTS.md's pin. Plan: docs/plans/2026-10-17-21-dead-lettered.md.

🤖 Generated with Claude Code

gregoryfoster and others added 4 commits October 17, 2026 14:37
…0 → 0.37.0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…7.0 pin (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tered

publish_gave_up's fact moves from extraction_error to dead_lettered
(cannobserv#536). The handler's own cap stays extraction_error. Goldens:
0 moved (the extract package is unchanged across 0.32.0..0.37.0).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… DEPLOYMENT.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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