anchor.diff:      override this.CanResetValue source = false
       override this.ResetValue source = ()
       override this.ShouldSerializeValue source = true
  -    override this.IsReadOnly with get () = fieldInfo.Name = "Id@"
  +    override this.IsReadOnly
  +        // NOTE: we make entity id read-only
  +        with get () = fieldInfo.Name = "Id@"
       override this.GetValue source =
           let entityTds = source :?> EntityTypeDescriptorSource
           let entityLens = World.entity entityTds.Address
  
positive.code:     override this.GetTypeDescriptor (_, _) = Etd
  
  let [<EntryPoint; STAThread>] main _ =
      let refWorld = ref Unchecked.defaultof<World>
      use form = new NuEditForm ()
      let sdlViewConfig = ExistingWindow form.displayPanel.Handle
      let sdlRenderFlags = enum<SDL.SDL_RendererFlags> (int SDL.SDL_RendererFlags.SDL_RENDERER_ACCELERATED ||| int SDL.SDL_RendererFlags.SDL_RENDERER_PRESENTVSYNC)
      let sdlConfig = makeSdlConfig sdlViewConfig 900 600 sdlRenderFlags 1024
      run4
          (fun sdlDeps ->
  
  
negative.code:     override this.SetValue (source, value) =
          let entityTds = source :?> EntityTypeDescriptorSource
          let entityChange = { Address = entityTds.Address; FieldInfo = fieldInfo; Value = value }
          // NOTE: even though this ref world will eventually get blown away, it must still be
          // updated here so that the change is reflected immediately by the property grid.
          entityTds.RefWorld := applyEntityChange entityTds.RefWorld.Value entityChange
          gEntityChanges.Add entityChange
  
  