Repository navigation
Move to Protocol Spec #716
Replies: 3 comments 4 replies
|
Understood on how proposal diff dependencies can be managed using git-style version control, but what about in-protocol dependencies that are currently detected using implementation-specific details (e.g. Is there anyway to incorporate some kind of specification dependency chart in the RFC 2119-style spec draft? Asking because while I think that spec-driven development is overall the right option, I suspect that updates to text files might miss some of the interplay caught by client implementations |
IMO we should not assign a SIMD identifier until the SIMD has graduated from discussion to spec review(Github discussion to Pull Request). Are you interested in having this completely decoupled from the issue number?
If we're keeping these open until Mainnet activation, will each additional change to the protocol spec as new unknown behavior found in testing be an additional acceptance as a commit on top of the PR? Would we update the status from
If we're making PRs to the spec in SIMDs, imo this should live here. |
|
I absolutely love this. I have one small suggestion. Since there are quite a few open SIMDs, it might be difficult for someone new to the specification to understand what changes are already planned. I suggest adding a list of SIMDs that are expected to modify each section at the beginning of that section, and keeping it up to date - adding SIMDs once they are accepted and removing them once they are activated. |
Uh oh!
There was an error while loading. Please reload this page.
I have been working on a draft of a full Solana Protocol Specification. I would like feedback on changing the SIMD process so that the primary artifact for a protocol change is a PR against the specification.
The existing process has produced many useful proposals, but it has also exposed several recurring problems:
The proposed process makes the protocol change itself the proposal.
Proposed process
Ideas would still begin in SIMD Discussions. This is where an idea receives an initial concept ACK and where we discuss whether it is worth specifying in detail.
Once an idea is ready to become a concrete proposal, its author would open a pull request against the protocol specification. That pull request would describe the complete normative change, including byte layouts, state transitions, error behavior, limits, feature interactions, and any other details needed for independent implementations to agree.
Each proposed change would retain a stable SIMD identifier, assigned and used in much the same way as it is today. The identifier would follow the proposal through discussion, specification review, implementation, and activation. After the change merges, the identifier would remain available as a way to reference that particular protocol change.
The substantive SIMD approval process would also remain largely the same. The same technical review, relevant contributor ACKs, and governance approval would still be required.
The specification is organized primarily by horizontal protocol domains: transactions, runtime, consensus, networking, ledger format, programs, and so on. A proposal should update every affected domain. Large features that cut across several domains may also receive a cohesive description in a dedicated "Features" section so that the feature can be understood as a whole.
The specification describes the protocol currently active on Mainnet. It is versioned by Mainnet epoch. A specification pull request does not merge just because the design has been accepted, implemented, or activated on another cluster. A normative protocol change merges when that change becomes active on Mainnet.
Errata and clarifications are different. A correction that makes the specification accurately describe behavior already active on Mainnet may merge without a feature activation.
Testnet, devnet, implementation, and rollout status can be recorded in comments on the pull request. Issues that require changes to the proposed specification would be reflected in new commits to the PR.
In short:
This proposal is mainly about standard protocol changes. Meta proposals concerning governance or the process itself still make sense as standalone documents.
Why make this change?
A protocol proposal should focus on what an implementation must do differently. Creating the proposal as a specification diff makes this explicit during review. It also makes omissions easier to find. If a change affects transaction validation, runtime execution, fees, and consensus, reviewers can see whether all four areas were updated.
It also keeps the current protocol in one place. Implementers should not need to reconstruct Mainnet behavior by combining a base implementation, years of SIMDs, feature-gate history, and implementation-specific behavior.
SIMD discussions and links would still preserve the motivation, alternatives, and design history. The specification would describe the resulting protocol.
Migration
There will be a transition period for existing SIMDs that are not yet active on Mainnet.
I propose that we:
The baseline specification is intended to capture SIMDs already active on Mainnet. Any omissions or inaccuracies in that baseline would be handled as specification errata.
Following adoption of this process, all new protocol proposals would use the specification-PR process.
Dependencies between proposals
Dependencies can be handled in much the same way as dependencies between code changes.
If proposal B depends on proposal A, B can be developed on top of A's specification branch or diff. The dependency should be stated clearly in the PR. Once A merges, B rebases onto the updated specification.
This allows dependent proposals to be reviewed and implemented without pretending that their prerequisites are already part of the Mainnet protocol. It also makes dependencies, conflicts, and incompatibilities more explicit.
Representing proposal status
The main GitHub-state question I have is how to represent a proposal whose language has been accepted for implementation but which is not yet active on Mainnet.
The beginning and end are reasonably clear:
For the intermediate state, I suggest keeping the PR open, applying an "accepted for implementation" label, and adding a maintainer comment identifying the exact approved commit. Implementers could work against that commit. Any subsequent spec change would require renewed review before the proposal could be considered accepted again.
Where governance approval is required, a separate label and a link to the governance decision could record that ACK without merging the protocol change early.
This preserves the useful states in the current SIMD lifecycle, while making merge status mean something unambiguous—the change is part of the active Mainnet protocol.
Next Steps
Collect feedback on this general approach and discuss any concerns.
If there is broad agreement on the direction, next steps would be:
All reactions