Skip to content

feat: add list hygiene judge skill - #398

Open
emilianochagoya wants to merge 12 commits into
runxhq:mainfrom
emilianochagoya:codex/list-hygiene-judge
Open

feat: add list hygiene judge skill#398
emilianochagoya wants to merge 12 commits into
runxhq:mainfrom
emilianochagoya:codex/list-hygiene-judge

Conversation

@emilianochagoya

Copy link
Copy Markdown

Summary

Adds the list-hygiene-judge graph-runner skill. It reads one contact projection, binds a consent decision to the durable version, appends at most one consent-state event with compare-and-set plus idempotency, reads the result back, and never sends.

Safety and behavior

  • Hard-bounce suppression requires durable contact.hard_bounce_observed evidence.
  • Re-permission is refused when an unsubscribe marker is active.
  • Missing/unreadable evidence, ambiguous bounce recovery, or a stale version stops in human:list-hygiene-reviewer without appending.
  • The append uses the caller's expected_version and idempotency_key; the decision step first verifies that the actual contact projection version matches.
  • The result names send-as only as a downstream governed run that must re-read recorded consent state. This skill performs no send or dispatch.
  • A single terminal step produces the public result packet.

Validation

Validated with runx-cli 0.8.2:

runx harness ./skills/list-hygiene-judge --json
status: passed
case_count: 3
assertion_error_count: 0

Cases and sealed receipts:

  • sealed_decay_re_permissionsha256:a13c2b1dc6d2e0d7f22746d4a73b962569a92b1b0135d943f5e6a3f6e9ff34d1
  • sealed_hard_bounce_suppresssha256:60a5da81080013a4747e31b0f95fd2d0d8349c2c5c9411e7f7bb548eb33052b4
  • stop_missing_or_stale_evidencesha256:3856eeab676d1d99d8cd59b1c5c55ff1237dd1367d2c1f44e510e23c4ac48a74

runx skill inspect reports ready with package digest:

sha256:8b3cdcf9f6126c56ae43cd7ac5e3e8b0681b39e8c4f551deee8893ee902e53ce

Data-store pin

The older runx/data-store@0.1.2 name in the original brief no longer resolves from the public registry. This package pins the current immutable first-party registry release instead:

runx/data-store@sha-30c9df39e353
sha256:d3d15497ed1b541d779b7286dc5bf26ddfdbd510b27abd9b65465415e98b0365

This is the current canonical read_projection / append_event contract and keeps the dependency immutable.

Package files

  • SKILL.md
  • X.yaml
  • list-hygiene-judge.mjs
  • harness-evidence.json
  • three native SQLite fixtures under fixtures/

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