Skip to content

feat: pilot quorum + on-chain submit workflows - #509

Closed
willemneal wants to merge 3 commits into
mainfrom
feat/registry-issueops-pipeline
Closed

feat: pilot quorum + on-chain submit workflows#509
willemneal wants to merge 3 commits into
mainfrom
feat/registry-issueops-pipeline

Conversation

@willemneal

Copy link
Copy Markdown
Contributor

Add the two workflows that close the loop from in-review issue to
on-chain registry transaction, plus the per-kind quorum policy and
the CLI-args parser:

  • .github/registry-quorum.yml: per-kind min_voters and
    require_unanimous (admin kind requires unanimous; any 👎 blocks).
    Default formula mirrors SCF pg-atlas: ups ≥ min_voters + 2*downs.
  • registry-quorum-check.yml: triggered on .quorum-check comments,
    allowlisted to the registry-pilots team via a read-org PAT.
    Tallies pilot 👍/👎 reactions against the policy, swaps
    in-review → accepted/rejected, dispatches the on-chain workflow on
    accept, closes+locks the issue on reject.
  • registry-onchain-submit.yml: workflow_dispatch only. Re-fetches and
    re-validates the issue body (defense in depth), parses to CLI args
    via parse_intake_to_args.py, runs stellar-registry-cli from a
    protected GitHub Environment (registry-testnet / registry-mainnet)
    that gates the signer secret behind required reviewers, posts the tx
    hash back, labels :submitted or :submission-failed.
  • parse_intake_to_args.py: single source of truth for kind → CLI
    subcommand + flags mapping; emits a download URL when the publish
    method is selected (workflow fetches the wasm before invoking).

Tied together, these expect the operator to have already created the
registry-pilots team, set READ_ORG_MEMBERS_PAT, generated a CI
keypair, called set_manager(<CI_PUBKEY>) once per network as registry
admin, and provisioned the registry-{testnet,mainnet} environments
with secrets and reviewers. See docs/ci-publishing.md (follow-up
commit) for the runbook.

Testable after merge (with bootstrap done): pilots vote on an
in-review issue, one comments .quorum-check, the on-chain workflow
pauses at the env gate, a reviewer approves, the tx hash is posted
back to the issue.

Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com


Stack created with GitHub Stacks CLIGive Feedback 💬

willemneal and others added 3 commits May 12, 2026 16:01
Add four issue-form templates for on-chain registry method requests:
publish, register, deploy, and admin (the high-sensitivity kind that
covers update_contract_owner/address, rename_contract, and
upgrade_contract).

Each form applies `registry-intake` plus a kind subtype label
(`registry-intake:publish` etc.) at creation time. No workflows
consume these labels yet — that lands in follow-up commits.

Testable after merge: visit "New issue", confirm the four templates
render, fill one out, confirm both labels appear on the created
issue. No validation, no votes — just form intake.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add the validate-registry-intake workflow plus its supporting bits:

- issue-ops/parser + issue-ops/validator wiring against the kind-
  specific template (resolved from the issue's `registry-intake:<kind>`
  label).
- Custom JS validators for Stellar strkeys (G…/C…, 56 char base32),
  sha256 wasm hashes (64 hex), semver versions, contract/wasm names
  (kebab-case with optional `<prefix>/`), and https URLs.
- Python helper that pretty-prints the validator's error JSON into a
  friendly issue comment listing the offending fields.

On validation success the issue is labeled `registry-intake:in-review`
and a comment tells pilots how to vote. On failure the issue is
labeled `issueops:validation-error` and the rendered errors are
posted as a comment; the workflow re-runs whenever the issue is
edited.

Testable after merge: open an issue from any of the four templates,
once with valid fields (expect `:in-review` + hint comment) and once
with a malformed strkey/hash/semver (expect `issueops:validation-error`
+ rendered errors). No org PAT, no env, no signer secret needed yet.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add the two workflows that close the loop from in-review issue to
on-chain registry transaction, plus the per-kind quorum policy and
the CLI-args parser:

- .github/registry-quorum.yml: per-kind `min_voters` and
  `require_unanimous` (admin kind requires unanimous; any 👎 blocks).
  Default formula mirrors SCF pg-atlas: `ups ≥ min_voters + 2*downs`.
- registry-quorum-check.yml: triggered on `.quorum-check` comments,
  allowlisted to the `registry-pilots` team via a read-org PAT.
  Tallies pilot 👍/👎 reactions against the policy, swaps
  in-review → accepted/rejected, dispatches the on-chain workflow on
  accept, closes+locks the issue on reject.
- registry-onchain-submit.yml: workflow_dispatch only. Re-fetches and
  re-validates the issue body (defense in depth), parses to CLI args
  via parse_intake_to_args.py, runs stellar-registry-cli from a
  protected GitHub Environment (`registry-testnet` / `registry-mainnet`)
  that gates the signer secret behind required reviewers, posts the tx
  hash back, labels `:submitted` or `:submission-failed`.
- parse_intake_to_args.py: single source of truth for kind → CLI
  subcommand + flags mapping; emits a download URL when the publish
  method is selected (workflow fetches the wasm before invoking).

Tied together, these expect the operator to have already created the
`registry-pilots` team, set `READ_ORG_MEMBERS_PAT`, generated a CI
keypair, called `set_manager(<CI_PUBKEY>)` once per network as registry
admin, and provisioned the `registry-{testnet,mainnet}` environments
with secrets and reviewers. See docs/ci-publishing.md (follow-up
commit) for the runbook.

Testable after merge (with bootstrap done): pilots vote on an
in-review issue, one comments `.quorum-check`, the on-chain workflow
pauses at the env gate, a reviewer approves, the tx hash is posted
back to the issue.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@willemneal
willemneal force-pushed the feat/registry-issueops-validate branch from c7efe7a to 95edd7e Compare May 13, 2026 13:33
Base automatically changed from feat/registry-issueops-validate to main May 13, 2026 16:35
@willemneal

Copy link
Copy Markdown
Contributor Author

Closing in favor of #518 — registry governance is moving on-chain via the Tansu-DAO-gated registry manager rather than the GitHub IssueOps quorum approach.

@willemneal willemneal closed this May 28, 2026
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