Skip to content

Decisions: an owner's answer approves one call, about what it was asked about - #113

Merged
hhff merged 3 commits into
mainfrom
decision-reuse
Nov 5, 2026
Merged

hhff merged 3 commits into
mainfrom
decision-reuse

Conversation

@hhff

@hhff hhff commented Nov 5, 2026

Copy link
Copy Markdown
Member

What

  • scripts/devteam.mjs, decisionAuthorityGap and the new answerUseGap: a decision that rests on an owner's answer (authority answer, or any owner_only class) is held to the rule decide and act already enforce, however its line was written:
    • the earliest call (decision or act) citing the answer is the one it approved. When the question names several things it approves, that's per item, and the decision must name one.
    • a question asked about a ticket backs only calls about that ticket.
    • a goal-level one-way door cited by approve-plan is left to approve-plan's own check, unchanged.
  • test/kit.test.mjs: hand-written decisions that reuse an answer already used by D, or carry an answer asked about bill-01-card into a call about bill-02-x, are refused when an act carries them out.

Why

Found reviewing #105/#106. decide refused a second use of an answer, but the fold didn't. A supervisor could append a decision line citing an answer that had already approved something, or one about another ticket, and act --decision / merge --decision accepted it. On main that's a supervisor-forgeable owner approval for any decision-backed act; #105/#106 would extend it to production releases and owner-settings changes.

Authority

This only narrows authority: a hand-written line now gets exactly what the CLI path gets.

Migration

None. A project's existing decisions were made through decide, which already enforced this.

🤖 Generated with Claude Code

hhff and others added 2 commits November 5, 2026 10:11
…ed about, however the decision line was written

decide and act refused a second use of an answer, but the fold didn't: a decision line written by
hand could cite an answer that had already approved something, or one asked about another ticket,
and an act or merge would accept it (found reviewing #105/#106, where merge --decision makes it a
production release or an owner-settings change). decisionAuthorityGap now holds a decision to the
same rule decide does: the earliest call citing the answer (for the item it approves, when it names
several) is the one it approved, and a question asked about a ticket backs calls about that ticket.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ation; a "no" approves nothing

ownerAnswer, which merge uses for owner-settings and kit-file approvals, checked only that a
question was answered, not what the owner said: a PR changing gates or governance merged citing an
answer of "no". Found reviewing #108, where it lands a repo link the owner refused. goal-change
already held this rule (goalChangeProblem); merge now does too. A review approves by its verified
result and a secrets question by what was posted, as before.

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

hhff commented Nov 5, 2026

Copy link
Copy Markdown
Member Author

Merging (upstream loop). Review: author's own PR; the authority reasoning is in the body. Tested in the combined branch (main + #100 + #103 + #104 + #107 + #113): local Node 24.14.1, 20.19.6 and 18.20.4 each 90/90. CI 18/20/22/24 green at this head, with main (#100) merged in.

@hhff
hhff merged commit b1053e1 into main Nov 5, 2026
4 checks passed
hhff added a commit that referenced this pull request Nov 5, 2026
Brings in #113 (ownerAnswer: an answer approves only the question's recommendation), so the owner's
"no" adds no repo link: link --approved and merge --approved refuse it (new regression test).
cmdMerge's already-merged early return (from main) now reads the ticket's repo (R, S.main_branch).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
hhff added a commit that referenced this pull request Nov 6, 2026
Conflicts resolved keeping main's rules: ownerAnswer (matched, #113),
question_hash (#116), owner_rules (#115), per-entry link binding and
links in home only (#108), one-pass linkify (#107).

Review fixes:
- merge: each changed owner settings class needs its own settling; an
  owner_only class only by the owner's own answer in it (never chat) or
  their standing rule; --approved takes several answers. A ladder-class
  answer (monitor-change) never covers an owner_only key or a kit file.
- merge: a decision is carried out once; settings acts name what settled
  them (answer, rule, decision or rung), and an act a merge logged is
  never a pending landing for a later merge.
- monitors: name set last from the key, a name field refused; credentials
  in a monitor url refused (validate, check-pr/merge); userinfo and query
  never shown (status, alerts, observations, findings, dashboard,
  settings); 2xx only is up; state seeded from the log only when
  state.json is missing; a dead poll's lock is stale at once; no SNI for
  IP hosts.

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