redo vanadium installation documentation

MultiPart: 1/3
Change-Id: I6b111cc4b5e8f9f7fe1636f41d12f69332fb5be0
diff --git a/contributing/README.md b/contributing/README.md
index 4cb1361..1af0e5b 100644
--- a/contributing/README.md
+++ b/contributing/README.md
@@ -5,213 +5,56 @@
 We use GitHub for tracking Vanadium issues:
 https://github.com/vanadium/issues/issues
 
-## Developer setup
+## Contributor setup
 
-### Contributor license agreement
+### Vanadium installation
+
+Follow the [installation instructions] to set up a `JIRI_ROOT` directory and
+fetch all Vanadium repositories.
+
+The instructions below assume you've set the `JIRI_ROOT` environment variable
+and have added `$JIRI_ROOT/devtools/bin` to your `PATH`:
+
+    # Edit to taste.
+    export JIRI_ROOT=${HOME}/vanadium
+    export PATH=$PATH:$JIRI_ROOT/devtools/bin
+
+Recommended: Add the lines above to your `~/.bashrc` or similar.
+
+### Contributor license agreement (CLA)
 
 Before patches can be accepted, contributors must sign the Google Individual
-[Contributor License Agreement][cla] (CLA), which can be done online. The CLA
-is necessary since contributors own the copyright to their code, even after it
+[Contributor License Agreement (CLA)][cla], which can be done online. The CLA is
+necessary since contributors own the copyright to their code, even after it
 becomes part of the codebase, so permission is required to use and distribute
-that code. Contributors don't have to sign the CLA until after a patch has
-been submitted for review and a member has approved it, but the CLA must be
-signed before the patch is committed into the codebase.
+that code. Contributors don't have to sign the CLA until after a patch has been
+submitted for review and a member has approved it, but the CLA must be signed
+before the patch is committed into the codebase.
 
-Before starting work on a large contribution, we recommend that you get in
-touch through the [issue tracker] with your idea so that other contributors
-and authors can help out and possibly guide you.
-
-Contributions made by corporations are covered by a different agreement than
-the one above, the [Software Grant and Corporate Contributor License Agreement][corp-cla].
+Contributions made by corporations are covered by a different agreement than the
+one above, the [Software Grant and Corporate Contributor License
+Agreement][corp-cla].
 
 ### Credentials
 
-As a new developer you need to gain access to vanadium.googlesource.com
-and request a password for accessing it as follows:
+To send code reviews and commit changes, you must create an account on
+vanadium.googlesource.com:
 
-1. Go to https://vanadium.googlesource.com, log in with your identity, click
-on "Generate Password", and follow the instructions to store the
-credentials for accessing vanadium.googlesource.com locally.
+1. Go to https://vanadium.googlesource.com, log in with your identity, click on
+   "Generate Password", and follow the instructions to store the credentials for
+   accessing vanadium.googlesource.com locally.
+2. Go to https://vanadium-review.googlesource.com and log in with your identity.
+   This will create an account for you in the code review system.
 
-2. Go to https://vanadium-review.googlesource.com and log in with your
-identity. This will create an account for you in the code review system.
+### Proposing a change
 
-## Machine setup
+Before starting work on a large change, we recommend that you [file an
+issue][issue tracker] with your idea so that other contributors and authors can
+provide feedback and guidance. (For small changes, this is not necessary.)
 
-Make sure your machine has the credentials as described above.
+### Making a change
 
-### Prerequisites
-
-If you are developing on Darwin (OS X), you need to have the Xcode Command Line
-Tools package installed. You can install this package from a terminal with:
-
-    # Mac-only prerequisite install
-    xcode-select --install
-
-On Darwin (OS X), you'll also need the [Homebrew package manager][brew]
-installed. You can install it with:
-
-    # Mac-only prerequisite install
-    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
-
-The instructions on this page assume that the following software is installed and in your `PATH`:
-
-* curl
-* [git]
-* [Go version 1.5 or newer][go-install]
-
-### Repositories
-
-To contribute to Vanadium, you will want to setup up a directory which
-contains the entire collection of repositories (projects) which make up the
-Vanadium universe of language libraries, command line tools, services,
-website, example projects, and development tools like [jiri].
-
-#### JIRI_ROOT environment variable
-
-Set the `JIRI_ROOT` environment variable. Use an absolute path that points to a local file system location (remote file system such as NFS are discouraged for performance reasons and to avoid ENOKEY 'git' errors). **Use a directory that does NOT exist**; the following steps will create it.
-
-```bash
-# Edit to taste
-export JIRI_ROOT=${HOME}/vanadium
-```
-
-Be sure to add the `$JIRI_ROOT` environment variable to your profile.
-
-#### Setup script
-
-Run the initial setup script (this might take several minutes):
-
-```bash
-curl https://v.io/bootstrap | bash
-```
-
-#### Update your PATH
-
-Add `$JIRI_ROOT/devtools/bin` to your `PATH`.
-
-```bash
-export PATH=$PATH:$JIRI_ROOT/devtools/bin
-```
-
-Be sure to add the modified `$PATH` to your profile.
-
-#### REQUIRED: profile installation
-
-Extra development profiles such as ARM cross-compilation, support for mobile, or web development can be installer using the `jiri` command. To see a list of available profiles run:
-
-```bash
-jiri profile list
-```
-
-Profiles can be installed with `jiri profile install <profile>` where `<profile>` is replaced with one of the items from the list.
-
-Invocations of the `jiri profile install` command are idempotent.
-
-##### syncbase profile
-
-In order to successfully install/build the Vanadium Go code you will need to install syncbase dependencies with:
-
-```bash
-jiri profile install syncbase
-```
-
-**The syncbase profile is required.**
-
-##### Node.js profile
-
-**OS X only:** If you are on Darwin (OS X) be sure to have a full Xcode install via the App Store (not just the command line tools).
-
-In order to install the nodejs profile run:
-
-```bash
-jiri profile install nodejs
-```
-
-## Development
-
-### Building and testing
-
-#### Go
-
-To compile vanadium go codebase, use the following commands:
-
-```bash
-# For the host OS and architecture
-jiri go <command> <packages>
-
-# For cross-compilation using default toolchain
-GOARCH=<arch> GOOS=<os> jiri go <command> <packages>
-
-# For cross-compilation using development profiles
-V23_PROFILE=<profile> jiri go <command> <packages>
-```
-
-These commands setup the `GOPATH` and other environment variables so the
-Vanadium libraries and binaries are built for the desired architecture.
-
-##### Examples
-
-Check that the Go code builds
-
-```bash
-jiri go build v.io/...
-```
-
-Run all Go tests
-
-```bash
-jiri go test v.io/...
-```
-
-Install all the Go binaries
-
-```bash
-jiri go install v.io/...
-```
-
-#### JavaScript
-
-Ensure that you have the required profile set up by running:
-
-    jiri profile install nacl nodejs
-
-This will install dependencies needed to build and run the Vanadium JavaScript
-projects and the [Vanadium Chrome extension]. Darwin (OS X) users should be sure
-to have a full install of Xcode.
-
-##### Dependencies
-
-To build and test Vanadium JavaScript library, please ensure Vanadium Go
-binaries are installed first (they are required for integration
-testing).
-
-Build the Go Vanadium binaries.
-
-```bash
-jiri go install v.io/...
-```
-
-All other dependencies can be satisfied via the default `make` target.
-
-```bash
-cd $JIRI_ROOT/release/javascript/core
-make
-```
-
-##### Testing
-
-Build and test the JavaScript API.
-
-    make test
-
-Remove all JavaScript build artifacts
-
-    make clean
-
-### Git workflow
-
-All of the individual Vanadium projects use `git` for version control. The
+All of the individual Vanadium projects use [Git] for version control. The
 "master" branch of each local repository is reserved for tracking the remote
 https://vanadium.googlesource.com counterpart. All Vanadium development should
 take place on a non-master (feature) branch. Once your code has been reviewed
@@ -220,27 +63,27 @@
 
 **The only way to contribute to master is via the Gerrit code review process.**
 
-To submit a change for review you will need to squash your feature branch into
-a single commit and send the patch to Gerrit for review. The command `jiri cl`
-simplifies this process and is described in greater detail below.
+To submit a change for review you will need to squash your feature branch into a
+single commit and send the patch to [Gerrit] for code review. The [jiri] tool,
+in particular the `jiri cl` command, simplifies this process.
 
 #### Creating a change
 
-1. Sync the master branch to the latest version of the project:
+1. Sync the master branch to the latest version of the project.
 
         jiri update
 
-2. Create a new branch for your change
+2. Create a new branch for your change.
 
-        # replacing `<branch>` with your branch name
+        # Replace `<branch>` with your branch name.
         jiri cl new <branch>
 
 3. Make modifications to the project source code.
-4. Stage any changed files for a commit:
+4. Stage any changed files for a commit.
 
         git add <file1> <file2> ... <fileN>
 
-5. Commit your modifications:
+5. Commit your modifications.
 
         git commit
 
@@ -248,21 +91,22 @@
 
 #### Syncing a change to the latest version of the project
 
-1. Update all of the local master branches using the `jiri` command:
+1. Update all of the local master branches using the `jiri` command.
 
         jiri update
 
 2. If you are not already on it, switch to the feature branch that corresponds
-to the change you are trying to bring up to date with the upstream:
+   to the change you are trying to bring up to date with the upstream.
 
         git checkout <branch>
         git merge master
 
 3. If there are no conflicts, you are done.
 4. If there are conflicts:
-   * Manually resolve the conflicted files.
-   * Stage the resolved files for a commit with `git add <pathspec>...`
-   * Commit the resolved files with `git commit`
+
+   * Manually resolve the conflicting files.
+   * Stage the resolved files for a commit with `git add <pathspec>...`.
+   * Commit the resolved files with `git commit`.
 
 #### Requesting a review
 
@@ -276,15 +120,18 @@
         # Alternatively reviewers can be added via the Gerrit UI
         jiri cl mail -r=<reviewers>
 
-If you are unsure who to add as a reviewer you can leave off the `-r` flag. Our team periodically scans for CLs and a reviewer will come along. If you would rather not wait, feel free to let us know about your change by filing an issue on GitHub.
+If you are not sure who to add as a reviewer, you can leave off the `-r` flag.
+Our team periodically scans for unassigned CLs and a reviewer will be added to
+your CL. If you would rather not wait, feel free to let us know about your
+change by filing an issue on GitHub.
 
 #### Reviewing a change
 
-1. Follow the link you received in an email notifying you about a
-   review request.
+1. Follow the link you received in an email notifying you about a review
+   request.
 2. Add comments as you see fit.
-3. When you are finished, click on the "Reply" button to submit your
-   comments, selecting the appropriate score.
+3. When you are finished, click on the "Reply" button to submit your comments,
+   selecting the appropriate score.
 
 #### Addressing review comments
 
@@ -294,10 +141,10 @@
 
 2. Modify and commit code as as described [above](#creating-a-change).
 3. Be sure to address each review comment on Gerrit.
-4. Once you have addressed all review comments be sure to reply at the
-   top of the Gerrit UI for the specific patch.
-5. Once you have addressed all review comments, you can update the change with
-   a new patch using:
+4. Once you have addressed all review comments be sure to reply at the top of
+   the Gerrit UI for the specific patch.
+5. Once you have addressed all review comments, you can update the change with a
+   new patch using:
 
         jiri cl mail
 
@@ -308,7 +155,7 @@
    it. You will need to follow the steps in the section above: ["Syncing a
    change to the latest version of the
    project"](#syncing-a-change-to-the-latest-version-of-the-project) and then
-   run `jiri cl mail` again
+   run `jiri cl mail` again.
 2. The reviewer will submit your change and it will be merged into the master
    branch.
 3. Optional: Delete the feature branch once it has been submitted:
@@ -318,7 +165,7 @@
 
 #### Useful shortcuts
 
-There are several useful shorcuts you can use for quick access to changes and
+There are several useful shortcuts you can use for quick access to changes and
 issues.
 
 *  [v.io/issues](https://v.io/issues): Takes you to the issues list.
@@ -327,12 +174,10 @@
 *  [v.io/review](https://v.io/review): Takes you to your review dashboard.
 *  v.io/c/[num]: Takes you to the review for a specific change.
 
-[git]: http://git-scm.com/
-[go-install]: http://golang.org/doc/install
-[brew]: http://brew.sh/
-[gerrit]: https://vanadium-review.googlesource.com
-[Vanadium Chrome extension]: ../tools/vanadium-chrome-extension.md
-[jiri]: ../tools/jiri.md
+[installation instructions]: ../installation.md
 [cla]: https://cla.developers.google.com/about/google-individual?csw=1
 [corp-cla]: https://cla.developers.google.com/about/google-corporate?csw=1
 [issue tracker]: https://github.com/vanadium/issues/issues
+[git]: http://git-scm.com/
+[gerrit]: https://vanadium-review.googlesource.com
+[jiri]: ../tools/jiri.md
diff --git a/installation.md b/installation.md
new file mode 100644
index 0000000..57edb46
--- /dev/null
+++ b/installation.md
@@ -0,0 +1,144 @@
+# Vanadium Installation
+
+This document explains how to install Vanadium (including Syncbase).
+
+## Prerequisites
+
+The instructions below assume that the following software packages are installed
+and available in your `PATH`.
+
+- curl
+- [Go 1.5][go-install]
+- [Git] 2.4 or above
+- Full and up-to-date [Xcode], if on OS X
+
+On OS X, you'll also need the [Homebrew package manager][brew] installed. You
+can install it with:
+
+    # Mac-only prerequisite install
+    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+
+## JIRI_ROOT environment variable
+
+Set the `JIRI_ROOT` environment variable. Use an absolute path to a non-existent
+directory on the local filesystem. (Remote filesystems such as NFS are
+discouraged for performance reasons and to avoid git ENOKEY git errors.) The
+setup script (see below) will create this directory, and will `git clone`
+various Vanadium repositories into it.
+
+    # Edit to taste.
+    export JIRI_ROOT=${HOME}/vanadium
+
+Recommended: Add the line above to your `~/.bashrc` or similar.
+
+## Fetch Vanadium repositories
+
+Run the setup script. This script will (1) install the `jiri` tool in your
+`JIRI_ROOT` directory, (2) `git clone` a Vanadium-specific manifest repository
+that configures `jiri` for the Vanadium project, and (3) use the `jiri` tool to
+fetch all of the Vanadium repositories. Notably, this script will not write to
+any files outside of the `JIRI_ROOT` directory.
+
+    # This can take several minutes.
+    curl https://v.io/bootstrap | bash
+
+Add `$JIRI_ROOT/devtools/bin` to your `PATH`:
+
+    export PATH=$PATH:$JIRI_ROOT/devtools/bin
+
+Recommended: Add the line above to your `~/.bashrc` or similar.
+
+## Additional prerequisites
+
+Syncbase and various demo apps have some additional prerequisites, including
+Snappy, LevelDB, and Node.js.
+
+We recommend using the `jiri profile` command to install all such prerequisites.
+This command uses `apt-get` on Linux and `brew` on OS X. Note, the `jiri` tool
+and its various plugins are located in `$JIRI_ROOT/devtools/bin`.
+
+    jiri profile install nodejs syncbase
+
+The `jiri profile install` command only writes to files under `JIRI_ROOT`, i.e.
+it will not write to system folders such as those under `/usr`.
+
+## Verifying installation
+
+Compile all Go code:
+
+    jiri go build v.io/...
+
+Run all Go tests:
+
+    jiri go test v.io/...
+
+<!-- TODO: On OS X, this opens a bunch of warning popups about accepting
+incoming connections. We should make all test servers listen on the loopback
+address. -->
+
+Install all Go binaries:
+
+    jiri go install v.io/...
+
+Note, the `jiri go` command simply augments the `GOPATH` environment variable
+with the various paths to Vanadium Go code under the `JIRI_ROOT` directory, and
+then runs the standard `go` tool.
+
+You should now have the following binaries available, among others:
+
+- `$JIRI_ROOT/release/go/bin/mounttabled`
+- `$JIRI_ROOT/release/go/bin/syncbased`
+- `$JIRI_ROOT/release/go/bin/vrpc`
+
+## Syncing the Vanadium repositories
+
+To sync to the latest version of the Vanadium source code:
+
+    jiri update
+
+## Extras
+
+### Running the Syncbase Todos demo app
+
+The [Todos demo app] is a web application that runs in Chrome. Before you can
+run it, you must install the [Vanadium Chrome extension].
+
+To run the app, follow the demo setup instructions here:
+https://github.com/vanadium/todos/blob/master/demo.md
+
+### JavaScript development
+
+JavaScript development requires the `nacl` and `nodejs` profiles. As an
+additional prerequisite, OS X users must have a full and up-to-date installation
+of Xcode.
+
+    jiri profile install nacl nodejs
+
+Build and test the JavaScript code:
+
+    cd $JIRI_ROOT/release/javascript/core
+    make test
+
+Remove all JavaScript build artifacts:
+
+    make clean
+
+### Cross-compilation
+
+The jiri tool supports cross-compilation.
+
+    # For cross-compilation using the default toolchain.
+    GOARCH=<arch> GOOS=<os> jiri go <command> <packages>
+
+    # For cross-compilation using development profiles.
+    V23_PROFILE=<profile> jiri go <command> <packages>
+
+These commands configure the `GOPATH` and other environment variables so the
+Vanadium libraries and binaries are built for the desired architecture.
+
+[git]: http://git-scm.com/
+[go-install]: http://golang.org/doc/install
+[brew]: http://brew.sh/
+[xcode]: https://developer.apple.com/xcode/download/
+[todos demo app]: https://github.com/vanadium/todos
+[Vanadium Chrome extension]: ../tools/vanadium-chrome-extension.md
diff --git a/tools/jiri.md b/tools/jiri.md
index 113d8e8..d451cda 100644
--- a/tools/jiri.md
+++ b/tools/jiri.md
@@ -1,9 +1,13 @@
 # jiri
 
-`jiri` is a multi-purpose command-line tool designed to aid Vanadium
-development. After following the setup instructions for [contributing] you
-will have the `jiri` tool in your `PATH` and can run:
+`jiri` is a multi-purpose command-line tool originally designed to aid Vanadium
+development. The `jiri` tool has since been extracted from Vanadium and is now
+used by various multi-repository projects.
 
-    jiri help
+`jiri` is open source and is available here: https://github.com/vanadium/go.jiri
 
-[contributing]: ../contributing/README.md
+The "fetch repositories" step of [Vanadium installation](../installation.md)
+installs the `jiri` tool in `$JIRI_ROOT/devtools/bin`.
+
+Run `jiri help` to learn more about the tool. (Note, this command assumes your
+`PATH` contains `$JIRI_ROOT/devtools/bin`.)
diff --git a/tutorials/syncbase-user-guide.md b/tutorials/syncbase-user-guide.md
index 264e5d5..c73c9c9 100644
--- a/tutorials/syncbase-user-guide.md
+++ b/tutorials/syncbase-user-guide.md
@@ -34,57 +34,54 @@
 
 ## Installation
 
-*TODO: Update these instructions along with the overall Vanadium installation
-instructions, now that Syncbase's dependencies are part of the "base" profile.*
-
 Syncbase is a Go program that depends on Vanadium and several other libraries.
 The following steps cover all of the prerequisites, and should work on both
 Linux and OS X.
 
-1. Follow the contributor instructions to install prerequisites and fetch the
+1. Follow the [installation instructions] to install prerequisites and fetch the
    Vanadium repositories, which include Syncbase as well as the Todos demo app.
-2. Install the Syncbase profile, which includes Syncbase-specific
-   prerequisites such as LevelDB
+   Be sure to install the `syncbase` profile.
 
-        jiri profile install syncbase
+   The instructions below assume you've set the `JIRI_ROOT` environment variable
+   and have added `$JIRI_ROOT/devtools/bin` to your `PATH`:
 
-3. Run the Syncbase tests
+        # Edit to taste.
+        export JIRI_ROOT=${HOME}/vanadium
+        export PATH=$PATH:$JIRI_ROOT/devtools/bin
+
+   Recommended: Add the lines above to your `~/.bashrc` or similar.
+
+2. Run the Syncbase tests.
 
         jiri go test v.io/v23/syncbase/...
 
-4. Build the Syncbase server binary and other Vanadium tools
+3. Build the Syncbase server binary and other Vanadium tools.
 
-        jiri go install v.io/x/ref/...
+        jiri go install v.io/...
 
-<!-- TODO: On OS X, step (3) opens a bunch of warning popups about accepting
-incoming connections. We should make our test servers listen on the loopback
+<!-- TODO: On OS X, step (2) opens a bunch of warning popups about accepting
+incoming connections. We should make all test servers listen on the loopback
 address. -->
 
+Note, the `jiri go` command simply augments the `GOPATH` environment variable
+with the various paths to Vanadium Go code under the `JIRI_ROOT` directory, and
+then runs the standard `go` tool.
+
 You should now have the following binaries available, among others:
 
-    $JIRI_ROOT/release/go/bin/mounttabled
-    $JIRI_ROOT/release/go/bin/syncbased
-    $JIRI_ROOT/release/go/bin/vrpc
+- `$JIRI_ROOT/release/go/bin/mounttabled`
+- `$JIRI_ROOT/release/go/bin/syncbased`
+- `$JIRI_ROOT/release/go/bin/vrpc`
 
-### Cloud Instance
-
-*TODO: Add instructions once the tooling is ready.*
+<!-- TODO: Add instructions about how to run a cloud instance of Syncbase. -->
 
 ### Running the Todos Demo App
 
-To run the Todos demo app shown in the video, follow these additional
-instructions:
+The [Todos demo app] is a web application that runs in Chrome. Before you can
+run it, you must install the [Vanadium Chrome extension].
 
-1. Install the [Vanadium Chrome extension]
-2. If running on OS X, install full Xcode from the App Store (needed by the next
-   step)
-3. Install the Node.js profile
-
-        jiri profile install nodejs
-
-4. Follow the demo setup instructions in the following file:
-
-        $JIRI_ROOT/release/projects/todos/demo.md
+To run the app, follow the demo setup instructions here:
+https://github.com/vanadium/todos/blob/master/demo.md
 
 To get a fresh copy of the Vanadium source code and rebuild everything for the
 demo, run these commands from the todos root dir:
@@ -212,11 +209,11 @@
 ###  Access Control
 
 Syncbase provides fine grained access control, using the [Vanadium security
-model](security.md) for identification and authentication. Developers provide a
-key prefix to control which rows are covered by a given access control list
-(ACL). If there are multiple ACL prefixes for a row, the one with the longest
-prefix wins. This behavior makes it easy to set an ACL on related data and have
-new data automatically inherit the right ACL if possible.
+model] for identification and authentication. Developers provide a key prefix to
+control which rows are covered by a given access control list (ACL). If there
+are multiple ACL prefixes for a row, the one with the longest prefix wins. This
+behavior makes it easy to set an ACL on related data and have new data
+automatically inherit the right ACL if possible.
 
 In our example above, the list is fully collaborative, so the developer would
 set a simple ACL like:
@@ -248,7 +245,7 @@
 
 ## Queries
 
-The Syncbase query language, syncQL, is very similar to SQL. SyncQL uses the
+The Syncbase query language, [syncQL], is very similar to SQL. SyncQL uses the
 general structure of SQL's SELECT statement. It efficiently evaluates predicates
 (the WHERE clause) inside the Syncbase process. It does not currently support
 JOINs or indexes.
@@ -341,8 +338,8 @@
 with table "mytable" and key prefix "foo".
 
 <!-- TODO: This syncgroup setup code is somewhat obtuse. Hopefully we can
-simplify the setup and improve the documentation. See the action items doc for
-some ideas. -->
+simplify the setup and improve the documentation. Various issues have been filed
+to track this. -->
 
     // Assumes we've already created the hierarchy myapp/mydb/mytable.
     s := syncbase.NewService("/localhost:4002")
@@ -367,14 +364,14 @@
 or join an existing syncgroup. For example, this can happen when an app uses a
 syncgroup to sync a user's data across their devices; in this case, the app
 won't know in advance whether it has already been installed on some other device
-belonging to the user. This implies that the syncgroup name known in advance by
-all instances of the app. In this case, the recommended approach is to try to
-join that syncgroup. If the join fails with an error indicating that the
-syncgroup does not exist (ErrNoExist), as opposed to permission denials or
-network communication errors, then create the syncgroup. This could still lead
-to multiple concurrent creations of the syncgroup. In the future there could be
-a mechanism for apps to merge such disconnected syncgroups when there is no
-ambiguity as to whether they really ought to be the same syncgroup.
+belonging to the user. This implies that the syncgroup name must be known in
+advance by all instances of the app. In this case, the recommended approach is
+to try to join that syncgroup. If the join fails with an error indicating that
+the syncgroup does not exist (ErrNoExist), as opposed to a permission denial or
+a network communication error, then create the syncgroup. This could still lead
+to multiple concurrent creations of the syncgroup. In the future we plan to
+provide a mechanism for apps to merge such disconnected syncgroups when there is
+no ambiguity as to whether they really ought to be the same syncgroup.
 
 ### Conflict Resolution
 
@@ -397,7 +394,10 @@
 *TODO: Grow this section as questions arise.*
 
 [Syncbase Overview]: ../concepts/syncbase-overview.md
+[installation instructions]: ../installation.md
+[syncQL]: syncql-tutorial.md
 [VOM]: ../concepts/rpc.md#vom
 [VDL]: ../concepts/rpc.md#vdl
-[Vanadium security model]: security.md
+[Vanadium security model]: ../concepts/security.md
+[todos demo app]: https://github.com/vanadium/todos
 [Vanadium Chrome extension]: ../tools/vanadium-chrome-extension.md