There is an open issue which discusses this here
Elements in a pipeline have Sources, and each source that is required to build gets mirrored into a local cache. Elements address sources in two ways (simultaneously), we allow a track parameter as a weak reference to the latest of something, which is a feature in most if not all VCSs (a branch or a tag), in addition to that we use a ref parameter to indicate a strong reference, most VCSs use a checksum of sorts to indicate an exact changeset or HEAD (for tarballs we simply use an sha256 sum).
This means, that it is obnoxiously difficult to perform tight developer loops on a checked out source tree with BuildStream.
The user experience for this needs to be thought out, but essentially the following needs to happen:
User should be able to hardwire source code directories on their local filesystem to override a given Source on a given Element in their project.
BuildStream needs to keep track of what open workspaces exist, and be able to recover or fail gracefully if the user has deleted their overriding source directory without telling BuildStream about it.
BuildStream should not ever share artifacts produced from an overridden source.
In the default case, when strong cache keys are in use, then BuildStream should not ever upload and share any artifacts which were built while depending on an Element with an overridden source.