There’s basically two different types of ways to add data:
With ‘add’, then they just got pinned (by default).
And if you use ‘files write’ a mutable data structure will be added, which can be manipulated with other ‘files’ commands.
When you use ‘files cp’ to a previously added CID, you add the mutable data structure to it, and a corresponding file name in it.
Note that ‘mutable’ means, that changes can be done easily, and not that the CID won’t change, when you edit it.
If you link a CID of any kind or someone pins a CID, the data are guaranteed to never change.
So when you do an update on a file and want someone else to notice the change, you need an ipns entry. These ipns ids which can be updated to point to new CIDs.
The ipns entries are cryptographically signed by a private key, to avoid changes by peers which are not allowed to change them.
To make ipns entries human readable you can use regular DNS names, and add custom text fields - that’s called DNSLink.
Keep in mind that you currently cannot pin neither DNSLink entries nor ipns ids. So other people cannot ‘subscribe’ to changes you make.
To allow peers to subscribe to changes, you need to create an ipfs cluster, which can have follower peers which pull all changes you make on the ‘trusted nodes’ (nodes which can write to the cluster) in the cluster.
Hope this clears up a bit the current situation.
If you see any way to improve the documentation, feel free to create a pull request!