Really confusing composer error output relating to working composer.json/.lock files Warning: this may come across a little ranty! Up until version 8.3.0, I thought I had solved all my drupal + composer related issues.
With the following in composer.json:

"require": {
    "drupal/core": "~8.3"
}


I ran composer update. I got v8.3.0-rc2. After some playing around, I changed the above to:

"require": {
    "drupal/core": "&gt;8.0"
},


which updates to the latest stable 8.x release. What is going on! Why would the first example not work?

Additionally, downloading Drupal in .zip form, the line reads:

"replace": {
    "drupal/core": "~8.3"
},


Why, when nearly every guide recommends putting this line in the 'require' array if you intend on updating via composer?

Furthermore, the widely recommended Drupal Composer Project has the following - perhaps crucial - line:

"repositories": [
    {
        "type": "composer",
        "url": "https://packages.drupal.org/8"
    }
]


I realised early on that without this line, many of my update attempts would fail in some way. Why would this line not be absorbed into the main Drupal distribution?

So many questions, and yet most Drupal + Composer pages across the internet forward us to the general composer website. It seems clear that Drupal is not fully compatible the 'general' composer methodology
Someone else recently reported not being able to update from RC2:

Updating core with Composer doesn&#39;t work

There are two different things, drupal/drupal and drupal/core. You can't mix the two, that's why when you download drupal from drupal.org by hand, you have drupal/drupal and it contains the replace line, as it says that it replaces that.

As suggested there, I'd recommend to use the drupal-project template, I've upgraded many drupal installations to 8.3 with that without a problem.

Note that that has quite a different file structure, specifically it has a web folder that contains the public files.