Skip to content

Keep obligations created by draft terms in the draft state - #17

Merged
snapsynapse merged 1 commit into
mainfrom
cc/pub2-draft-duty-lifecycle
Sep 24, 2026
Merged

snapsynapse merged 1 commit into
mainfrom
cc/pub2-draft-duty-lifecycle

Conversation

@snapsynapse

@snapsynapse snapsynapse commented Sep 24, 2026 •

Copy link
Copy Markdown
Owner

Summary

Part of PUB-2 (EV02), for the chosen consumer question: what a mental health chatbot supplier must disclose to a Utah user, and what the draft JIA adds.

A concrete obligation took its lifecycle from the shared obligation definition before its creating term. disclose-genai-on-first-session declares lifecycle_status: operative, which normalizes to unknown. So the draft JIA's own duty projected lifecycle, operative and enforcement status as unknown, even though its only creating term is a draft. In a consumer answer, that duty could read as binding.

When the creating term is draft or proposed, the concrete obligation now takes the term's lifecycle and derives operative and enforcement status from it, ignoring the definition's generic values. Issued creators are unchanged. Exactly one record changes: the JIA duty now projects draft / future / unsignaled, matching its term.

Deliberately not changed

  • Actor stays unknown. Utah's "supplier" is defined by reference to §13-11-3 (consumer-transaction sellers). EveryAILaw's provider role means an AI developer or market placer, so borrowing it would strengthen the meaning. A PubLedge role vocabulary is left for a later decision.
  • source_version stays unknown for this journey's records, which draw their source from the draft's authority page. The statutory version evidence sits on PubLedge's statute instruments and receipts, outside this journey.

Merge together

Companion OF PR: snapsynapse/obligation-first#13. It adds the draft's own duty to the Utah journey's expected answer, and its expectation needs this projection. Merge both together, or the federation check fails.

Test plan

  • New projection test with draft, proposed and issued-creator controls; it fails without the fix
  • node --test tests/*.test.js (60 pass) and npm run evals pass
  • OBLIGATION_FIRST_DIR=../obligation-first npm run verify:ci passes
  • Obligation-First fingerprint regenerated: one Requirement moves from unknown to populated on three fields
  • verify:federation passes with the companion OF branch

🤖 Generated with Claude Code

A concrete obligation took its lifecycle from the shared obligation
definition before its creating term. The draft JIA's first-session duty
therefore projected lifecycle, operative and enforcement status as
unknown, because the shared definition declares "operative", even though
its only creating term is a draft. Joined into a consumer answer, that
duty could read as binding.

When the creating term is draft or proposed, the concrete obligation now
takes the term's lifecycle and derives operative and enforcement status
from it, ignoring the definition's generic values. Issued creators are
unchanged. One record changes: the JIA duty now projects draft, future,
unsignaled, matching its term.

Adds a projection test with draft, proposed and issued-creator controls,
and regenerates the Obligation-First fingerprint (one Requirement moves
from unknown to populated on three fields). Part of PUB-2 (EV02).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@snapsynapse
snapsynapse merged commit 5973b41 into main Sep 24, 2026
2 checks passed
@snapsynapse
snapsynapse deleted the cc/pub2-draft-duty-lifecycle branch September 24, 2026 04:10
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