Skip to content

fix: name canonical-vs-dotted contradiction, reject empty endorsements (confirmation-pass-1 chair rulings) - #49

Merged
silversurfer562 merged 2 commits into
mainfrom
claude/peaceful-haibt-0843bb
Aug 20, 2026
Merged

fix: name canonical-vs-dotted contradiction, reject empty endorsements (confirmation-pass-1 chair rulings)#49
silversurfer562 merged 2 commits into
mainfrom
claude/peaceful-haibt-0843bb

Conversation

@silversurfer562

Copy link
Copy Markdown
Member

Implements the three chair rulings on the confirmation-pass-1 needs-a-look rows for bridge.py (ledger ~/.attune/reports/roundtable/confirmation-pass-1-ledger-2026-08-20.md; rulings taken 2026-08-20).

Rulings and changes

  1. Canonical-vs-dotted contradiction — name it (ruled: name it). _fold_expanded_answers used to let a canonical answer ({"t": {...}}) silently win over a contradicting dotted sibling ("t.i2": "skip") — the same silent-drop class fix: name typed rank-slot collisions in the markdown ranking fold #39/fix: sweep fix batch — telemetry crash, prefill coercion, response_id collision, MCP schema drift #40 named for rank slots. A mixed shape is now a named validation problem listing the dotted keys. The markdown surface merges dotted rows into the canonical shape before handoff, so a mixed shape at collect time means a confused caller, not a typed reply.
  2. Explicit "" collects the default — keep and document (ruled: keep). Empty is the accept-the-default gesture (enter through a prompt, an untouched widget); the bridge cannot distinguish a deliberately cleared prefill from an untouched one. Documented in collect_form_response's docstring; behavior pinned by a regression test.
  3. DELIBERATION endorsements: {} — reject (ruled: name it). The empty mapping satisfied the required check vacuously, yielding exactly the "just a decision, no endorsements" the field's requirement exists to prevent. Now a named definition problem; options nobody endorsed remain allowed.

Tests

  • 647 passed (baseline 644), ruff clean.
  • Two tests that pinned the overturned canonical-wins rule rewritten to expect the named problem (test_bridge.py, test_triage_construct.py); new regressions for the ranking mixed shape, empty endorsements, and the kept empty-accepts-default contract.

🤖 Generated with Claude Code

…s (confirmation-pass-1 chair rulings)

Three chair rulings on the confirmation-pass-1 needs-a-look rows
(ledger 2026-08-20):

- _fold_expanded_answers: an expanding answer supplied both canonically
  and as dotted keys is a named problem instead of canonical silently
  winning — the contradicting dotted value used to vanish, the same
  silent-drop class #39/#40 named for rank slots
- _parse_endorsements: a DELIBERATION with endorsements {} is a named
  definition problem — it satisfied the required check vacuously
- collect_form_response: explicit "" collecting the default is KEPT
  and documented as the accept-the-default gesture (surfaces needing a
  clearable field must not prefill via default); behavior pinned by test

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@silversurfer562
silversurfer562 force-pushed the claude/peaceful-haibt-0843bb branch from cdd5e74 to 87f3bb2 Compare August 20, 2026 13:18
@silversurfer562
silversurfer562 merged commit a55aac5 into main Aug 20, 2026
7 checks passed
@silversurfer562
silversurfer562 deleted the claude/peaceful-haibt-0843bb branch August 20, 2026 13:50
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