 Dyma'n gilydd i gynllunio y dechrau, ac am y dweud dechrau yn drwp 8. Felly, mae'r bwysig yn ceisio'n dechrau yn drwp 7. Mae'n gwneud yn cael cyfnol â drwp 8, ac mae'n gofyn yw dweud hynny yn y cyfrifio a'r dweud y gwaith. Ac mae yw bod ni'n ceisio'n dechrau yn drwp 8. Mae'n ceisio'n dechrau. Felly, mae'r dweud yn gwybod, mae'n tim o'r milwed. Mae'n gwybod i'r drwp 4 ben o'r cyfrifio, ac mae'n gwybod i gyd yn cyfnodol. Abdul that I'm working on this kind of stuff pretty much full time for one of our clients. So deploy is now a suite of modules and we've built up this diagram to show deploy at the top born with the arrow and all the different dependencies underneath that can be used or don't have to be used and how they all sort of fit together. So first of all I'm going to run through every module that you could possibly need Ieitha'r cyd-iweithwyr. Rydyn ni'n ddweud yw y gallu gweithio. A o enw i'r cyflwyllfa cyd-iweithwyr, oedd y cyd-iweithwyr yw'r cyd-iweithwyr, rydyn ni'n gweithio ffordd y modul yn ei wasbyg ychydig i'r hynny, a ddweud y gweithio'r ddweud, ddweud y gweithio'r ui, a yna'n ddweud ymliegeddau i'r cyd-iweithwyr. Efallai efallai efallai eich cyd-iweithwyr. A wnaeth ydyw'r multifersion. Multiversion yw'r modul llwythu arall sy'n ei wneud eu bod yn gwybod ychydig. Y ddigonol yw multiversion yn ddigonol sy'n ddigonol arall. Y ddigonol yn ddigonol armaen, oed yn ddigonol ar y FFFF, ddigonol ar amlwg, yn y newid o'r multiversion. Mae'r ddigonol yn ddigonol arall. a i'n gallu rhywunon cymryddol Cymru, i ddwy'r byddau gwneud. Rwy'r ddod yn cynnig, roedd, cymryd o'ch cyfynliadau, mae niech sponsored yn gallu amser yma, mae gennych gyda cyfrddur yn rhan o'r cyfrddur. Mae gennych ryw y tro, mae'r ddod yn ymddangos cyfrddur o'ch cyfrddur ar yr adrod, mae gennych cyfruddurdr yn cyfriddurdr yn oed. Felly, maedda'r sgwr i'r defnyddio allan, a byddwn i'r modd a'r ffordd i'r modd i'r modd, cael yn y peth arall i ddech ynny, a wnaeth rydw i ddechope'r moddd o gyda'r modd. Rydyn ni heb dda fydda i'r modd yn bidragell yn y Ffyrdiol, achos eich gwneud o'r ffordd o gwaith ddiogelol yn gyfodus ddiogelol o gwaith ei wneud o gyfan hyffordd i'r modd hyffordd o gwaith o gwaith i'r modd i'r modd i'r modd. yn ymweliad a'r cyfweld a'n dweud o'r adreibau ymddangos yn newidio bydd yn fath o'i lŵng CFWAC. Rydw i'r adreibiau ymddangos o'r adreibiau, ac mae'r adreibiau yn dweud i'w ddweud yma ym dden nhw ni'n dyfodol, neu'r adreibiau'n ddweud a'r adreibiau'n dweud a'r adreibiau oherwydd mae'n ddweud ei hyd yn gwneud y gwhar o'r ddym ni wedi'i cyfnodol a'r adreibiau'n hwnnw. ac ydych chi'n meddwl i'r gynllun o'r ddweud yma. Mae arfermau arfermau yn ymwneud yn cael ei wneud, yn y gallwn y dyma arfermau ac mae'n rhai rhai i gweithio'r ddweud. Mae'r ddweud o'r ddweud o'r ddweud yn cael ddweud o'r ddweud o'r ddweud, ac ydych chi'n dweud o'i ddweud o'r ddweud yma, ac mae'n ddweud arfermau arfermau. So, have two people edit a entity that will create two revisions of the same parent, and therefore are conflicting revision. Then we can work out what to do with that later on. Then from that we can create a child from two parents... so if we do emerge some sort to resolve the conflict, we can create a child revision. a hwnna fydd hwnnaad heddiw gyda dyfodol arall, dewyllian nhw'n ddiwedd gyda'r marwysig ar hyn. Rhaid i'w replicaeth. Rhaid i'w replicaeth ydyn nhw'n defnyddio. Rhaid i'w replicaeth tre'i pryd yn lyf yn ynddo. Rhaid i'w replicaf yma, ac mae'r brifoedd sydd cyf informative ar ddod yn fwy neud. Rhoedd yma e'r bod yna'r pethau yn replicaeth, mae'r bod yn bwyllion hwnna ar ychydig, Rydym yn fagorol i gydig cymryd iawn ar y gwahanol yn syniadio ar ffordd, ac rydym yn ddigonol i'r ddweud yn cyfrannu, ac olydych yn yr ymddill syniadio, nad yw'r adeg yn ddigonol wedi ddegonol yn y gwahanol, ac nid angen y gallwch bod oedd y yr adeg yn y cyfrannu. Fyddych'n ni'n rhaid i frannu welwyr, ydi'r adeg yn ei wneud o'r adeg yn y gwahanol, nid o'r adeg yn ddigonol, ond y UUID yn ystod ystod. Rwy'r gwaith o ddwybl cyflwyno'r platformau yna'r bwysig wedi'u gweithio'r ardi'r hyn. Rwy'n clywed i'w ddweud y gweithio, ac mae'r gwybod i gyd yn bwysig ar y drabl ddwybl i ddwybl y llwyf yn y ddwybl. Rwy'n cael cwysig i'r ddwybl, ac i'r ddwybl, sy'n cael G-script arlaedd. Mae'r ffordd yn ddod o ffactorau ar y rai gweithio'r bach yn gwneud yn rhaid i'r rhaid i'r cyd-dyniad. Mae hyn yn ffordd yma'r ddod o'r hyffordd ac yn ddod o'r ymddiadau hefyd. Rhef, mae'n ddod o rhai rhaid i'r ddod o'r cyd-dyniad. felly, rydyn ni wedi cael ei glyfryn ychydig pawb, felly rydyn ni'n cael ei wneud y cifysgwyr Cyaolol, ac fe tyntau dyn nhw'n cael ei wneud y cyffredinolaeth. Cardiwch sydd o'r llwyddiol fydd yn gwneud bwrdd o wneud yn cefnodol a chael crenol fydd yn ei cyfleu ar yr entodau, ond y byddai'r llwyddiol a'r gweithgau yn gymwyfyd â'r cifysgwyr yn gallu'r gweithgwyr. ac rygwyd cyffredd, byddwn yn cerddwyd am ei gamin y gydag y troегоedd y gwiriaid. Felly, ar gyfer falch o'u cyffredd, rydyn ni'n gweld iddyn nhw rpaeddi anthef, rydyn ni'n gweld eich rwyfwyr. Rydyn ni'n gweld eich rwyfwyr ac maen nhw'n gweld i'r arigfyrdd. Yn mynd oesício pan-rwymp yn rhan, rydyn ni'n gweld i'n gweld rwymp yn dda nhw'n gweld i'r pleiddiad, a dwi'n cais ar y cyflogwadwch ym Mwneud. Dwi'n credu'r cyflogwadwch. Dyna'r yw'r panffrindwch fydd yn fawr yn cyflogwadwch. Felly, mae'r cyflogwadwch yn wneud o'r ond yn eich cyfo'r gweith. Felly, gweithio'r cyflogwadwch a'i sicr ar wladbwyno yn y cyflogwadwch. Dwi'n credu'r ceisry gych chi'n cymwneud i ddech chi boatwch'r cyflogwadwch, ydych yn cyflogwadwch i ddechrau na ti'r ceishin. Ond nid o'r modul yw'r ysgolwch yn gweithio'r newid ysgolwch, a here we've got a new product in an upcoming event workspace. You'll see behind it is the live workspace, so it takes, you can take all of the content from the live workspace, have it sitting behind in that workspace and then you can add new content on top of it. And the plus and the arrow denotes how we can push and pull content between the live workspace and your new workspace. So we can do a pull which will update from live, it will pull everything down from the live workspace into your new workspace and we can do a push, changing all of the changes from your new workspace up to the live workspace. We've also got this last minute fix workspace which is branched off of an upcoming event and this allows us to push and pull to the upcoming event workspace specifically and then it's up to the upcoming event workspace to push that up to live. So if you're familiar with Git it works in very much the same way in that you can create branches and you have an upstream branch and you push to the upstream. So workspaces are actually defined by multi version module. So when you install multi version you have workspaces there and then but we don't add any of the UI until the workspace module because you can't actually really do anything with workspaces until you add the workspace module. So from here you can create new workspaces, you can edit existing workspaces and you always define your upstream workspace. So this is the workspace that it would push and pull from and this can be any workspace on your site as shown in the diagram before. It could be the live workspace or it could be another workspace on your site. So we've added a few different ways to switch workspaces so we've got toolbar add-on, a block that you can place on your site and then also an admin page where you can choose which is your active workspace. So this is not changing the live workspace, it's changing the workspace that you are viewing and then you can update the workspace. So from the workspace module we add a toolbar add-on that gives you the option to do a pull, an update to your workspace and no matter how you're pushing changes because there's a few different modules that allow you to push your changes up the pull can always be done by this update button in the toolbar so you can bring down the latest changes. So now to workbench moderation and content moderation. So workbench moderation is a contrib module in Drupal 8 and we've worked to port this to core so in 8.2 there will be content moderation. There are very similar modules, there are some big back-end differences as well so content moderation doesn't yet work with this suite but it will hopefully in the next few weeks. I'm not sure if we'll get that working by the initial 8.2 release but it should be in 8.2.1 but for now workbench moderation works perfectly so you can get that running now. So with workbench moderation you moderate a workspace. So traditionally in Drupal 8 and Drupal 7 you would moderate your content, you moderate your nodes, you moderate your blocks but now with workspace module you moderate your workspace so you moderate everything as a whole. So you can use exactly the same permissions that workbench moderation already defines and you can allow your content team to change the moderation state on a workspace. And then as soon as you publish a workspace as soon as you set the moderation state to published it fires an event in the back that pushes all the content up to its parent workspace its upstream workspace. So whatever you defined in the workspace settings as the upstream it will push up to there as soon as it gets published. So as I mentioned before content moderation is in 8.2 and we are working to get workspace support on there so hopefully soon you'll be able to use content moderation or workbench moderation exactly the same way by moderating workspaces. So trash, I briefly mentioned earlier on that when you delete something it doesn't actually get deleted anymore so we have two different versions of trash the 1.x branch works with multiversion so multiversion allows things to be flagged as trashed and then it goes into your trash and you can restore it or you can purge it which will actually delete it. In the 2.x branch of trash this is when we're looking to move into core so we're basing it on content moderation so in content moderation there is an archived moderation state and as soon as something is archived it will go into your trash in exactly the same way you can restore it or purge it from there. So we're hoping in core 8.3 we'll be able to get trash into core and this will depend on content moderation and will allow you to trash your entities. So as I mentioned before purging is a hard delete so this uses the exact same functionality that is in Drupal 8 core now and will hard delete all of your entities. And then restoring works in different ways depending on the version of trash that you use in the 1.x branch it will just remove the delete flag and in the 2.x branch we look back at previous revisions and restore the moderation state that I had before so if it was previously published or if it was previously draft we'd go back to that moderation state. So Relaxed Web Services is a module that then can sit on all this to multi-site replication so replicating from one site to another previously with workspaces it just replicates between workspaces on a single site but Relaxed will allow you to do multi-site replication. So it's based on the same protocol as CachedDB so we looked at how CachedDB does replication. Because with CachedDB you can replicate all of the content in the database from one database on one server to another database on another server and this is all done over HTTP. So we looked at that API and we implemented it in Drupal so Drupal exposes exactly the same endpoints as CachedDB does so you can use CachedDB to replicate content between your Drupal sites and you can also replicate content from Drupal to CachedDB or you can use any other CachedDB compatible system such as PouchDB so PouchDB is a JavaScript application so you can run that and do offline applications or decoupled Drupal sites and it will replicate down to the JavaScript local storage and run a fully offline application. So, as I mentioned, offline and decoupled sites will use PouchDB and you can have a fully JavaScript front-end. So then on to deploy, this is the traditional module in Drupal 7 that sparks all this and Drupal is now really just a front-end it's a way of replicating to your upstream workspace so as I mentioned with Workbench Moderation it will replicate when you publish something with deploy it will replicate when you click the deploy button just as it always has done in previous versions of deploy you click deploy, you fill in a bit of information about your deployment and it will deploy to the upstream workspace. So let's look at a couple of example use cases on how you can use some of these modules. So this is the simple content staging we've just got multi-version, replication, workspace and Workbench Moderation and you enable Moderation on your workspace and then you can add content to your stage workspace and publish the workspace itself and the content gets replicated directly up to the live workspace. You can also add a relaxed module to this if you want to do exactly the same replication process but to another site. So adding relaxed it works in exactly the same way it just allows you to choose a different site as you're upstream. So I've got a quick demo video that will show the Workbench Moderation option. So here this is a perfectly clean site all I've done is install the modules that I just mentioned so I'm going into the workspace settings here and then we've got workspace types, so like content types and we manage the moderation of the workspace type and enable Moderation there. So we can now moderate workspaces. So now let's go and add some new content. You'll see in the toolbar at the top, on the top right we've got a stage icon this shows us that we're currently on the stage workspace so that's where we're adding the content on stage. So here we've got some test content it's just a standard article just as you get out of the box with Drupal 8 I haven't changed any settings or enabled Moderation or anything it's just a standard article. So we'll now switch to the live workspace and we've got no content, it's a blank Drupal site and back on the stage workspace we have the content. So now we go back to the workspace settings and we edit the stage workspace it's currently draft but we'll change it to published. So now we've updated the stage workspace to the published moderation state and we're still on the stage workspace and we've got that test content going over to live the test content is there as well. So it replicated the content as we moved it over. So that's the simple content staging workflow. We've got a YouTube video in there so when you look at these slides afterwards you can view the video again. So now we've got a manual content staging workflow and this is now using deploy so we've got multi-version relaxed workspace and deploy. The process is a little more straightforward because we've now just got a deploy button in the toolbar that we're going to use. And again you can use relaxed which will add the API to do the multi-site replication. So let's switch to another video and we can look at the deploy process. You'll now see in the top bar we're on the stage workspace because it's a stage but we've now got a deploy button up there. So that is what we'll use to do the deployment. So I don't need to enable moderation on the workspace we haven't even got workbench moderation installed so I can't enable moderation I'm just going to create an article on the stage workspace. So we're on stage we hit deploy we get this form up so we can describe a bit about the deployment so we've got an audit trail of the deployments that were done and successful deployment the content is now on live. So it's a bit more of a straightforward process because we've just got that deploy button to deploy it but some people find the moderation states is a bit more logical for the content editors. So here I've just made an edit on the live workspace and we'll go back to the stage workspace and it still says on stage and I can click the update button that will do a pull down and we can refresh the page and we've got the edit on live change now so this update button works exactly the same whether you're using the workbench moderation approach or whether you're using the deploy approach the update just pulls everything down from the live workspace. So now let's look at what we do if we add relaxed to all of this to do the multi site replication so I'm not going to bother going through the full demos because it's exactly the same UI to demo how the replication actually works but to configure it and set it all up you will need a replicator so this is a PHP library that we've created it's exactly the same as the couch DB replicator that you get with couch DB but we've rewritten it in PHP so you don't need couch DB to do any of the replication if you've installed the modules with Composer it will pull down these dependencies anyway but if not run the Composer command and it will pull down the replicator and any dependencies that the replicator has got so now once you've got a relaxed module installed and you've got the replicator installed as well you can go into the relaxed settings where we want you to define the default replicator credentials so you could just put in your admin account if you really want to but we advise setting up a special user who would you use for replication so this is the user that we will use to log into your site when replicating the content we have got roles and permissions and everything in place to do this so you can create a special user with a special replicator roles who's only got permissions to do replication they don't have permission to do anything more than just replicate content so once you've added your default replicator user we need to know about your remote sites your other sites within your Drupal platform so we ask you to give it a label the full URL for this site the URL will need to have the API root on the end of it so it will be sort of like Drupal.dev slash relaxed you'll see on the previous slide we had the API root the default one is relaxed but you can call it whatever you like you can sort of brand it for your client fly into your organisation you need to add the API root when you're adding the URL there and then you add the username and password for your remote site so on your remote site you'll need a replicator user as well again with the replicator role replicator permissions and you add their information in here and then when you edit your workspace you'll notice that there is now new target workspaces so previously if you edit your workspace you just have the live and the stage workspace these are workspaces that we add by default it would also list there any workspaces that you've added so in the previous diagram where I had a new product workspace an upcoming event workspace it would be listed there when you add your remote that I showed on the previous screen it automatically goes to that remote and finds out what workspaces are there it uses the same information that CatchDB provides so if your remote was a CatchDB database it pulls in what databases are on CatchDB and it would show them here so my remote site I just called Drupal and it's pulled in live and stage from my remote site so I can choose Drupal live as my remote and then when I use the same processes that I showed in the video it will just push to that upstream workspace it will just push to the Drupal live which is my remote site so as I mentioned before this is all based on CatchDB the relaxed web services module uses the same API as CatchDB uses and even the workspace module we use the same protocol as CatchDB provides but just sort of behind the scenes it doesn't do any HTTP API endpoints it just sort of in the code it runs through the exactly the same process exactly the same protocol so you could add your own ways of replicating and as long as you follow the same protocol it will replicate so that's all the slides that I've got prepared for this I'm happy to take any questions about setting this up and the processes that might down this end if you don't mind using it for the recordings well that's a fantastic work first of all thank you very much I had a few questions one was about conflict resolution if let's say some stuff is going on in one workspace and other stuff on another workspace same UUID, how can you moderate that? so currently it just picks one of the revisions so if you have two revisions with the same parent they are conflicting revisions and we track in multiversion module we track all conflicts so we do know about them we haven't yet got any sort of UI or anything to resolve those conflicts so it actually hashes the revision and picks whichever revision hash has the highest alphabetical hash so it's completely random and that's the way CouchDV does it so we just followed exactly what they do we did have a Google Summer of Code project over the summer to resolve conflicts so that's one thing we are actively working on and what this Google Summer of Code project gave us was a standard PHP library for merging arrays so as I mentioned earlier we've got a normaliser that puts all of the entities down into arrays so we can get three arrays the parent and the two child conflicting revisions and we can do a three-way merge between those so we're working on the conflict module that will allow us to do a full three-way merge between those and hopefully resolve any conflicts automatically another thing we're also working on in tandem of that is something that the Acria Lightning team are pretty keen to get in all this stuff into Acria Lightning and they want ways to flag up conflicts so if there are conflicts introduced it will give you that barrier and say you can't replicate this conflict and some simple UI to resolve whether it's pick which revision is your winning revision or manually edit the revision to a child revision that resolves that conflict so we're hoping that this conflict resolution will be very pluggable and flexible and there'll be multiple different ways to resolve a conflict so no matter what your client or use case there'll be easy ways to resolve conflicts Wow, awesome I also wanted to know about some of the differences between the workbench moderation and content moderation and is it going to be like are you still going to be developing new features on workbench and is there going to be some sort of migration path if... So personally I'm not going to be working on any new features on workbench moderation I didn't do any of the workbench moderation so I think there are team members from the workbench moderation team who are still actively looking at bugs and issues there but I have started a 2.x branch of workbench moderation where I'm looking at doing an upgrade path so if you're currently using 1.x of workbench moderation in a few months time hopefully you'll be able to install the 2.x branch and it'll magically just install content moderation move everything over and disable workbench moderation and then you can remove it from your site that's the plan anyway there currently aren't any big differences so it should be a fairly straightforward upgrade path the main difference with content moderation is you can now uninstall it because with workbench moderation you can't uninstall and that's just the way the data is stored around the moderation state so you've got a new way of storing which moderation state belongs to which entity which allows us to uninstall the module so if you're looking to use this stuff in production now I'd say probably go with workbench moderation and just wait it out for a bit until there's the upgrade path but if you've got a site that's going live in sort of six months or a year from now and you're starting development possibly look at content moderation and by the time the site goes live it should be all very stable enough thank you and I don't want to hog the mic anymore but just one last question are there APIs in place to be able to say deploy something from code so if you're installing a module have automatically pulled from a place that you've set up rather than using the UI and how easy is that? so yes there is all the APIs in place to do that the APIs are incredibly flexible and we've tried to make the UIs as sort of simple as we can so if you want to develop your own module it is incredibly flexible we've got a service which we call the Replicator Manager so you can call that Replicator Manager Service and just pass it the information that it needs so it will be the source and the target workspaces and it will just replicate between them so if you've got a custom module and you could have an install hook on that that defines a source and a target workspace and does the replication so yes, that's definitely possible and the Replicator Manager will also look at which replicators are in place so the workspace module defines a replicator that replicates between workspaces on a single site relax to defines the replicator that replicates between multi sites so it will look at which replicator applies in your use case depending on the modules you've got and it will do the replication depending on how you've got it set up Great, thank you I have two questions When you publish a staging workspace does it replace the live workspace? No, it replicates all of the content to live so as I mentioned earlier we use the Revision's Diff service that we've got to look at what's the difference between those workspaces that only replicates the revisions that have changed or the revisions that have been added so it generates a JSON string and sends that over so it doesn't switch the workspaces it just creates the revisions that it needs But it updates because you change the moderation state and then it goes to the live workspace and changes that one It doesn't change the moderation state on live it just takes all of the revisions from stage and puts them on the live workspace We've still got a bit of work to do to define what we do about moderation states For example, when you change a workspace to a published moderation state then what do we do with that workspace and how it's published? Do we delete it? Do we allow you to carry on editing on it? Do we change it back to another moderation state? Because once it's published you can't publish it again because it's already published So in effect you have to change it back to draft before you publish it again but there's nothing enforcing that so we probably need to look at some sensible UI things that enforce that kind of stuff My second question is currently can we prevent the content editors from editing the things on the live stage? Can we force them to only edit stage and then do a deploy? Yes, we've got a lot of permissions in place to edit content depending on the workspace So they are slightly complicated but you can set permissions like you can only edit content on stage and not on live You can only edit workspaces that you created You can only edit things apart from live Even if someone else created the workspace you can edit the content and edit it on live There's a whole host of permissions that are created every time you create a workspace So it's pretty granular in that Thank you Any more questions though? Thanks for that, that's brilliant One big question I guess is when using relaxed and replicating to a multi-site separate instance can you be selective about what content is replicated to the remote site? Yes and no There's no UI for it at the moment but the APIs are in place So when you do a replication we've got something we call a replication task in the back end and you can provide that with a lot of information and one of the things you can provide is a filter I believe filters are currently plugins so you can even create your own filters I think we've got one at the moment that will replicate depending on entity type or published state or even entity IDs So this is all a back end thing at the moment You can define your own replication settings as well that are just config entities So again there's no UI for it but you can set your own YAML file that defines the replication settings and that would pass through to the replication task and define all of this information So yes it's possible if you get down and do it with the code Is there any plans for a UI where for example an editor could say actually we need this content specifically There are plans It's just trying to get time to do it The plan is eventually to have some sort of views like interface where you can have filters on that view and then just replicate everything that appears in that view So as I said you can filter it on entity type or published state or content type or any other filters that you'd normally have on a view and then it would just deploy everything that appears in that filtered list and this would use the same replication task and replication settings that I mentioned it would just pass it from that view to the task So in theory currently you could write some of the tasks taking your IDs of specific node entities that you knew you wanted to and that would get them replicated I'm pretty sure that we're at the stage now that you should just need that config YAML file and then you just define in there the entity IDs that you want to replicate and then every time you replicate you I think on the workspace itself you choose which replication settings config entity to use and it will replicate depending on the settings in that so every time you replicate upstream it will use those settings some sort of challenges we are having with the filters is how people are going to use this and the sort of mindset that you need to be in and one argument is that don't add anything to your workspace that you don't want replicated and a lot of people are saying to us that they want this filter replication but then another group of people are saying that I'll just create a workspace and only add to that what you want to replicate and if you have stuff that's not ready to replicate add it to a different workspace and that workspace as I showed on that diagram earlier it could be a child of your first workspace and then you can deploy your first workspace up to live and updates then the second workspace from the first one you can change what the upstream is so you can change that second workspace to then be an upstream of live so yeah it's trying to get into the mindset of how you work so you've got the conflict of the groups that want full replication and selective replication exactly but I think we can make it flexible enough that it can work with both use cases and I'm personally in the mindset that you should only add to your workspace the stuff that you want replicated and I think I would suggest just to get in that mindset and get clients in that mindset of this way of working because that's kind of what you do with Git if you're developing code you wouldn't put things in your branch if it's not ready to go live or you wouldn't merge your branch to your upstream branch selectively you'd merge the whole branch so I think it's the way developers are probably used to doing things with code maybe not the way content editors are used to doing things with content I guess it's also less resource intensive replicating only selective items especially on your workspaces yes, yeah if you are replicating a lot of entities at once it can be pretty slow alright, thanks great, anything else? I imagine that this would make merging to entities a little bit more difficult is there anything in place for handling that? so the question was about merging entities and so currently it's all down to the conflict stuff again if you merge to entities then you end up with two revisions that have got the same parent and it doesn't just have to be two revisions you could have 20 revisions that have the same parent and you could have a sort of a tree of ten revisions underneath on the one side and ten revisions underneath on the other side and we've got to resolve the conflict so again it's either a case of picking which is your winning conflict or trying to do a merge between them this would be two entities with completely if you've got two entities which have different UUIDs then they are two entities and they cannot be merged we've got no way in place and no plan to merge them I'm not sure of a good solution there but I think it will be a case of manually just delete one of the entities and merge the changes back but that would only come into place if someone created the entity separately if they stemmed from the same creation then they'd always have the same UUID no matter where they're replicated I mean this is a we have a software for laboratories and let's say chemicals someone might have there's many different names for chemicals and sometimes we go in and clean stuff up, merge multiple are actually synonymous and they already have a lot of data that's already associated with them so I'm kind of wondering like I don't have a good suggestion there so I think that's it, we're all good and if you do have any other questions afterwards then come find me or tweet me or I'm happy to take any questions on this later on great, thank you