Skip to content

gate-change can be settled by the owner's own standing rule - #115

Merged
hhff merged 3 commits into
mainfrom
gate-change-rule
Nov 6, 2026
Merged

hhff merged 3 commits into
mainfrom
gate-change-rule

Conversation

@hhff

@hhff hhff commented Nov 5, 2026

Copy link
Copy Markdown
Member

What

  • governance/constitution.md: owner_rules: ["gate-change"], the owner-only classes the owner may settle with their own standing rule. The prose says the rule is given from the dashboard or the owner's terminal, never relayed from chat.
  • scripts/devteam.mjs:
    • merge: when every changed owner setting is of a class in owner_rules and the owner has an accepted rule scoped class:<cls>, the merge is approved by the rule and says so, with no --approved. A PR that also changes any other owner class still needs an answer.
    • decide/act --approved <k-rule> accept such a rule.
    • decisionAuthorityGap lets a standing-rule decision in such a class reach the rule check.
    • New ownerRuleFor(cls).
  • test/kit.test.mjs:
    • a rule relayed from chat is refused;
    • the owner's rule approves a gates-only chore;
    • the same chore with upstream_repo (governance-edit) added still needs an answer.

Why

The owner told stacksbot that new dev tools can be added without asking ("I've already told you new dev tools can be added without asking me. Do it autonomously going forward"). The kit couldn't honor that, so the supervisor kept asking. Asked here, the owner chose that their standing rule may cover any gate-change, removing and loosening gates included. They were told it would let the supervisor weaken the checks that review its own work.

Authority

  • This is a deliberate widening, decided by the owner.
  • It is bounded to classes listed in owner_rules (only gate-change), to rules the owner wrote themselves (answer --from-chat refuses --rule, and the rule's writer must be the owner), and to accepted rules with exactly class:gate-change scope.
  • It never covers another owner class in the same PR.

Migration

None required. To use it, the owner answers a gate-change question with "Keep this answer as a standing rule" (scope class:gate-change), or runs answer <qid> yes --rule "…" --rule-scope class:gate-change. An existing rule with project scope doesn't count; it must be scoped to the class.

🤖 Generated with Claude Code

hhff and others added 3 commits November 5, 2026 10:52
…tion owner_rules)

The owner told stacksbot's supervisor that dev tooling needs no question, but gate-change is
owner-only and no standing rule could cover an owner-only class, so the supervisor had to ask
anyway. The owner decided their standing rule may cover any gate-change. constitution.md gains
owner_rules: ["gate-change"]. merge accepts the owner's accepted rule scoped class:gate-change for a
PR whose owner-settings changes are all gate-change (any other owner class in the same PR still needs
an answer), and decide accepts it as a standing-rule authority. A rule is the owner's own: answer
--from-chat takes no --rule, so the supervisor can't write one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	docs/devteam/governance/constitution.md
#	docs/devteam/scripts/devteam.mjs
@hhff

hhff commented Nov 6, 2026

Copy link
Copy Markdown
Member Author

Merging for v0.20.1 (upstream loop).

@hhff
hhff merged commit 7755af1 into main Nov 6, 2026
4 checks passed
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