Wrapping a Column with an expanded in a SingleChildScrollView throws an exception

Hi,
lets take this simple App, it should have a Textfield and a Text always at the bottom of the screen:

  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(),
      body: new Column(mainAxisSize: MainAxisSize.max,
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: <Widget>[
          new Text(
            'Line 1',
          ),
          new Text(
            'Line 2',
          ),
          Expanded(

            child: Container(
              alignment: Alignment.bottomCenter,
                          child: new Text(
                'Should be at the bottom',
              ),
            ),
          ),
        ],
      ),
    );
  }

Which is a pretty common use case. Unfortunately the Textfield at the bottom won't get scrolled into view when getting focus so I wrap the Scaffold in a SingleChildScrollView which leads to this exception:
I/flutter ( 6245): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 6245): The following assertion was thrown during performLayout():
I/flutter ( 6245): RenderCustomMultiChildLayoutBox object was given an infinite size during layout.
I/flutter ( 6245): This probably means that it is a render object that tries to be as big as possible, but it was put
I/flutter ( 6245): inside another render object that allows its children to pick their own size.
I/flutter ( 6245): The nearest ancestor providing an unbounded height constraint is:
I/flutter ( 6245):   _RenderSingleChildViewport#d8e19 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):   creator: _SingleChildViewport ← _ScrollableScope ← IgnorePointer-[GlobalKey#f839e] ← Semantics ←
I/flutter ( 6245):   Listener ← _GestureSemantics ←
I/flutter ( 6245):   RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#1b983] ←
I/flutter ( 6245):   _ExcludableScrollSemantics-[GlobalKey#92c21] ← RepaintBoundary ← CustomPaint ← RepaintBoundary ←
I/flutter ( 6245):   NotificationListener<ScrollNotification> ← ⋯
I/flutter ( 6245):   parentData: <none> (can use size)
I/flutter ( 6245):   constraints: BoxConstraints(w=411.4, h=683.4)
I/flutter ( 6245):   layer: OffsetLayer#3a690
I/flutter ( 6245):   size: Size(411.4, 683.4)
I/flutter ( 6245): The constraints that applied to the RenderCustomMultiChildLayoutBox were:
I/flutter ( 6245):   BoxConstraints(w=411.4, 0.0<=h<=Infinity)
I/flutter ( 6245): The exact size it was given was:
I/flutter ( 6245):   Size(411.4, Infinity)
I/flutter ( 6245): See https://flutter.io/layout/ for more information.
I/flutter ( 6245):
I/flutter ( 6245): When the exception was thrown, this was the stack:
I/flutter ( 6245): #0      RenderBox.debugAssertDoesMeetConstraints.<anonymous closure> (package:flutter/src/rendering/box.dart:1713:9)
I/flutter ( 6245): #1      RenderBox.debugAssertDoesMeetConstraints (package:flutter/src/rendering/box.dart:1787:6)
I/flutter ( 6245): #2      RenderBox.size=.<anonymous closure> (package:flutter/src/rendering/box.dart:1507:17)
I/flutter ( 6245): #3      RenderBox.size= (package:flutter/src/rendering/box.dart:1507:65)
I/flutter ( 6245): #4      RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:354:5)
I/flutter ( 6245): #5      RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #6      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #7      RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #8      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #9      _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1143:11)
I/flutter ( 6245): #10     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #11     _RenderSingleChildViewport.performLayout (package:flutter/src/widgets/single_child_scroll_view.dart:479:13)
I/flutter ( 6245): #12     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #13     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #14     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #15     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #16     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #17     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #18     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #19     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #20     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #21     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #22     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #23     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #24     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #25     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #26     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #27     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #28     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #29     _RenderSingleChildViewport.performLayout (package:flutter/src/widgets/single_child_scroll_view.dart:479:13)
I/flutter ( 6245): #30     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #31     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #32     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #33     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #34     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #35     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #36     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #37     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #38     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #39     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #40     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #41     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #42     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #43     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #44     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #45     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #46     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #47     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #48     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #49     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #50     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #51     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #52     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #53     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #54     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #55     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #56     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #57     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #58     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #59     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #60     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #61     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #62     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:2831:13)
I/flutter ( 6245): #63     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #64     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:520:15)
I/flutter ( 6245): #65     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #66     __RenderTheatre&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #67     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #68     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #69     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #70     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #71     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #72     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #73     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #74     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #75     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #76     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 6245): #77     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 6245): #78     RenderView.performLayout (package:flutter/src/rendering/view.dart:125:13)
I/flutter ( 6245): #79     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1451:7)
I/flutter ( 6245): #80     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:710:18)
I/flutter ( 6245): #81     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:270:19)
I/flutter ( 6245): #82     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:627:13)
I/flutter ( 6245): #83     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208:5)
I/flutter ( 6245): #84     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter ( 6245): #85     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
I/flutter ( 6245): #86     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:751:7)
I/flutter ( 6245): #88     _Timer._runTimers (dart:isolate/runtime/libtimer_impl.dart:382:19)
I/flutter ( 6245): #89     _Timer._handleMessage (dart:isolate/runtime/libtimer_impl.dart:416:5)
I/flutter ( 6245): #90     _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:165:12)
I/flutter ( 6245): (elided one frame from package dart:async)
I/flutter ( 6245):
I/flutter ( 6245): The following RenderObject was being processed when the exception was fired:
I/flutter ( 6245):   RenderCustomMultiChildLayoutBox#1d542 relayoutBoundary=up12 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):   creator: CustomMultiChildLayout ← AnimatedBuilder ← DefaultTextStyle ← AnimatedDefaultTextStyle ←
I/flutter ( 6245):   _InkFeatures-[GlobalKey#a15e8 ink renderer] ← NotificationListener<LayoutChangedNotification> ←
I/flutter ( 6245):   PhysicalModel ← AnimatedPhysicalModel ← Material ← PrimaryScrollController ← _ScaffoldScope ←
I/flutter ( 6245):   Scaffold ← ⋯
I/flutter ( 6245):   parentData: <none> (can use size)
I/flutter ( 6245):   constraints: BoxConstraints(w=411.4, 0.0<=h<=Infinity)
I/flutter ( 6245):   size: Size(411.4, Infinity)
I/flutter ( 6245): This RenderObject had the following descendants (showing up to depth 5):
I/flutter ( 6245):   RenderFlex#d05ae NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):     RenderParagraph#be72d NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):     RenderParagraph#707ac NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):     RenderSemanticsAnnotations#04c80 NEEDS-LAYOUT NEEDS-PAINT
Reloaded 0 of 391 libraries in 391ms.
I/flutter ( 6245):       RenderIgnorePointer#2bbea NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):         RenderPointerListener#01e0d NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):           _RenderDecoration#7a351 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):     RenderPositionedBox#faaa5 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):       RenderFlex#46117 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):         RenderSemanticsAnnotations#3fc96 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):           RenderIgnorePointer#8523d NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):         RenderParagraph#43155 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):   RenderConstrainedBox#160a1 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):     RenderSemanticsAnnotations#7b97b NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):       RenderPhysicalModel#c472f NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):         _RenderInkFeatures#902a3 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):           RenderPositionedBox#87b65 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):   RenderStack#4e7f8 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):     RenderTransform#0443a NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245):       RenderTransform#92ca9 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 6245): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter ( 6245): Another exception was thrown: _RenderInkFeatures object was given an infinite size during layout.
I/flutter ( 6245): Another exception was thrown: RenderPhysicalModel object was given an infinite size during layout.
I/flutter ( 6245): Another exception was thrown: _RenderSingleChildViewport object was given an infinite size during layout.
I/flutter ( 6245): Another exception was thrown: RenderIgnorePointer object was given an infinite size during layout.
I/flutter ( 6245): Another exception was thrown: RenderSemanticsAnnotations object was given an infinite size during layout.
I/flutter ( 6245): Another exception was thrown: RenderPointerListener object was given an infinite size during layout.
I/flutter ( 6245): Another exception was thrown: RenderSemanticsGestureHandler object was given an infinite size during layout.
I/flutter ( 6245): Another exception was thrown: _RenderExcludableScrollSemantics object was given an infinite size during layout.
I/flutter ( 6245): Another exception was thrown: RenderRepaintBoundary object was given an infinite size during layout.
I/flutter ( 6245): Another exception was thrown: RenderCustomPaint object was given an infinite size during layout.
I/flutter ( 6245): Another exception was thrown: RenderRepaintBoundary object was given an infinite size during layout.
D/EGL_emulation( 6245): eglMakeCurrent: 0xa51053c0: ver 3 1 (tinfo 0xa51032d0)
Lost connection to device.
Exited (sigterm)

Moving the SingleChildScrollView inside the Scaffold's body doesn't work either:
Launching lib\main.dart on Android SDK built for x86 in debug mode...
Built build\app\outputs\apk\debug\app-debug.apk.
D/EGL_emulation( 5210): eglMakeCurrent: 0xa301bbc0: ver 3 1 (tinfo 0xa0f9b970)
E/eglCodecCommon( 5210): glUtilsParamSize: unknow param 0x000082da
E/eglCodecCommon( 5210): glUtilsParamSize: unknow param 0x000082da
I/Choreographer( 5210): Skipped 36 frames!  The application may be doing too much work on its main thread.
D/EGL_emulation( 5210): eglMakeCurrent: 0xa7785360: ver 3 1 (tinfo 0xa77832c0)
I/flutter ( 5210): ══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
I/flutter ( 5210): The following assertion was thrown during performLayout():
I/flutter ( 5210): RenderCustomMultiChildLayoutBox object was given an infinite size during layout.
I/flutter ( 5210): This probably means that it is a render object that tries to be as big as possible, but it was put
I/flutter ( 5210): inside another render object that allows its children to pick their own size.
I/flutter ( 5210): The nearest ancestor providing an unbounded height constraint is:
I/flutter ( 5210):   _RenderSingleChildViewport#89ed7 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210):   creator: _SingleChildViewport ← _ScrollableScope ← IgnorePointer-[GlobalKey#fde50] ← Semantics ←
I/flutter ( 5210):   Listener ← _GestureSemantics ←
I/flutter ( 5210):   RawGestureDetector-[LabeledGlobalKey<RawGestureDetectorState>#c830f] ←
I/flutter ( 5210):   _ExcludableScrollSemantics-[GlobalKey#cf513] ← RepaintBoundary ← CustomPaint ← RepaintBoundary ←
I/flutter ( 5210):   NotificationListener<ScrollNotification> ← ⋯
I/flutter ( 5210):   parentData: <none> (can use size)
I/flutter ( 5210):   constraints: BoxConstraints(w=411.4, h=683.4)
I/flutter ( 5210):   size: MISSING
I/flutter ( 5210): The constraints that applied to the RenderCustomMultiChildLayoutBox were:
I/flutter ( 5210):   BoxConstraints(w=411.4, 0.0<=h<=Infinity)
I/flutter ( 5210): The exact size it was given was:
I/flutter ( 5210):   Size(411.4, Infinity)
I/flutter ( 5210): See https://flutter.io/layout/ for more information.
I/flutter ( 5210):
I/flutter ( 5210): When the exception was thrown, this was the stack:
I/flutter ( 5210): #0      RenderBox.debugAssertDoesMeetConstraints.<anonymous closure> (package:flutter/src/rendering/box.dart:1713:9)
I/flutter ( 5210): #1      RenderBox.debugAssertDoesMeetConstraints (package:flutter/src/rendering/box.dart:1787:6)
I/flutter ( 5210): #2      RenderBox.size=.<anonymous closure> (package:flutter/src/rendering/box.dart:1507:17)
I/flutter ( 5210): #3      RenderBox.size= (package:flutter/src/rendering/box.dart:1507:65)
I/flutter ( 5210): #4      RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:354:5)
I/flutter ( 5210): #5      RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #6      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #7      RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #8      _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #9      _RenderCustomClip.performLayout (package:flutter/src/rendering/proxy_box.dart:1143:11)
I/flutter ( 5210): #10     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #11     _RenderSingleChildViewport.performLayout (package:flutter/src/widgets/single_child_scroll_view.dart:479:13)
I/flutter ( 5210): #12     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #13     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #14     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #15     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #16     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #17     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #18     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #19     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #20     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #21     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #22     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #23     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #24     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #25     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #26     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #27     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #28     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #29     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #30     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #31     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #32     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #33     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #34     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #35     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #36     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #37     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #38     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #39     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #40     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #41     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #42     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #43     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #44     RenderOffstage.performLayout (package:flutter/src/rendering/proxy_box.dart:2831:13)
I/flutter ( 5210): #45     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #46     RenderStack.performLayout (package:flutter/src/rendering/stack.dart:520:15)
I/flutter ( 5210): #47     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #48     __RenderTheatre&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #49     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #50     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #51     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #52     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #53     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #54     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #55     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #56     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #57     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #58     _RenderProxyBox&RenderBox&RenderObjectWithChildMixin&RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:109:13)
I/flutter ( 5210): #59     RenderObject.layout (package:flutter/src/rendering/object.dart:1576:7)
I/flutter ( 5210): #60     RenderView.performLayout (package:flutter/src/rendering/view.dart:125:13)
I/flutter ( 5210): #61     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1451:7)
I/flutter ( 5210): #62     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:710:18)
I/flutter ( 5210): #63     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:270:19)
I/flutter ( 5210): #64     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:627:13)
I/flutter ( 5210): #65     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:208:5)
I/flutter ( 5210): #66     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter ( 5210): #67     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
I/flutter ( 5210): #68     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:751:7)
I/flutter ( 5210): #70     _Timer._runTimers (dart:isolate/runtime/libtimer_impl.dart:382:19)
I/flutter ( 5210): #71     _Timer._handleMessage (dart:isolate/runtime/libtimer_impl.dart:416:5)
I/flutter ( 5210): #72     _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:165:12)
I/flutter ( 5210): (elided one frame from package dart:async)
I/flutter ( 5210):
I/flutter ( 5210): The following RenderObject was being processed when the exception was fired:
I/flutter ( 5210):   RenderCustomMultiChildLayoutBox#eb8b9 relayoutBoundary=up3 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210):   creator: CustomMultiChildLayout ← AnimatedBuilder ← DefaultTextStyle ← AnimatedDefaultTextStyle ←
I/flutter ( 5210):   _InkFeatures-[GlobalKey#3eaee ink renderer] ← NotificationListener<LayoutChangedNotification> ←
I/flutter ( 5210):   PhysicalModel ← AnimatedPhysicalModel ← Material ← PrimaryScrollController ← _ScaffoldScope ←
I/flutter ( 5210):   Scaffold ← ⋯
I/flutter ( 5210):   parentData: <none> (can use size)
I/flutter ( 5210):   constraints: BoxConstraints(w=411.4, 0.0<=h<=Infinity)
I/flutter ( 5210):   size: Size(411.4, Infinity)
I/flutter ( 5210): This RenderObject had the following descendants (showing up to depth 5):
I/flutter ( 5210):   RenderRepaintBoundary#62484 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210):     RenderCustomPaint#ee167 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210):       RenderRepaintBoundary#44385 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210):         _RenderExcludableScrollSemantics#ef2e6 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210):           RenderSemanticsGestureHandler#bc5d6 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210):   RenderConstrainedBox#39c3a NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210):     RenderSemanticsAnnotations#1c8b4 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210):       RenderPhysicalModel#f70a8 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210):         _RenderInkFeatures#c0f45 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210):           RenderPositionedBox#8924a NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210):   RenderStack#a0002 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210):     RenderTransform#ca415 NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210):       RenderTransform#c49ab NEEDS-LAYOUT NEEDS-PAINT
I/flutter ( 5210): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter ( 5210): Another exception was thrown: _RenderInkFeatures object was given an infinite size during layout.
I/flutter ( 5210): Another exception was thrown: RenderPhysicalModel object was given an infinite size during layout.
I/flutter ( 5210): Another exception was thrown: RenderBox was not laid out: RenderRepaintBoundary#62484 NEEDS-LAYOUT NEEDS-PAINT
D/        ( 5210): HostConnection::get() New Host Connection established 0xa77888c0, tid 5232
D/EGL_emulation( 5210): eglMakeCurrent: 0xa301bbc0: ver 3 1 (tinfo 0xa7783210)

I know that there is a workaround explained here https://docs.flutter.io/flutter/widgets/SingleChildScrollView-class.html but for such a standard requirement of using Expanded inside a Column that must be able to scroll up when the keyboard appears there should be a better solution. @Hixie wrote that Scaffold would take care of this but obviously doesn't.
Please see also https://github.com/flutter/flutter/issues/18558 which shows another limitation of the workaround.
The sample app is here https://github.com/escamoteur/column_in_scrollable_repro

One workaround I tries was to have an Expanded widget with an empty container. Then whatever you want to add to bottom, add it after the expanded container.
@override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(),
      body: new Column(
        mainAxisSize: MainAxisSize.max,
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: <Widget>[
          new Text(
            'Line 1',
          ),
          new Text(
            'Line 2',
          ),
          new TextField(),
          Expanded(child: new Container(),),
          Column(
            children: <Widget>[
              new TextField(),
              new Text(
                'Should be at the bottom',
              ),
            ],
          )

        ],
      ),
    );
  }

Does this help?

@Kartik1607 In your example is no ScrollView.

Okay, the requirement is that there should be a scrolling view as main icon, and there should also be a sticky bottom widget that goes up when keyboard is shown?

No the whole bottom should not go up, only the focused Textfield should scroll into view

Ah so you want the list to go under the keyboard but for it to somehow know that only part of it is visible and that it should therefore scroll?
cc @goderbauer

@Hixie yes. That's what I would see as excepted behaviour

right now the scroll view doesn't know about the keyboard in the case where the Scaffold isn't resizing, and the Scaffold doesn't know about the scroll view, so nothing knows to scroll or how much to scroll. You could implement it manually, or have the bottom bar hidden when they keyboard is up...

I thought the ability to scroll a TextFields into view when it gets focus was the goal of  https://github.com/flutter/flutter/issues/10826#issuecomment-386004917

I'm curious to @goderbauer's thoughts since he worked on #10826.

You must make Container height equals to double.maxInfinite
child: Container(           height: double.maxFinite,          child: .....

@goderbauer any news on this

Any updates about this? I am trying to obtain a similar layout, it is pretty common, A login form that shows at the top and buttons for google/facebook login that must be anchored to the bottom, but when a login form field obtains focus and the keyboard shows up it needs to be able to scroll to the google/facebook buttons

It can be this way:
class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('AppBar'),
        ),
        body: LayoutBuilder(builder: (context, constraints) {
          return SingleChildScrollView(
              child: ConstrainedBox(
                  constraints: BoxConstraints(minWidth: constraints.maxWidth, minHeight: constraints.maxHeight),
                  child: IntrinsicHeight(
                    child: Column(
                        mainAxisSize: MainAxisSize.max,
                        children: [
                          Text('header'),
                          Expanded(
                            child: Container(
                              color: Colors.green,
                              child: Text('body'),
                            ),
                          ),
                          Text('footer'),
                        ]
                    ),
                  )
              )
          );
        })
    );
  }
}

It can be done this way:
class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('AppBar'),
        ),
        body: LayoutBuilder(builder: (context, constraints) {
          return SingleChildScrollView(
              child: ConstrainedBox(
                  constraints: BoxConstraints(minWidth: constraints.maxWidth, minHeight: constraints.maxHeight),
                  child: IntrinsicHeight(
                    child: Column(
                        mainAxisSize: MainAxisSize.max,
                        children: [
                          Text('header'),
                          Expanded(
                            child: Container(
                              color: Colors.green,
                              child: Text('body'),
                            ),
                          ),
                          Text('footer'),
                        ]
                    ),
                  )
              )
          );
        })
    );
  }
}

You just made my day with this wizardry solution!

@NikitaZhelonkin, thanks! I had an issue with a multiline TextFormField/Expanded combo within a Column. This turned out to be THE fix.

@NikitaZhelonkin Awesome solution, I was trying to add AnimatedList view, which I can't without having static height. Is there something there with Flexible Column or Row which can be animated on add/remove/reorder based on FLIP animation or something, or I should just implement AnimatedColumn myself?

The recent refactor of SliverFillRemaining (#35810) should be able to provide a solution here as well.
I've re-worked the workaround above to illustrate:

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: Home());
  }
}

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('AppBar'),
      ),
      body: SafeArea(
        child: CustomScrollView(
          slivers: <Widget>[
            SliverToBoxAdapter(
              child: TextField(),
            ),
            SliverFillRemaining(
              hasScrollBody: false,
              child: IntrinsicHeight(
                child: Column(
                  mainAxisSize: MainAxisSize.max,
                  children: <Widget>[
                    Expanded(
                      child: Padding(
                        padding: const EdgeInsets.only(top: 8.0),
                        child: Container(
                          color: Colors.green,
                          child: Text('body'),
                        ),
                      ),
                    ),
                    Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: RaisedButton(
                        child: Text('Bottom'),
                        onPressed: () {},
                      ),
                    ),
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

There is another use case in #38641 that shows another SliverFillRemaining layout.
Issues #38640 and #35753 refer to improving documentation around this widget and others that use flexible spacing/sizing and scrolling views.

It can be done this way:
class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('AppBar'),
        ),
        body: LayoutBuilder(builder: (context, constraints) {
          return SingleChildScrollView(
              child: ConstrainedBox(
                  constraints: BoxConstraints(minWidth: constraints.maxWidth, minHeight: constraints.maxHeight),
                  child: IntrinsicHeight(
                    child: Column(
                        mainAxisSize: MainAxisSize.max,
                        children: [
                          Text('header'),
                          Expanded(
                            child: Container(
                              color: Colors.green,
                              child: Text('body'),
                            ),
                          ),
                          Text('footer'),
                        ]
                    ),
                  )
              )
          );
        })
    );
  }
}

Wow this wizardy worked for me as well. Thank you!

It can be done this way:
class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('AppBar'),
        ),
        body: LayoutBuilder(builder: (context, constraints) {
          return SingleChildScrollView(
              child: ConstrainedBox(
                  constraints: BoxConstraints(minWidth: constraints.maxWidth, minHeight: constraints.maxHeight),
                  child: IntrinsicHeight(
                    child: Column(
                        mainAxisSize: MainAxisSize.max,
                        children: [
                          Text('header'),
                          Expanded(
                            child: Container(
                              color: Colors.green,
                              child: Text('body'),
                            ),
                          ),
                          Text('footer'),
                        ]
                    ),
                  )
              )
          );
        })
    );
  }
}

This worked for me. Thank you so much!

It can be done this way:
class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('AppBar'),
        ),
        body: LayoutBuilder(builder: (context, constraints) {
          return SingleChildScrollView(
              child: ConstrainedBox(
                  constraints: BoxConstraints(minWidth: constraints.maxWidth, minHeight: constraints.maxHeight),
                  child: IntrinsicHeight(
                    child: Column(
                        mainAxisSize: MainAxisSize.max,
                        children: [
                          Text('header'),
                          Expanded(
                            child: Container(
                              color: Colors.green,
                              child: Text('body'),
                            ),
                          ),
                          Text('footer'),
                        ]
                    ),
                  )
              )
          );
        })
    );
  }
}

Lots of folks saying this worked, I wonder if they tried opening a keyboard on a text field on the page somewhere - and then scrolling up - you get an overflow, lots of yellow and black chevrons. Just to be clear, copy the code as above, swap one of the widgets in the column for a textFormField, bring up the keyboard and THEN scroll up. The solution looks like its working until you try scrolling up. You might ask why the blazes anyone would scroll up at that point, easy answer is no one sane would, you are typing something at that point, but apparently testers who need to earn their rubbish salaries like to make a name for themselves by doing things that no one would ever actually do.
In my case if I do this:
return Scaffold(         body: Column(children: [       FlutterLogo(size: 200),       WidgetWithTextFieldInside(),       FlutterLogo(size: 200),     ]));
Then as long as the other bits make it all use lots of the screen before the keyboard shows, and then the keyboard overlaps you get some overflow.
If you try to solve with the above code that everyone else seems to like, then you might not care but if users focus the textfield and bring up the keyboard and then scroll up they will see overflow.
If you wrap the thing in a simple SingleChildScrollView, the overflow cases both go away, you don't need  all the stuff in that rather complicated solution, BUT, the child of the scrollView, if its a column anyway, doesn't like to fill the screen, I mean it does if I force its children bigger, but there seems no way for it to respond directly to its container. For instance setting spaceEvenly or Between on the column no longer works, drop the SingleChildScrollView and the column spacing works but then you get overflow issues.
I have tried Flex also, that seems to have all the same issues as SingleChildScrollView. Have been staring at flutterlogos all day now, getting a bit tired.

So the following is spectacularly stupid, but it works for me. If you really need to use the snazzy solution posted by @NikitaZhelonkin AND you have testers who will notice that once a keyboard is brought up AND THEN the user scrolls up and notices the overflow (the only flaw with the otherwise complex but functional method), then a little tweak can get rid of that bit:
I added some height to the underlying stuff getting rendered:
On the constrained box add a bit to the minimum height:
minHeight: constraints.maxHeight+200
Then add an empty widget after the other widgets in the column in to fill that space:
Container(height:200),
This acts like a little buffer to allow the following to work and stop the user seeing the overflow chevrons, and I wont put the code as it is an embarrasing hack, and if you have got this far you probably know a better way:

Add a scroll controller to the SingleChildScrollView
Add a listener to that controller which looks out for a position near the bottom, i.e. when offset is greater than total possible offset - roughly half the buffer defined above (half so that the user can scroll without ugly bouncing, not any further as listener is apparently a bit sluggish to respond in my testing.
make it then animate to a point just above this bufferzone.

I now have a column that can fill the screen, a keyboard that can jump up with no overflow and a hidden zone under the keyboard that might overflow but can never be reached by the user.
(but you know, I still love flutter!)

It can be done this way:
class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('AppBar'),
        ),
        body: LayoutBuilder(builder: (context, constraints) {
          return SingleChildScrollView(
              child: ConstrainedBox(
                  constraints: BoxConstraints(minWidth: constraints.maxWidth, minHeight: constraints.maxHeight),
                  child: IntrinsicHeight(
                    child: Column(
                        mainAxisSize: MainAxisSize.max,
                        children: [
                          Text('header'),
                          Expanded(
                            child: Container(
                              color: Colors.green,
                              child: Text('body'),
                            ),
                          ),
                          Text('footer'),
                        ]
                    ),
                  )
              )
          );
        })
    );
  }
}

I cant thank you enough bro, you the real mvp

I had a very strange problem with both solutions (https://github.com/flutter/flutter/issues/18711#issuecomment-522775434 and https://github.com/flutter/flutter/issues/18711#issuecomment-505791677):
RenderFlex overflowed by 22 pixels when TextField.errorText is not null. To fix it had to hide TextField.errorText with InputDecoration(errorStyle: TextStyle(height: 0)) and create own widget to display error message.
Any ideas about this problem?

@fedotxxl I had an issue with TextField and the above solution. The Error text make the widget have a variable height, and the proposed solution does not work if any widget is of variable height (also had the issue when inserting and image with Image.asset).
To fix that I wrapped my TextField inside a container of fixed height.

I had a similar situation where I wanted my main SingleChildScrollView to be at the bottom initially and move up as the soft keyboard pops up. What I did:

Wrapped the SingleChildScrollView within a Container.
Set the alignment of the Container to Alignment.bottomcenter.
Worked!
This was in my case and I am not sure how well this would work in other situations. I'm still a beginner and learning flutter. Posting this in case this works for someone else as well. Cheers!

I had a similar situation where I wanted my main SingleChildScrollView to be at the bottom initially and move up as the soft keyboard pops up. What I did:

Wrapped the SingleChildScrollView within a Container.
Set the alignment of the Container to Alignment.bottomcenter.
Worked!
This was in my case and I am not sure how well this would work in other situations. I'm still a beginner and learning flutter. Posting this in case this works for someone else as well. Cheers!

It can be done this way:
class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('AppBar'),
        ),
        body: LayoutBuilder(builder: (context, constraints) {
          return SingleChildScrollView(
              child: ConstrainedBox(
                  constraints: BoxConstraints(minWidth: constraints.maxWidth, minHeight: constraints.maxHeight),
                  child: IntrinsicHeight(
                    child: Column(
                        mainAxisSize: MainAxisSize.max,
                        children: [
                          Text('header'),
                          Expanded(
                            child: Container(
                              color: Colors.green,
                              child: Text('body'),
                            ),
                          ),
                          Text('footer'),
                        ]
                    ),
                  )
              )
          );
        })
    );
  }
}

Seems like it stopped working in Flutter 2

Working fine for me in master branch 2.1.0-30.
fwiw, here's a re-usable null safe version of this:
class ScrollableColumnextends StatelessWidget {
  const ScrollableColumn(
      {Key? key,
      required this.children,
      this.crossAxisAlignment = CrossAxisAlignment.center,
      this.textDirection,
      this.mainAxisAlignment = MainAxisAlignment.start,
      this.mainAxisSize = MainAxisSize.max,
      this.verticalDirection = VerticalDirection.down,
      this.textBaseline})
      : super(key: key);
  final List<Widget> children;
  final CrossAxisAlignment crossAxisAlignment;
  final TextDirection? textDirection;
  final MainAxisAlignment mainAxisAlignment;
  final MainAxisSize mainAxisSize;
  final VerticalDirection verticalDirection;
  final TextBaseline? textBaseline;
  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(builder: (_, constraints) {
      return SingleChildScrollView(
        child: ConstrainedBox(
          // Constrained box stops the column from getting too small, forcing it to be at least as tall as it's parent
          constraints: BoxConstraints(minWidth: constraints.maxWidth, minHeight: constraints.maxHeight),
          // Intrinsic height stops the column from expanding when it's height becomes unbounded
          child: IntrinsicHeight(
            child: Column(
              children: children,
              crossAxisAlignment: crossAxisAlignment,
              textDirection: textDirection,
              mainAxisAlignment: mainAxisAlignment,
              mainAxisSize: mainAxisSize,
              verticalDirection: verticalDirection,
              textBaseline: textBaseline,
            ),
          ),
        ),
      );
    });
  }
}

Usage:
Widget build(BuildContext context){

  Widget _box(String name) =>
        Container(height: 200, color: RandomColor().randomColor(), child: Text(name, style: TextStyle(fontSize: 128)));

  return ScrollableColumn(
    children: [
      // Body (expanding)
      Expanded(child: _box("Content1")),
      Expanded(child: _box("Content2")),
      Expanded(child: _box("Content3")),
    ],
  )
}

https://user-images.githubusercontent.com/736973/113079818-01b82f00-9193-11eb-8757-834669d63b32.mp4


bug: [regression 0.46] Does not find inherited methods

Description of the bug

I have a project linking to Sub.__init__, where Sub.__init__ is not actually defined but inherited from Parent.__init__. This worked fine until we upgraded to griffe 0.46.
To Reproduce

git clone https://github.com/frequenz-floss/frequenz-sdk-python.git
cd frequenz-sdk-python
python3.11 -m venv .venv
. .venv/bin/activate
python -m pip install .[dev-mkdocs]
python -m pip show griffe # Shows 0.46
mkdocs serve # fails mkdocs_autorefs: reference/frequenz/sdk/actor/index.md: Could not find cross-reference target '[frequenz.sdk.actor.Actor.__init__]'

(Sorry it is a very big project, my intuition is it should be easy to reproduce with a small code snippet just with a parent and sub-class, but if this is enough info to pin-point the bug I prefer not to spend the time to provide the proper MRE).
Full traceback
No traceback, just error message (warnings, but I use --strict) and a deprecation:
INFO    -  DeprecationWarning: Passing multiple extensions as a single list or tuple is deprecated. Please pass them as separate arguments instead.
             File "/tmp/frequenz-sdk-python/.venv/lib/python3.11/site-packages/mkdocstrings_handlers/python/handler.py", line 299, in collect
               extensions=load_extensions(extensions),
             File "/tmp/frequenz-sdk-python/.venv/lib/python3.11/site-packages/griffe/extensions/base.py", line 481, in load_extensions
               warnings.warn(
INFO    -  DeprecationWarning: This method is now a property and should be accessed as such (without parentheses).
             File "/tmp/frequenz-sdk-python/.venv/lib/python3.11/site-packages/jinja2/runtime.py", line 303, in call
               return __obj(*args, **kwargs)
             File "/tmp/frequenz-sdk-python/.venv/lib/python3.11/site-packages/griffe/mixins.py", line 393, in __call__
               warnings.warn(
WARNING -  mkdocs_autorefs: reference/frequenz/sdk/actor/index.md: Could not find cross-reference target '[frequenz.sdk.actor.Actor.__init__]'
WARNING -  mkdocs_autorefs: reference/frequenz/sdk/actor/index.md: Could not find cross-reference target '[frequenz.sdk.actor.Actor.__init__]'
WARNING -  mkdocs_autorefs: reference/frequenz/sdk/actor/index.md: Could not find cross-reference target '[frequenz.sdk.actor.Actor.__init__]'
WARNING -  mkdocs_autorefs: user-guide/actors.md: Could not find cross-reference target '[frequenz.sdk.actor.Actor.__init__]'
WARNING -  mkdocs_autorefs: user-guide/actors.md: Could not find cross-reference target '[frequenz.sdk.actor.Actor.__init__]'
WARNING -  mkdocs_autorefs: user-guide/actors.md: Could not find cross-reference target '[frequenz.sdk.actor.Actor.__init__]'

Full log with -v attached.
Expected behavior
It picks up the __init__ from the parent class as before.
Environment information

$ griffe --debug-info
- __System__: Linux-6.7.12-amd64-x86_64-with-glibc2.38
- __Python__: cpython 3.11.9 (/tmp/frequenz-sdk-python/.venv/bin/python)
- __Environment variables__:
- __Installed packages__:
  - `griffe` v0.46.0

PASTE OUTPUT HERE
Additional context
Using griffe 0.45.3 works:
$ python -m pip install griffe==0.45.3
Collecting griffe==0.45.3
  Using cached griffe-0.45.3-py3-none-any.whl.metadata (6.3 kB)
Requirement already satisfied: colorama>=0.4 in ./.venv/lib/python3.11/site-packages (from griffe==0.45.3) (0.4.6)
Using cached griffe-0.45.3-py3-none-any.whl (120 kB)
Installing collected packages: griffe
  Attempting uninstall: griffe
    Found existing installation: griffe 0.46.0
    Uninstalling griffe-0.46.0:
      Successfully uninstalled griffe-0.46.0
Successfully installed griffe-0.45.3
$ mkdocs serve
INFO    -  Building documentation...
INFO    -  [macros] - Macros arguments: {'module_name': 'docs/_scripts/macros', 'modules': [], 'render_by_default': True, 'include_dir': '', 'include_yaml': [], 'j2_block_start_string': '', 'j2_block_end_string': '', 'j2_variable_start_string': '', 'j2_variable_end_string': '', 'on_undefined': 'strict',
           'on_error_fail': True, 'verbose': False}
INFO    -  [macros] - Found local Python module 'docs/_scripts/macros' in: /tmp/frequenz-sdk-python
INFO    -  [macros] - Found external Python module 'docs/_scripts/macros' in: /tmp/frequenz-sdk-python
INFO    -  [macros] - Extra variables (config file): ['social', 'version']
INFO    -  [macros] - Extra filters (module): ['pretty']
INFO    -  Cleaning site directory
INFO    -  Doc file 'SUMMARY.md' contains an unrecognized relative link 'user-guide/', it was left as is. Did you mean 'user-guide/index.md'?
INFO    -  Doc file 'SUMMARY.md' contains an unrecognized relative link 'tutorials/', it was left as is.
INFO    -  Doc file 'SUMMARY.md' contains an unrecognized relative link 'reference/', it was left as is.
INFO    -  Doc file 'user-guide/glossary.md' contains a link '#grid_power', but there is no such anchor on this page.
INFO    -  Documentation built in 7.11 seconds
INFO    -  [10:32:53] Watching paths for changes: 'docs', 'mkdocs.yml', 'src', 'CONTRIBUTING.md'
INFO    -  [10:32:53] Serving on http://<IP_ADDRESS>:8000/

Thanks for the report @llucax, and sorry for the trouble. Looking into it right now.

Turns out it's the same issue as https://github.com/mkdocstrings/griffe/issues/295, so closing in favor of the oldest :slightly_smiling_face: See an explanation of the issue there.

sorry for the trouble

All good, we are using an unstable tool and we are not pinning the transitive dependencies, so we know what we are getting into :upside_down_face:

Turns out it's the same issue as https://github.com/mkdocstrings/griffe/issues/295
You linked to this very same issue :grimacing: :laughing:

Erm, https://github.com/mkdocstrings/griffe/issues/294 :joy:


Support serializing exceptions like Serilog.Sinks.Elasticsearch

Potential dupe of #139 , but am still facing the same issue with Serilog on 1.5.3
ECS integration/library project(s) (e.g. Elastic.CommonSchema.Serilog): Elastic.CommonSchema.Serilog
ECS schema version (e.g. 1.4.0): 1.5.3
ECS .NET assembly version (e.g. 1.4.2): 1.5.3
Elasticsearch version (if applicable): 7.13.1
.NET framework / OS: .NET 5.0 / windows 10
Description of the problem, including expected versus actual behavior:
When using ECS with Serilog, exception properties are not sent to ES. I expect to see various exceptions.* properties in my log messages.
Steps to reproduce:
I'm configuring Serilog with the ES sink like so:
var elasticSinkOptions = new ElasticsearchSinkOptions(new Uri(elasticSettings.Uri))
{
    AutoRegisterTemplate = true,
    IndexFormat = $"logs-{indexName}",
    BatchAction = ElasticOpType.Create,
    CustomFormatter = new EcsTextFormatter()
};
Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .Enrich.FromLogContext()
    .Enrich.WithProperty("Application", "MyService")
    .WriteTo.Elasticsearch(elasticSinkOptions)
    .WriteTo.Console(outputTemplate:
        "[{Timestamp:HH:mm:ss} {Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}");

When doing e.g.:
try
{
    throw new Exception("Some exception");
}
catch (Exception e)
{
    Log.LogError(e, "Error occurred");
}

The log is sent to ES, but does not include information about the exception, the custom property (.Enrich.WithProperty("Application", "MyService")), does get sent to ES.
When removing CustomFormatter = new EcsTextFormatter() from the ES sink configuration, the exception does get sent to ES (in the exceptions.* properties), but my custom property not anymore.

I did some more research since this problem is really starting to annoy us.
1.5.1 does not have this problem, neither does 1.6.1-alpha1.
Any schedule on a non-prerelease of 1.6.1?

I also do still have the same issue as mentioned in #139 . Current Installed version is 1.5.3

Thanks for reporting this took me a while to parse this is actually a feature request to suppot the exceptions.* property just like Serilog.Sinks.Elasticsearch. A feature I actually contributed there back in '15 :cat:
Here's an old gist of that output:
https://gist.github.com/Mpdreamz/9fe1e18aca522f50b702
exceptions.* is not ECS compliant. Today ECS has no notion of serializing stack frames although it did add error.stack_trace since our last release:
https://github.com/elastic/ecs/pull/562


add feature: using hashed email string as input

Add a feature to angularjs-gravatardirective, you can add hashed email string directly as an attribute or email

Thanks! :+1:

We're trying to depend on this feature but I noticed it didn't get a version bump. Would you mind making a new patch release for this feature?

Thanks for supporting and using it! I am not the repository owner of the project. However, it is great that if you can suggest a version change log for discuss that can benefit to your company and also benefit to the community before making any pull request. Finally, thanks again for pointing out the part to improve it.


For MacOS

microsoft terminal run in MacOS

Please make sure to search for duplicates when filing new issues.
/dup #2331 #499 #4235

From https://github.com/microsoft/terminal/issues/4235#issuecomment-574748858

We're dependent upon C++/WinRT and XAML Islands (UWP XAML) for our UI. We're also using DX/DWrite for the text renderer. Unless those are ported to linux sometime, then I'd say there's very little chance we ever support linux.

s/linux/macOS/
/dup #2331 #504 #563 #624 #2466 #699 #498


“<uses-sdk” may not exist

when “<uses-sdk” exists, the IDE reports error, and in SDKSample's Manifest, there is no “<uses-sdk” here

Thanks for pointing this out, already fix and push to the master branch. Please check it!

Since the problem is solved, I will close the pull request. Thanks for pointing it out.


Update intents and entities

Improvements to intents and entities

Internal Off-Topic/Mark as Irrelevant feature added to the workspace

Off-topic intent removed

Option selection for amenity now uses @sys-number in addition to @option

Numeric values removed from entity @option as @sys-number handles numeric values
If an option above 5 is chosen, user is asked to provide a valid value (system only shows 5 results on map)

Locate restaurant now asks when user wants to travel to the restaurant

Date/time displayed when user provides a date/time

Time displayed in response for query "What's the time?"

Uses server system time, not user's local time

Codecov Report

Merging #71 into master will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master      #71   +/-   ##
=========================================
  Coverage     13.15%   13.15%
  Complexity       12       12
=========================================
  Files            10       10
  Lines           266      266
  Branches         29       29
=========================================
  Hits             35       35
  Misses          224      224
  Partials          7        7

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update dbd9194...9ea03d3. Read the comment docs.


Would love to help build out the streamlit app

Hey, again.  I’ve helped in the past with the data engineering wiki. I just noticed this repo and I have been building a Streamlit app myself lately: repo, so I am familiar with working with Streamlit. Not sure what the vision is on this but would love to help out!

Hey @digitalghost-dev! We are tracking the project using the GitHub project in the repo. Right now we are just working on getting V1 out so folks can use it but after that it's really open to the community's ideas!

Also, when you accept the invite we will add you to the GitHub project board. We want to use this to track who is working on what so we don't overlap on the work.

Hi @JPHaus, I am also interested in collaborating on this project, and I have implemented a fix for the #4 feature.


Network: /etc/resolv.conf is not a symbolic link to /etc/resolvconf/run/resolv.conf

Helpfully the /etc/resolv.conf symlink is different on different OSs.  Debian/Ubilinux is /etc/resolvconf/run/resolv.conf, Ubuntu is /run/resolvconf/resolv.conf

What an unnecessary complex mess.  resolvconf, systemd-resolve, dpkg-reconfigure and the kernel all have a hand in resolv.conf.  For debian/ubuntu, resolvconf is configured in /etc/resolvconf and takes some defaults from /etc/default/resolvconf which doesn't always exist.
/etc/resolvconf/update.d/libc contains 'DYNAMICRSLVCNFFILE="/run/resolvconf/resolv.conf"' which seems to determine the location of the dynamic file and is different on debian and ubuntu, and likely within different versions of the same OS.
Need to determine if there is an automated way of setting the symlink.

It seems that /run/resolvconf/resolv.conf is always the correct location to the dynamic file.  Debian - ubilinux and raspbian both symlink /etc/resolvconf/run to /run/resolvconf.


[REQ] multi language

Acknowledgement of preliminary instructions

[X] I have read and acknowledged the preliminary instructions.

What idea do you have?
Hope Theres A Feature That Could Choose Language For Bloxstrap Menu.

Already being worked on as part of the next update.


add apps to humanize and dehumanize bytes

app humanize
app dehumanize
use scala-native for these apps
publish in AUR

done in b9a307e and 5a73068


Categorisation of ARM template functions is unintuitive

Functions for working with arrays and objects are currently listed under a single page. Many of the functions are only applicable to arrays (hinted in the file naming, it seems) and this keeps giving me false hope of the capabilities when working with objects in ARM.
The full list of functions that are relevant to objects is:

contains
empty
intersection
length
union

There are a couple of other functions on this page whose categorisation is perhaps unclear as well:

coalesce – this is applicable to any type and feels more like a comparison or logical function to me.
json – this is a function that takes a string can return any JSON value. I'm not really sure how that could fit intuitively into the current categories.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 8fcf3c5c-decd-bb9b-b3e2-63b6615837bf
Version Independent ID: b53c1bc0-d959-1ed5-d1ef-b2e09a127683
Content: Template functions - arrays and objects - Azure Resource Manager
Content Source: articles/azure-resource-manager/templates/template-functions-array.md
Service: azure-resource-manager
Sub-service: templates
GitHub Login: @mumian
Microsoft Alias: jgao

@connec - thanks for this feedback. I think it makes sense to split array and object. I'll work on it.

@connec - thanks again for this suggestion. The updates have been merged and should be published this afternoon. I moved coalesce to the comparison functions, and json to the object functions. Those two are still a bit tricky, so they may need to be moved again in the future.

#please-close


Some Suggestions to this Repo's ReadMe.md

In DNS, I think that we can use AdGuard DNS or ControlD DNS as both helps block Ads and Tracker at a DNS Level which enhance much more Privacy
For Search Engine, I do highly recommend StartPage as it is great and Private with Google results. If you say it is not private as it was acquired by System1. I will explain Why it can be trusted rather than the event.
I think that you can replace Privacy Badger with uBlock Origin as it blocks more than uBlock Origin.
You can remove HTTPS Everywhere as it is already integrated into brave and also native in Chromium's Code base.
I think you can add a Warning if you use a VPN Decentraleyes is not necessary.

Thanks @Loki-L1130 for the suggestions, I've updated the the guide, feel free to tell any needed improvements/suggestions!


Feature request: Dunst integration

It would be good to provide notification syscalls like original discord does.
I can make PR for that. But idk if u want to approve it, because of another dependency.
I would like to add the most used notification library "dunst".

Discordo previously had desktop notifications feature using a cross-platform desktop notifications library ― [beeep](https://github.com/gen2brain/beeep. During major code refactor, I temporarily removed desktop notifications configuration as well as the feature; however, I plan to eventually add desktop notifications feature back. How does dunst differ from beeep? I am not really against adding another dependency.

ah sorry i was out of pc. Anyway i guess dunst is overall more popular in unix community for ricing and its more customizable. And yes dunst is for linux only but i can implement another notification library. For that, i can work on beeep implementation. I would like to help u and i would do that clean as possible.


wifibox console: no output; wpa_supplicant repeatedly exits/cannot find interfaces

Description
A clear and concise description of what the problem is.  What is expected from the application?
wifibox console produces no output other than the usual
Connecting, type "~." to leave the session...
Connected
~
[EOT]
Finished.

there is no login prompt.
In addition, dmesg shows repeated exits of wpa_supplicant, this may or may not be related.
Host operating system
Output of uname -a.
FreeBSD freebsdbook 14.0-RELEASE FreeBSD 14.0-RELEASE #0 releng/14.0-n265380-f9716eee8ab4: Fri Nov 10 05:57:23 UTC 2023     root@releng1.nyi.freebsd.org:/usr/obj/usr/src/amd64.amd64/sys/GENERIC amd64
Wireless NIC
Relevant output of pciconf -lv.
none0@pci0:2:0:0:	class=0x028000 rev=0x00 hdr=0x00 vendor=0x14c3 device=0x7961 subvendor=0x1a3b subdevice=0x4680
    vendor     = 'MEDIATEK Corp.'
    device     = 'MT7921 802.11ax PCI Express Wireless Network Adapter'
    class      = network

Wifibox version
Output of wifibox version.  Note that only the latest version is supported.
wifibox version 0.13.0
Disk image checksum: 94904a08ee902c4a55dd345f8fffa2a96191cc8ad49f24031fe6eaf4acda5d05

Disk image type and version
The kind of VM image in use, e.g. Wifibox/Alpine, and its version.
wifibox-alpine-20240506
Changes to the default configuration files
Include relevant sections from all the configuration files that contain local changes and may help to reproduce the problem.
bhyve.conf:

console=yes
passthru=2/0/0

wpa_supplicant.conf:
network={
	ssid="<correct ssid>"
	psk="<correct key>"
	key_mgmt=WPA-PSK
}

Logs
Please copy and paste any relevant log output from the following sources:

/var/log/wifibox.log (with DEBUG logging verbosity)

2024-05-11T14:42:10+0200 DEBUG Program started as /usr/local/sbin/wifibox, with arguments: start
2024-05-11T14:42:10+0200 INFO  Begin: wifibox start
2024-05-11T14:42:10+0200 DEBUG start=GN
2024-05-11T14:42:10+0200 INFO  Creating bridge interface: wifibox0
2024-05-11T14:42:10+0200 DEBUG [ifconfig] wifibox0
2024-05-11T14:42:10+0200 INFO  Linking tap interface to wifibox0: tap0
2024-05-11T14:42:10+0200 INFO  vmm.ko is expected at path: /boot/kernel/vmm.ko
2024-05-11T14:42:10+0200 INFO  vmm.ko is found at path: /boot/kernel/vmm.ko
2024-05-11T14:42:10+0200 DEBUG assert loaded: kmod=vmm, kmod_file=/boot/kernel/vmm.ko
2024-05-11T14:42:10+0200 DEBUG assert hardware support present: iommu=1, amdvi=1
2024-05-11T14:42:10+0200 DEBUG Backends reported by bhyve:
2024-05-11T14:42:10+0200 DEBUG [bhyve] ahci
2024-05-11T14:42:10+0200 DEBUG [bhyve] ahci-hd
2024-05-11T14:42:10+0200 DEBUG [bhyve] ahci-cd
2024-05-11T14:42:10+0200 DEBUG [bhyve] e1000
2024-05-11T14:42:10+0200 DEBUG [bhyve] dummy
2024-05-11T14:42:10+0200 DEBUG [bhyve] fbuf
2024-05-11T14:42:10+0200 DEBUG [bhyve] hda
2024-05-11T14:42:10+0200 DEBUG [bhyve] amd_hostbridge
2024-05-11T14:42:10+0200 DEBUG [bhyve] hostbridge
2024-05-11T14:42:10+0200 DEBUG [bhyve] lpc
2024-05-11T14:42:10+0200 DEBUG [bhyve] nvme
2024-05-11T14:42:10+0200 DEBUG [bhyve] passthru
2024-05-11T14:42:10+0200 DEBUG [bhyve] uart
2024-05-11T14:42:10+0200 DEBUG [bhyve] virtio-9p
2024-05-11T14:42:10+0200 DEBUG [bhyve] virtio-blk
2024-05-11T14:42:10+0200 DEBUG [bhyve] virtio-console
2024-05-11T14:42:10+0200 DEBUG [bhyve] virtio-input
2024-05-11T14:42:10+0200 DEBUG [bhyve] virtio-net
2024-05-11T14:42:10+0200 DEBUG [bhyve] virtio-rnd
2024-05-11T14:42:10+0200 DEBUG [bhyve] virtio-scsi
2024-05-11T14:42:10+0200 DEBUG [bhyve] xhci
2024-05-11T14:42:10+0200 INFO  Bringing up null-modem devices for console connection
2024-05-11T14:42:10+0200 DEBUG assert loaded: kmod=nmdm, kmod_file=nmdm
2024-05-11T14:42:10+0200 INFO  Null-modem devices are available
2024-05-11T14:42:10+0200 INFO  Waiting for bhyve to start up
2024-05-11T14:42:10+0200 DEBUG Program started as /usr/local/sbin/wifibox, with arguments: _manage_vm
2024-05-11T14:42:10+0200 DEBUG assert daemonized: parent=daemon
2024-05-11T14:42:10+0200 INFO  VM manager launched
2024-05-11T14:42:10+0200 INFO  Gathering necessary configuration files for launching the guest
2024-05-11T14:42:10+0200 INFO  Pulling bhyve options from configuration file
2024-05-11T14:42:10+0200 DEBUG cpus=1
2024-05-11T14:42:10+0200 DEBUG memory=128M
2024-05-11T14:42:10+0200 DEBUG passthru=[2/0/0]
2024-05-11T14:42:10+0200 DEBUG console=yes
2024-05-11T14:42:10+0200 DEBUG priority=50
2024-05-11T14:42:10+0200 DEBUG bhyve max cpus=16
2024-05-11T14:42:10+0200 INFO  Guest console is configured to use
2024-05-11T14:42:10+0200 INFO  Passthru devices configured: [2/0/0]
2024-05-11T14:42:10+0200 INFO  PPT driver is configured for pci2:0:0 device
2024-05-11T14:42:10+0200 INFO  tap interface is configured: tap0
2024-05-11T14:42:10+0200 INFO  Launching guest wifibox from /usr/local/share/wifibox with grub-bhyve
2024-05-11T14:42:10+0200 INFO  Application config is found at /usr/local/etc/wifibox/wpa_supplicant
2024-05-11T14:42:10+0200 INFO  Application config will be mounted writeable
2024-05-11T14:42:10+0200 DEBUG Devices: virtio-blk,/usr/local/share/wifibox/disk.img virtio-9p,config=/usr/local/etc/wifibox/appliance,ro virtio-9p,var=/var/run/wifibox/appliance virtio-9p,app_config=/usr/local/etc/wifibox/wpa_supplicant
2024-05-11T14:42:10+0200 DEBUG Arguments:  -S -M 128M -r host -c /dev/nmdm-wifibox.1A -d /usr/local/share/wifibox wifibox
2024-05-11T14:42:10+0200 INFO  Launching guest wifibox from /usr/local/share/wifibox with bhyve
2024-05-11T14:42:10+0200 DEBUG Nice priority: 0
2024-05-11T14:42:10+0200 DEBUG Arguments:  -c 1 -m 128M -AHP -u -S -l com1,/dev/nmdm-wifibox.1A -s 0,hostbridge -s 31,lpc -s 4:0,virtio-blk,/usr/local/share/wifibox/disk.img -s 4:1,virtio-9p,config=/usr/local/etc/wifibox/appliance,ro -s 4:2,virtio-9p,var=/var/run/wifibox/appliance -s 4:3,virtio-9p,app_config=/usr/local/etc/wifibox/wpa_supplicant -s 5:0,e1000,tap0  -s 6:0,passthru,2/0/0 wifibox
2024-05-11T14:42:11+0200 DEBUG [bhyve] rdmsr to register 0xc00000e9 on vcpu 0
2024-05-11T14:42:11+0200 INFO  Guest wifibox has started up
2024-05-11T14:42:11+0200 INFO  Guest is managed by PID 4107
2024-05-11T14:42:11+0200 INFO  Bringing up Unix Domain Socket pass-through
2024-05-11T14:42:11+0200 INFO  Found guest IP address: <IP_ADDRESS>
2024-05-11T14:42:11+0200 INFO  Configured sockets: [path=/var/run/wpa_supplicant/wlan0,user=root,group=0,mode=770,port=1200
path=/var/run/wpa_supplicant/p2p-dev-wlan0,user=root,group=0,mode=770,port=1201]
2024-05-11T14:42:11+0200 INFO  Hooking up <IP_ADDRESS>:1200 as /var/run/wpa_supplicant/wlan0 (root:0@770)
2024-05-11T14:42:11+0200 INFO  Hooking up <IP_ADDRESS>:1201 as /var/run/wpa_supplicant/p2p-dev-wlan0 (root:0@770)
2024-05-11T14:42:11+0200 INFO  End: wifibox start

/var/run/wifibox/appliance/log/dmesg

[    0.227788] loop: module loaded
[    0.228039] virtio_blk virtio0: 1/0/0 default/read/poll queues
[    0.228811] virtio_blk virtio0: [vda] 242688 512-byte logical blocks (124 MB/119 MiB)
[    0.229546] e1000: Intel(R) PRO/1000 Network Driver
[    0.229906] e1000: Copyright (c) 1999-2006 Intel Corporation.
[    0.535915] e1000 0000:00:05.0 eth0: (PCI:33MHz:32-bit) 00:a0:98:8a:05:71
[    0.536368] e1000 0000:00:05.0 eth0: Intel(R) PRO/1000 Network Connection
[    0.536653] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12
[    0.537480] i8042: Warning: Keylock active
[    0.538245] serio: i8042 KBD port at 0x60,0x64 irq 1
[    0.538585] serio: i8042 AUX port at 0x60,0x64 irq 12
[    0.539497] rtc_cmos 00:07: registered as rtc0
[    0.539860] rtc_cmos 00:07: alarms up to one day, y3k, 114 bytes nvram
[    0.540375] Initializing XFRM netlink socket
[    0.540698] NET: Registered PF_PACKET protocol family
[    0.541049] 9pnet: Installing 9P2000 support
[    0.542078] IPI shorthand broadcast: enabled
[    0.544917] registered taskstats version 1
[    0.545203] Loading compiled-in X.509 certificates
[    0.545930] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[    0.546783] Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[    0.547272] Loaded X.509 cert 'wens: 61c038651aabdcf94bd0ac7ff06c7248db18c600'
[    0.547799] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[    0.548380] cfg80211: failed to load regulatory.db
[    0.549172] VFS: Mounted root (squashfs filesystem) readonly on device 254:0.
[    0.549683] devtmpfs: mounted
[    0.549935] Freeing unused kernel image (initmem) memory: 944K
[    0.552673] Write protecting the kernel read-only data: 10240k
[    0.553255] Freeing unused kernel image (rodata/data gap) memory: 348K
[    0.553816] Run /sbin/init as init process
[    0.554011]   with arguments:
[    0.554012]     /sbin/init
[    0.554012]   with environment:
[    0.554012]     HOME=/
[    0.554012]     TERM=linux
[    0.554013]     BOOT_IMAGE=(host)/usr/local/share/wifibox/vmlinuz
[    0.554013]     modules=squashfs
[    0.758706] mt7921e 0000:00:06.0: ASIC revision: 79610010
[    0.845632] mt7921e 0000:00:06.0: HW/SW Version: 0x8a108a10, Build Time:<PHONE_NUMBER>0958a
[    0.845632]
[    0.855491] mt7921e 0000:00:06.0: WM Firmware Version: ____010000, Build Time:<PHONE_NUMBER>1038
[    0.887872] NET: Registered PF_INET6 protocol family
[    0.887975] Segment Routing with IPv6
[    0.887977] In-situ OAM (IOAM) with IPv6

/var/run/wifibox/appliance/log/messages

May 11 12:42:11 wifibox syslog.info syslogd started: BusyBox v1.36.1
May 11 12:42:11 wifibox daemon.err /etc/init.d/wpa_supplicant[969]: Could not find a wireless interface
May 11 12:42:11 wifibox daemon.info supervise-daemon[972]: Supervisor command line: supervise-daemon wpa_supplicant --start --respawn-delay 2 --respawn-max 5 --respawn-period 1800 /sbin/wpa_supplicant -- -c/etc/wpa_supplicant/wpa_supplicant.conf
May 11 12:42:11 wifibox daemon.info supervise-daemon[974]: Child command line: /sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant.conf
May 11 12:42:11 wifibox daemon.warn supervise-daemon[973]: /sbin/wpa_supplicant, pid 974, exited with return code 255
May 11 12:42:11 wifibox daemon.info dhcpcd[1074]: dhcpcd-10.0.6 starting
May 11 12:42:11 wifibox daemon.err dhcpcd[1077]: wlan0: interface not found
May 11 12:42:11 wifibox daemon.info dhcpcd[1077]: dhcpcd exited
May 11 12:42:11 wifibox daemon.err dhcpcd[1098]: dhcpcd is not running
May 11 12:42:11 wifibox daemon.info radvd[1135]: version 2.19 started
May 11 12:42:11 wifibox daemon.info supervise-daemon[1161]: Supervisor command line: supervise-daemon uds_passthru --start --respawn-delay 2 --respawn-max 5 --respawn-period 1800 /sbin/uds_passthru --
May 11 12:42:11 wifibox daemon.info supervise-daemon[1163]: Child command line: /sbin/uds_passthru
May 11 12:42:11 wifibox daemon.info : starting pid 1168, tty '': '/sbin/openrc default'
May 11 12:42:11 wifibox daemon.debug uds_passthru[1163]: Configuration: network=<IP_ADDRESS>:<IP_ADDRESS>, sockets=[path=/var/run/wpa_supplicant/wlan0,user=root,group=0,mode=770,port=1200 path=/var/run/wpa_supplicant/p2p-dev-wlan0,user=root,group=0,mode=770,port=1201]
May 11 12:42:11 wifibox daemon.warn uds_passthru[1163]: /var/run/wpa_supplicant/wlan0 is not available, skipping.
May 11 12:42:11 wifibox daemon.warn uds_passthru[1163]: /var/run/wpa_supplicant/p2p-dev-wlan0 is not available, skipping.
May 11 12:42:11 wifibox daemon.info uds_passthru[1163]: Waiting for PID 1173 to stop.
May 11 12:42:11 wifibox cron.info crond[1220]: crond (busybox 1.36.1) started, log level 8
May 11 12:42:11 wifibox daemon.info udhcpd[1274]: started, v1.36.1
May 11 12:42:11 wifibox daemon.info : starting pid 1281, tty '/dev/ttyS0': '/sbin/getty -L ttyS0 115200 vt100'
May 11 12:42:13 wifibox daemon.info supervise-daemon[1289]: Child command line: /sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant.conf
May 11 12:42:13 wifibox daemon.warn supervise-daemon[973]: /sbin/wpa_supplicant, pid 1289, exited with return code 255
May 11 12:42:15 wifibox daemon.info supervise-daemon[1291]: Child command line: /sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant.conf
May 11 12:42:15 wifibox daemon.warn supervise-daemon[973]: /sbin/wpa_supplicant, pid 1291, exited with return code 255
May 11 12:42:17 wifibox daemon.info supervise-daemon[1293]: Child command line: /sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant.conf
May 11 12:42:17 wifibox daemon.warn supervise-daemon[973]: /sbin/wpa_supplicant, pid 1293, exited with return code 255
May 11 12:42:19 wifibox daemon.info supervise-daemon[1294]: Child command line: /sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant.conf
May 11 12:42:19 wifibox daemon.warn supervise-daemon[973]: /sbin/wpa_supplicant, pid 1294, exited with return code 255
May 11 12:42:21 wifibox daemon.info supervise-daemon[1296]: Child command line: /sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant.conf
May 11 12:42:21 wifibox daemon.warn supervise-daemon[973]: /sbin/wpa_supplicant, pid 1296, exited with return code 255
May 11 12:42:21 wifibox daemon.warn supervise-daemon[973]: respawned "/sbin/wpa_supplicant" too many times, exiting
May 11 12:43:40 wifibox daemon.info udhcpd[1274]: sending ACK to <IP_ADDRESS>
May 11 12:45:00 wifibox cron.info crond[1220]: USER root pid 1304 cmd run-parts /etc/periodic/15min

Additional context
Add any other context about the problem here that might help the investigation.
I've tried both wifibox-alpine and wifibox-mediatek guests, and both behave this way.
Have you tried to turn it on and off?

[X] Yes, I have read all the manual pages first!

The difference between the wifibox-alpine and wifibox-alpine-mediatek guests is not that big: the latter image is slimmer because it contains the firmware files for the Mediatek cards only.  That is basically a flavor of the former.
There must be some problem with starting up the mt7921e driver because the wlan0 device could not be created on the guest.  A reason for the guest being unresponsive when attached by wifibox console might be that it freezes on boot.  However, according to the logs, the guest can somehow boot up.  Another possible reason might be that the nmdm driver does not properly and the communication itself becomes stuck.
It might be curious to try the following.  In one of the terminals, start the wifibox console command and leave it running.  Then, in a different terminal, use the following command to restart the guest:
# wifibox restart guest

You should see the boot messages of Linux kernel on the terminal where the console is running.
Also, cannot you see any odd message in the logs of the host?

The difference between the wifibox-alpine and wifibox-alpine-mediatek guests is not that big: the latter image is slimmer because it contains the firmware files for the Mediatek cards only. That is basically a flavor of the former.
Thank you, this was not entirely clear to me but now I know :)
It might be curious to try the following. In one of the terminals, start the wifibox console command and leave it running. Then, in a different terminal, use the following command to restart the guest:
# wifibox restart guest

You should see the boot messages of Linux kernel on the terminal where the console is running.
Indeed I can, and it even lets me log in apparently. Relevant information from the boot messages might include the following:

* Could not find a wireless interface
 * /var/run/wpa_supplicant: creating directory
 * Starting WPA Supplicant ... [ ok ]
 * Starting networking ... *   lo ... [ ok ]
 *   eth0 ... [ ok ]
 *   wlan0 ...ip: SIOCGIFFLAGS: No such device
dhcpcd-10.0.6 starting
DUID 00:01:00:01:2d:d2:8e:06:00:a0:98:8a:05:71
wlan0: interface not found
dhcpcd exited

Running lspci -k on the guest appears to show that the NIC is passed through and picked up by mt7921e:
wifibox:~# lspci -k
00:1f.0 Class 0601: 8086:7000
00:04.2 Class 0100: 1af4:1009 virtio-pci
00:04.0 Class 0100: 1af4:1001 virtio-pci
00:00.0 Class 0600: 1275:1275
00:04.3 Class 0100: 1af4:1009 virtio-pci
00:06.0 Class 0280: 14c3:7961 mt7921e
00:04.1 Class 0100: 1af4:1009 virtio-pci
00:05.0 Class 0200: 8086:100f e1000

however, the interfacewlan0 is not up as already indicated by the boot log, confirmed by ifconfig:
wifibox:~# ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 90:E8:68:43:F1:69
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Also, cannot you see any odd message in the logs of the host?
Yes, this dmesg line seems odd, since the output from pciconf -lv indicates the card is at pci0:2:0:0, though I might be off here:

pci2: <network> at device 0.0 (no driver attached)

This mirrors another odd warning when restarting wifibox:
Restarting wifibox....WARNING: PPT device pci2:0:0 could not be destroyed.
.....OK

Here again, shouldn't the device be pci0:2:0:0? The manpages indicate that my passthru notation (see above) is correct for this device...

Thanks for the inputs.  If you can see the card in the lspci -k output with the driver attached on the guest, it means that you did everything right on your side.
The no driver attached message in the host's dmesg is completely normal.  However, the could not be destroyed message in the Wifibox log is a bit worrisome.  It is worth to know that the relationship of bhyve with Mediatek cards can be flaky, see https://github.com/pgj/freebsd-wifibox/issues/73 for the details.
I am a bit confused about the ifconfig output on the guest.  So you say that there is the wlan0 device but it is not in the "up" state?  You can try to initiate the reconfiguration of the network interface on wifibox console with the following command:
wifibox# service networking restart

It would be interesting to see what wpa_supplicant actually complains about.  You can get more logs from it by stopping the related the service on the guest:
wifibox# service wpa_supplicant stop

and then start WPA Supplicant in the foreground (to watch the logs):
wifibox# wpa_supplicant -iwlan0 -dd -c/etc/wpa_supplicant/wpa_supplicant.conf

This might also be caused by some regression in the Linux kernel.  If you switch to the net/wifibox-alpine port, you can optionally select Linux 6.8 (as "edge") in the options for building the guest image and test with that if the driver (and the related networking stack) of that version works better for you.
Besides all these, you can experiment with pre-configuring the ppt (PCI pass-through) driver for the device and boot the host that way.  This requires the loader.conf to have the following line:
pptdevs="2/0/0"

There is a slight chance the issue shows up for others as well.  However, I am not sure if the problem is with the init order of the guest.  The wpa_supplicant service declares that it has to be started before networking (i.e. provider of net).
What I can currently image is that during the boot process, WPA Supplicant fails to find the wlan0 device, it cannot start up, and therefore the networking service fails to work as well.  But if wpa_supplicant is restarted at some later point, everything starts to work.  Maybe the mt7921e driver takes a long time to initialize?  What are the timestamps and messages for that in the dmesg output?  Could you please add the output of the following command:
wifibox# dmesg | fgrep mt7921e

By the way, I noticed in the logs that your wireless network uses the <IP_ADDRESS>/24, which is the same as what Wifibox uses by default to communicate with the host.  This all appears to be working, but maybe it is worth to tell Wifibox to use a different subnet (e.g. <IP_ADDRESS>/24 to avoid any potential problems caused by this overlap.

Greetings,
I can verify the same behavior here with the same Mediatek card, wifibox 0.13.0.
Enabling the console and launching manually (with some delay, I guess) wpa_supplicant, then dhcpcd (interestingly, neither udhcpc nor udhcpc6 work, though BusyBox dhcpcd seems to invoke udhcpc), works around the behavior. Maybe a delayed retry (as in https://github.com/pgj/freebsd-wifibox-port/commit/954eff34efe6dd970470612602369dbdedbec096) would address the problem?
Alternatively, is there a mechanism through which one can specify a set of commands to be launched on the guest start (and possibly even on suspend/resume)? Since the guest image is read-only, I can’t modify the guest’s rc.conf or .bashrc or anything.
The two ways I could see this implemented would be either as a squashfs overlay (think Puppy Linux or any LiveUSB with additional persistent storage), or more simply a script passed through a bhyve arg or variable (like with some Docker images), much like the passthru option setting. But I may be reinventing the wheel here...

Hi @vvillenave, thanks for the confirmation.  The delayed retry (of WPA Supplicant) is already part of the development version of the port (as you pointed out above) so you or @sk-spr can try that.
There is no explicit support for specifying commands on start/stop/suspend/resume for the guest.  First of all, the guest does not deal with suspend/resume, that is always translated to start/stop (host suspend: guest stop or no-op, host resume: guest start or restart).
Second, even though the guest image is read-only, you can modify how it is constructed in the net/wifibox-alpine port.  For example, the pre-build target in the port's Makefile can be used to add extra files for the guest's root file system (which is sourced from _GUESTDIR during the build process).  But, since the whole construction is based on the use of Alpine Linux packages for modularity, it is often better to create your own package with the planned modifications and add the package to the list of packages to use (_PACKAGES variable).  Even further, the boot/shutdown process could be influenced by creating OpenRC scripts and hooking them up (e.g. _BOOT_SERVICES variable).  An example of that is the Wifibox-custom uds_passthru package.
But in cases of problems like this one, it is better to find a general solution.  That is, have it reported here and create a solution together that works for everybody.  For example, the delayed retry I implemented for WPA Supplicant was designed in a way to possibly cover other scenarios, and with some luck, it can even provide a solution for this issue as well.

@sk-spr @vvillenave please try the latest development version of Wifibox, mostly notably the 20240821 (or later) version of the net/wifibox-alpine port from here:
https://github.com/pgj/freebsd-wifibox-port
I am inclined to assume that the exponential back-off for WPA supplicant (https://github.com/pgj/freebsd-wifibox-alpine/pull/25) solves the issue though.  Please check it and let me know in the next two weeks.  Then I am going to close this ticket as resolved unless I hear back otherwise.

@sk-spr @vvillenave please try the latest development version of Wifibox, mostly notably the 20240821 (or later) version of the net/wifibox-alpine port from here:
https://github.com/pgj/freebsd-wifibox-port
I am inclined to assume that the exponential back-off for WPA supplicant (https://github.com/pgj/freebsd-wifibox-alpine/pull/25) solves the issue though.  Please check it and let me know in the next two weeks.  Then I am going to close this ticket as resolved unless I hear back otherwise.

I will try and find the install, though I suspect it is on an external SSD that I may have wiped. I will let you know if it works on the case I still have the install around.

@pgj After reinstalling FreeBSD because I had indeed wiped the drive with the previous install, and setting up wifibox again, it appears to be fully working (!)
@vvillenave if it's working for you as well, I'd say this issue is ready to be closed 🤩

All right folks, based on the replies I have got so far, I assume that this issue has been fixed.  Remember though that you can always come back and create a new ticket if the problem still persists in some form.

@pgj I can confirm that the updated Alpine image works out-of-the-box. Thanks very much!


[Publish Pipeline Artifact] BUG: Fails on warning.

Required Information
Entering this information will route you directly to the right team and expedite traction.
Question, Bug, or Feature?
 Throwing. Details:
2020-04-24T19:05:21.9129789Z No LastRequestResponse on exception VssServiceException: Adding of root failed because dedup has expired. Dedup ID: 469A38C6E67EE2CBD10F8E0BA9AEA8D8D2A41228678916AADED1BDCA618857A7 Microsoft.VisualStudio.Services.Common.VssServiceException: Adding of root failed because dedup has expired. Dedup ID: 469A38C6E67EE2CBD10F8E0BA9AEA8D8D2A41228678916AADED1BDCA618857A7
2020-04-24T19:05:21.9158436Z    at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.HandleResponseAsync(HttpResponseMessage response, CancellationToken cancellationToken)
2020-04-24T19:05:21.9163512Z    at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.SendAsync(HttpRequestMessage message, HttpCompletionOption completionOption, Object userState, CancellationToken cancellationToken)
2020-04-24T19:05:21.9164773Z    at Microsoft.TeamFoundation.Build.WebApi.BuildHttpClientCompatBase.SendAsync[T](HttpRequestMessage message, Object userState, CancellationToken cancellationToken, Func`3 processResponse)
2020-04-24T19:05:21.9166291Z    at Microsoft.TeamFoundation.Build.WebApi.BuildHttpClientCompatBase.SendAsync[T](HttpMethod method, IEnumerable`1 additionalHeaders, Guid locationId, Object routeValues, ApiResourceVersion version, HttpContent content, IEnumerable`1 queryParameters, Object userState, CancellationToken cancellationToken, Func`3 processResponse)
2020-04-24T19:05:21.9168169Z    at Agent.Plugins.PipelineArtifact.BuildServer.AssociateArtifactAsync(Guid projectId, Int32 pipelineId, String name, String jobId, String type, String data, Dictionary`2 propertiesDictionary, CancellationToken cancellationToken)
2020-04-24T19:05:21.9170952Z    at Agent.Plugins.PipelineArtifact.PipelineArtifactServer.<>c__DisplayClass2_1.<<UploadAsync>b__2>d.MoveNext()
2020-04-24T19:05:21.9171659Z --- End of stack trace from previous location where exception was thrown ---
2020-04-24T19:05:21.9172343Z    at Microsoft.VisualStudio.Services.Content.Common.AsyncHttpRetryHelper`1.InvokeAsync(CancellationToken cancellationToken)
2020-04-24T19:05:21.9184803Z Information, ApplicationInsightsTelemetrySender correlated 2 events with X-TFS-Session c6d4deec-3098-4f09-8271-23f11dec733d
2020-04-24T19:05:21.9233759Z ##[error]Adding of root failed because dedup has expired. Dedup ID: 469A38C6E67EE2CBD10F8E0BA9AEA8D8D2A41228678916AADED1BDCA618857A7
2020-04-24T19:05:22.1615785Z ##[section]Finishing: Publish Pipeline Artifact Sys

Thanks for reporting. Assigning to @fadnavistanmay who is maintaining the Pipeline Artifact tasks to investigate the issue.

Failed to reply to this thread. If you check the timestamp, there is a 4 day delay between when the job started, and the files were processed. Something definitely is not right with the agent for the particular run. I am going to close this as s one off issue.


Taking account of the very last waypoint buffer

This PR is a small hotfix that lets the vehicle go exactly to the desired location instead of stopping before reaching the destination.
Previously the local planner stops sending control commands when _waypoints_queue is empty. However, there is also a _waypoint_buffer which is not empty. The very last round, when the vehicle reaches the desired destination, not only the _waypoints_queue  is empty but also the  _waypoint_buffer  must be empty as well. The way it is now, there is always a bias of _self.buffer_size number of waypoints to the desired destination.
Where has this been tested?

Platform(s): Ubuntu 18.04
Python version(s): 3.6
Unreal Engine version(s): 4.22

Possible Drawbacks
I could not find any usage of function 'def done(self):'. This function might be a deprecated function. Nevertheless, I have also updated the function to return the correct value.
Previously the second part was always True: if len(self._waypoints_queue) == 0 then all([distance_vehicle(wp, vehicle_transform) < self._min_distance for wp in self._waypoints_queue]) is always True. So there is no point in having the second part.
    return len(self._waypoints_queue) == 0 and all([distance_vehicle(wp, vehicle_transform) < self._min_distance for wp in self._waypoints_queue]

This change is

Thanks @a-jahani for your contribution! @pravinblaze this looks like a straightforward PR, could you please take care of the review?

The LocalPlanner.done() is used in BasicAgent to check if the agent has reached it's intended destination.

Tested, working as expected. Looks neat!

PythonAPI/carla/agents/navigation/local_planner.py, line 246 at r2 (raw file):
Previously, pravinblaze (Praveen Kumar) wrote…
Yup, easier this way.

Done.

PythonAPI/carla/agents/navigation/local_planner.py, line 202 at r2 (raw file):
Previously, jahaniam (Ali Jahani) wrote…
Sounds good. Thank you for your code in the first place. It looks clean and easy to read.

Done.

@jahaniam if you solve the conflicts @bernatx will do the merge.

Yeah. I think everything should be good now. Feel free to merge