Skip to content

docs(adr): pin mode is exactly one value - #107

Merged
atbagan merged 1 commit into
mainfrom
docs/adr-018-pin-singleton
May 19, 2026
Merged

atbagan merged 1 commit into
mainfrom
docs/adr-018-pin-singleton

Conversation

@atbagan

@atbagan atbagan commented May 19, 2026

Copy link
Copy Markdown
Contributor

Summary

ADR-018 amendment. Same shape as PR #106. No design change beyond clarifying intent that was already present in the name "pin".

Why

The original §5 pin definition allowed pin to carry one or many Values, with the modal switching between a read-only single entry and a list. That made pin and allowList differ only by the optional Default field. The form implementation surfaced this as a real UX problem during visual testing: operators added multiple values to a rule labeled "pin" when they intuitively expected a single value.

Changes

  • §5 pin definition: Values must have length 1; modal renders as single read-only selection
  • Mode-behavior table row for pin: "Yes (single value)" / "Renders read-only"

The orthogonal four-mode grid is now clean:

Single value Multi value
Enforcing pin allowList
Advisory default recommended

Companion fixes

Verification

  • Zero em-dashes / banned words / AI references
  • No schema change; only the cardinality constraint on Values for pin mode changes

The original §5 mode-semantics text allowed pin to carry one or
many Values, with the modal switching between a read-only single
entry and a list. That made pin and allowList only differ by the
optional Default field, which is a weak distinction the form
implementation surfaced as a real UX problem (operators added
multiple values to a "pin" rule when they expected a singleton).

Update §5 pin definition: Values must have length 1; the modal
renders the entry as a single read-only selection. Use allowList
when the value count is unbounded; use pin only when the single-
value semantics are deliberate.

Mode-behavior table row for pin updated to "Yes (single value)"
and "Renders read-only" so the orthogonal grid reads cleanly:

  pin:         single value, enforcing
  default:     single value, advisory
  allowList:   multi value,  enforcing
  recommended: multi value,  advisory

butler-controller webhook (PR #105) enforces len(Values) == 1 for
pin. butler-console form (PR #76) renders pin as a single-select.
No design change beyond clarifying intent that was already
present in the name "pin".
@atbagan
atbagan merged commit 8470e3c into main May 19, 2026
@atbagan
atbagan deleted the docs/adr-018-pin-singleton branch May 19, 2026 00:44
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