proposals/p0044.md
How should we:
Each of these is a distinct, important step. We may be able to use the same storage for multiple steps.
One thing that is not under question is that we will have accepted proposals in Markdown. This is critical, as we are essentially only delaying when a proposal goes to Markdown.
The evolution process expects that community contributors will author proposals for review by the core team. Things to consider are:
In any situation, it's necessary that proposals be clearly contributed to Carbon (even if in a draft phase, even if never accepted), and have an appropriate license attached.
Although the evolution document currently makes statements about how to manage proposals, changes in approval from this doc may affect the evolution process. Explicit wording changes aren't outlined here because they are assumed to be part of executing this proposal rather than the substance of this proposal.
For reference, a version of this proposal is also available in GitHub (broken
link:
https://github.com/carbon-language/carbon-proposals/blob/d1946fab824742b4857fa74ffc1b9fe9af37375d/proposals/p0001.md).
This proposal presents two possible flows: one Google Docs-centric, one Markdown-centric. This is an open question.
In either case, it's assumed that we will want a Carbon language shared drive for any Google Docs we may create, and a Proposal archive GitHub repository.
Decision: GitHub Markdown-centric flow
All documents will end up in Markdown. Some members of the core team have a stated preference for reviewing proposals in Google Docs, and some have a preference for Markdown. No other clear options exist. This would yield two possible flows:
For reviewing a proposal:
If the proposal needs to be checked later to figure out why a decision was made:
Advantages:
Neutral:
Disadvantages:
For reviewing a proposal:
If the proposal needs to be checked later to figure out why a decision was made:
Advantages:
Neutral:
Disadvantages:
A shared drive will be used as a nexus for any Google Docs materials. This mainly offers a central point for contributors to locate materials, as most will not be able to modify contents.
A shared drive should be assumed to be present, regardless of whether we choose a Google Docs-centric flow: if we allow/encourage the use of Google Docs for collaborative editing in a Markdown-centric flow, we should still provide storage.
Access controls:
Community members need to be able to add proposals to the shared folder. This will be available as a shortcut from the main shared drive.
In shared folders, edit access to the folder allows adding/moving/removing files, but doesn't grant control over the actual file, which is still owned by the individual creator. Unlike shared drives, proposal authors can remove edit access from individual files.
Access controls:
The archive will be used to store reviewed proposals. This will mainly make comments on proposals available for future reference.
To allow viewing comments, comment access must be granted: Google Docs comments are not visible to users with view-only access. At the same time, this means contributors will still be able to comment on archived docs: this should be discouraged.
Access controls:
In this setup, pending proposals go into the Proposals shared folder, where they'll still have their own ACLs.
Note that, in the Markdown-centric flow, this is generally not relevant: using Google Docs is optional and may often be skipped.
Access controls:
Decision: Store proposals in the repository they affect
In this approach, the review managers are presumed to be responsible for commits to the proposal archive.
Access controls:
Advantages:
Disadvantages:
In this approach, we would store proposals in the same repository as they affect. for example, a proposal about the spec would be stored in carbon-lang, while a proposal specific to the compiler would be in carbon-toolchains. If a proposal affected multiple repositories, we'd probably choose a single primary repository for the proposal.
Specific to a GitHub Markdown-centric flow, we could additionally allow the proposal's pull request to include the specific proposed changes to documentation where appropriate, allowing for the author to avoid duplicating text in the proposal itself.
We would likely still want a proposal document with a summary at a minimum, even for small proposals. The summary can link to the pull request for details, creating additional breadcrumbs for reading the full (with additional document edits) proposal.
Rejected proposals should commit only the proposal document. A link to the pull request in the proposal document should make it easier to research rejections. Alternatively, rejected proposals could have their pull request abandoned, but that would leave only the tracking issue as a breadcrumb for history.
Access controls:
Advantages:
Disadvantages:
carbon-lang/456.Decision: Push high-level comments to GitHub
We could push for high-level comments to be added on the same thread as the Discourse Forums RFC.
Advantages:
Disadvantages:
We could push for high-level comments to be added to the proposal PR, with other discussion.
Advantages:
Disadvantages:
https://github.com/carbon-language/carbon-proposals/pull/5#discussion_r423401993)
and (broken link:
https://github.com/carbon-language/carbon-proposals/pull/5/files/a51ff951561accfb4aee403d7add6e8e69009ce1#r423401993)
are equivalent, but the replied-to-comment is only visible in the file view.
Rather than trying to guide high-level discussion to a particular medium, we could offer no guidance.
Advantages:
Disadvantages:
Decision: Don't require tracking issues
In a workflow where there's always a tracking issue:
Advantages:
Disadvantages:
In a workflow where there's no need for a tracking issue (although contributors may create them for bucketing work, they are non-essential):
Advantages:
Disadvantages:
Decision: Do not commit declined/deferred proposals
Under this approach, declined/deferred proposals are never committed. Instead, the PR is abandoned and we at most save a link to it.
Note that GitHub does (at least to some extent) retain closed PRs, even those coming from a fork.
Advantages:
Disadvantages:
Under this approach, declined/deferred proposals are committed.
Advantages:
Disadvantages:
Instead of adding a shared folder for proposals, we could instead use a shared drive for everything. However, this puts us in a bad situation for taking in new proposals. We would need to choose between:
Neither of these feel like great situations - they are either overly-broad or overly-restrictive sharing, neither approximating what we actually would want, which is for anybody in the community to easily create proposals.
Different markdown implementations have subtly different rendering rules for the same input. for example, per CommonMark Spec, table syntax is not specified, although GitHub uses a table extension. However, we do plan on using GitHub consistently; this only stands to confuse users of other Markdown systems.
Choosing the Google Docs-centric flow does not eliminate this issue, since proposals will be archived in Markdown either way.
Google Docs only allows sending comments individually.
GitHub supports either sending comments individually or clustering multiple comments together, as in a review.
https://gsuite.google.com/marketplace/app/docs_to_markdown/700168918607
This plugin actually looks pretty good, and may actually work better than Google's internal-only equivalent. I'm not seeing obvious downsides.
Advantages:
Disadvantages:
https://gsuite.google.com/marketplace/app/code_blocks/100740430168
This is another code formatting tool, but doesn't seem to work as well as Google's internal-only equivalent. Google's internal-only equivalent happens to do some syntax highlighting, whereas Code blocks does none.
Advantages:
Disadvantages:
foo highlighting, unlike Google's internal-only equivalent.https://gsuite.google.com/marketplace/app/advanced_find_replace/11210842879
Advanced Find & Replace offers more advanced functionality than the built-in features, particularly around URL and regexp support.
Advantages:
Disadvantages:
There are multiple markdown editing tools.
StackEdit may look good on the surface, but we may effectively be restricted to using it as a WYSIWYG markdown editor, not for collaboration. For that, it's simply one option amongst many, and not necessarily the best.
Advantages:
Disadvantages:
GitHub's syntax highlighter allows adding third-party extensions, but requires them to have significant use.
Note we can't take advantage of this until Carbon is public. We may be able to find a language with sufficiently similar syntax to override the language and get reasonable highlighting.
During the decision process, several of the individual rationales were influenced by the idea that one could view the proposal process in one of two ways:
A PR-centric model. The review team is trying to achieve consensus around a PR as a whole. The PR may (and often will) implement the proposed changes. The proposal as essentially a description of the changes.
A proposal-centric model. The review team is trying to achieve consensus around a proposal. The PR may show a preview of the implementation, but it is purely informative.
If one favors a PR-centric model, this steers one away from committing proposals that are not accepted, towards committing proposals to the affected repository, etc. In general, the PR-centric model was favored.
The GitHub markdown-centric flow makes the on-ramp as smooth as possible for external contributors.
The final documents must be in markdown form, so it is best if contributors have the option to stay in markdown for the whole process. This is significantly less complex than something that converts between formats:
The technical flow seems on balance better than the Google Docs-based workflow. The proposal does a really good job explaining advantages and disadvantages. In summary, the Google Docs-centric workflow has a lot of disadvantages that make it difficult to work with proposals over the long term.
There were several members who had no strong preference on this issue. The consensus was that until there is a compelling reason to require tracking issues, the process is more light-weight without them.
While opinions were not as strong, reasons given for preferring comments in GitHub:
Decision: Use GitHub Markdown-centric flow.
Decision: Store proposals in the repository they affect.
Decision: Push high-level comments to GitHub, rather than focusing these discussions in Discourse.
Decision: Don't require tracking issues.
Decision: Do not commit declined/deferred proposals.