Skip to content

Commit 29f47ae

Browse files
willemnealclaude
andcommitted
feat: registry intake issue forms
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>
1 parent 9d17daf commit 29f47ae

4 files changed

Lines changed: 360 additions & 0 deletions

File tree

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
name: "Registry: Admin op (manage / upgrade contract)"
2+
description: Request a sensitive op — change owner/address/name of a registered contract, or upgrade a deployed contract.
3+
title: "Registry Admin: "
4+
labels: ["registry-intake", "registry-intake:admin"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
# Registry Admin Intake (high-sensitivity)
10+
11+
Use this form for sensitive operations on already-registered or already-deployed
12+
contracts. **Higher quorum applies** (see `.github/registry-quorum.yml`).
13+
14+
Only fill in the fields that apply to your chosen `method`. The validator will
15+
reject submissions where required fields for that method are missing.
16+
17+
> **Out of scope for v1:** `set_admin`, `set_manager`, `remove_manager`, and
18+
> registry-self `upgrade` all require **registry admin** auth, not the CI key.
19+
> Those operations remain offline-only — see `docs/ci-publishing.md`.
20+
21+
- type: dropdown
22+
id: network
23+
attributes:
24+
label: Network
25+
options:
26+
- testnet
27+
- mainnet
28+
validations:
29+
required: true
30+
31+
- type: dropdown
32+
id: method
33+
attributes:
34+
label: Method
35+
description: |
36+
- `update_contract_owner` — change the owner of a registry entry.
37+
- `update_contract_address` — point a registered name at a new contract address.
38+
- `rename_contract` — rename a registry entry.
39+
- `upgrade_contract` — upgrade a deployed contract to a different published wasm.
40+
options:
41+
- update_contract_owner
42+
- update_contract_address
43+
- rename_contract
44+
- upgrade_contract
45+
validations:
46+
required: true
47+
48+
- type: input
49+
id: contract_name
50+
attributes:
51+
label: Contract name (target)
52+
description: The name of the registered contract being modified.
53+
placeholder: e.g. hello, unverified/my-thing
54+
validations:
55+
required: true
56+
57+
- type: input
58+
id: new_owner
59+
attributes:
60+
label: New owner (G… or C…) — `update_contract_owner` only
61+
description: Required for `update_contract_owner`. Leave blank otherwise.
62+
placeholder: G...56 or C...56
63+
validations:
64+
required: false
65+
66+
- type: input
67+
id: new_address
68+
attributes:
69+
label: New contract address (C…) — `update_contract_address` only
70+
description: Required for `update_contract_address`. Leave blank otherwise.
71+
placeholder: C...56
72+
validations:
73+
required: false
74+
75+
- type: input
76+
id: new_name
77+
attributes:
78+
label: New name — `rename_contract` only
79+
description: Required for `rename_contract`. Use `unverified/<name>` for the unverified subregistry. Leave blank otherwise.
80+
placeholder: e.g. hello-renamed
81+
validations:
82+
required: false
83+
84+
- type: input
85+
id: wasm_name
86+
attributes:
87+
label: Wasm name — `upgrade_contract` only
88+
description: Required for `upgrade_contract`. The published wasm name to upgrade to.
89+
placeholder: e.g. hello, unverified/hello
90+
validations:
91+
required: false
92+
93+
- type: input
94+
id: version
95+
attributes:
96+
label: Wasm version — `upgrade_contract` only
97+
description: Optional even for `upgrade_contract`. Leave blank to upgrade to the latest published version.
98+
placeholder: e.g. 0.2.0
99+
validations:
100+
required: false
101+
102+
- type: textarea
103+
id: justification
104+
attributes:
105+
label: Justification
106+
description: |
107+
High-sensitivity ops. Explain why this is needed, who has reviewed the change,
108+
what testing has been done, and what the rollback plan is. Pilots use this to
109+
decide whether to react 👍.
110+
validations:
111+
required: true
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
name: "Registry: Deploy contract"
2+
description: Request that a published wasm be deployed and registered under a name
3+
title: "Registry Deploy: "
4+
labels: ["registry-intake", "registry-intake:deploy"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
# Registry Deploy Intake
10+
11+
Use this form to request that a previously published wasm be deployed (instantiated)
12+
and registered under a contract name on-chain.
13+
14+
- type: dropdown
15+
id: network
16+
attributes:
17+
label: Network
18+
options:
19+
- testnet
20+
- mainnet
21+
validations:
22+
required: true
23+
24+
- type: input
25+
id: wasm_name
26+
attributes:
27+
label: Wasm name
28+
description: Name of the previously-published wasm to deploy.
29+
placeholder: e.g. hello, unverified/hello
30+
validations:
31+
required: true
32+
33+
- type: input
34+
id: version
35+
attributes:
36+
label: Wasm version
37+
description: Semver of the published wasm. Optional — leave blank to deploy the latest.
38+
placeholder: e.g. 0.1.0
39+
validations:
40+
required: false
41+
42+
- type: input
43+
id: contract_name
44+
attributes:
45+
label: Contract name
46+
description: Name to register the deployed contract under. Use `unverified/<name>` for unverified subregistry.
47+
placeholder: e.g. hello, unverified/my-hello
48+
validations:
49+
required: true
50+
51+
- type: input
52+
id: admin
53+
attributes:
54+
label: Admin address (G… or C…)
55+
description: Account or contract that will be set as admin of the deployed contract.
56+
placeholder: G...56 or C...56
57+
validations:
58+
required: true
59+
60+
- type: textarea
61+
id: constructor_args
62+
attributes:
63+
label: Constructor args (after `--`)
64+
description: |
65+
Extra args passed to the contract's `__constructor` after `--`. One `--name=value`
66+
per line. Leave blank if the contract has no extra constructor parameters.
67+
placeholder: |
68+
--token=CTOKEN...
69+
--fee_bps=30
70+
validations:
71+
required: false
72+
73+
- type: input
74+
id: deployer
75+
attributes:
76+
label: Deployer address (G…)
77+
description: Optional. Defaults to the registry contract itself.
78+
placeholder: G...56
79+
validations:
80+
required: false
81+
82+
- type: textarea
83+
id: justification
84+
attributes:
85+
label: Justification
86+
description: |
87+
Why should this wasm be deployed under this name? Has the wasm been reviewed?
88+
Pilots use this to decide whether to react 👍.
89+
validations:
90+
required: true
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
name: "Registry: Publish wasm"
2+
description: Request a wasm hash (or full wasm) be published to the on-chain registry
3+
title: "Registry Publish: "
4+
labels: ["registry-intake", "registry-intake:publish"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
# Registry Publish Intake
10+
11+
Use this form to request that a wasm be recorded on the on-chain registry under a
12+
name and version. Once a quorum of `registry-pilots` reacts 👍 and a pilot comments
13+
`.quorum-check`, the on-chain submit workflow will run from a protected environment.
14+
15+
- For *trusted* names (no prefix), the registry's manager (CI key) will sign on behalf
16+
of the author. For *unverified* names, prefix the wasm name with `unverified/`.
17+
- Versions must be valid semver (`MAJOR.MINOR.PATCH`) and strictly greater than the
18+
current on-chain version for the same name.
19+
20+
- type: dropdown
21+
id: network
22+
attributes:
23+
label: Network
24+
description: Which network to publish to.
25+
options:
26+
- testnet
27+
- mainnet
28+
validations:
29+
required: true
30+
31+
- type: dropdown
32+
id: method
33+
attributes:
34+
label: Method
35+
description: |
36+
- `publish_hash` — record an already-uploaded wasm by its hash. Lower trust burden,
37+
since the hash is supplied directly. **Recommended default.**
38+
- `publish` — fetch the wasm from `wasm_url`, upload it, and record it. The workflow
39+
will compute and verify the hash matches `wasm_hash`.
40+
options:
41+
- publish_hash
42+
- publish
43+
validations:
44+
required: true
45+
46+
- type: input
47+
id: wasm_name
48+
attributes:
49+
label: Wasm name
50+
description: kebab-case. Use `unverified/<name>` to publish to the unverified subregistry.
51+
placeholder: e.g. hello, unverified/hello, oz/fungible
52+
validations:
53+
required: true
54+
55+
- type: input
56+
id: version
57+
attributes:
58+
label: Version
59+
description: Semver. Must be strictly greater than the current on-chain version.
60+
placeholder: e.g. 0.1.0
61+
validations:
62+
required: true
63+
64+
- type: input
65+
id: wasm_hash
66+
attributes:
67+
label: Wasm hash (sha256, hex, 64 chars)
68+
description: Required for `publish_hash`. For `publish`, optional — the workflow will compute and cross-check.
69+
placeholder: 64-character hex string
70+
validations:
71+
required: false
72+
73+
- type: input
74+
id: wasm_url
75+
attributes:
76+
label: Wasm release URL
77+
description: Required for `publish` only. Direct URL to the optimized .wasm artifact (e.g. a GitHub release asset).
78+
placeholder: https://github.com/owner/repo/releases/download/v0.1.0/contract.wasm
79+
validations:
80+
required: false
81+
82+
- type: input
83+
id: author
84+
attributes:
85+
label: Author address (G…)
86+
description: Stellar account address that will be recorded as the wasm's author. Optional — defaults to the CI signer if blank.
87+
placeholder: G...56
88+
validations:
89+
required: false
90+
91+
- type: textarea
92+
id: justification
93+
attributes:
94+
label: Justification
95+
description: |
96+
What is this wasm? What changed since the last published version? Who reviewed
97+
the source offline (link reviews, audit reports, commit ranges)? Pilots use this
98+
to decide whether to react 👍.
99+
validations:
100+
required: true
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
name: "Registry: Register existing contract"
2+
description: Request that an already-deployed contract be registered under a name in the registry
3+
title: "Registry Register: "
4+
labels: ["registry-intake", "registry-intake:register"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
# Registry Register-Contract Intake
10+
11+
Use this form to request that an existing on-chain contract be registered under
12+
a name in the on-chain registry. The contract must already be deployed.
13+
14+
- type: dropdown
15+
id: network
16+
attributes:
17+
label: Network
18+
options:
19+
- testnet
20+
- mainnet
21+
validations:
22+
required: true
23+
24+
- type: input
25+
id: contract_name
26+
attributes:
27+
label: Contract name
28+
description: kebab-case. Use `unverified/<name>` to register under the unverified subregistry.
29+
placeholder: e.g. soroswap, unverified/my-thing
30+
validations:
31+
required: true
32+
33+
- type: input
34+
id: contract_address
35+
attributes:
36+
label: Contract address (C…)
37+
description: The on-chain address of the deployed contract being registered.
38+
placeholder: C...56
39+
validations:
40+
required: true
41+
42+
- type: input
43+
id: owner
44+
attributes:
45+
label: Owner address (G… or C…)
46+
description: Account that will own this registry entry. Optional — defaults to the CI signer if blank.
47+
placeholder: G...56 or C...56
48+
validations:
49+
required: false
50+
51+
- type: textarea
52+
id: justification
53+
attributes:
54+
label: Justification
55+
description: |
56+
Why should this contract be registered under this name? Who controls the contract?
57+
Has it been audited? Pilots use this to decide whether to react 👍.
58+
validations:
59+
required: true

0 commit comments

Comments
 (0)