Possible memory usage issue with KiCAD

Regression?
No
System Info and Version
 System/Version info
Hyprland, built from branch  at commit 918d8340afd652b011b937d29d5eea0be08467f5  (flake.lock: update).
Date: Tue Jun 25 12:06:02 2024
Tag: v0.41.2, commits: 4886

flags: (if any)

System Information:
System name: Linux
Node name: cascade-ws
Release: 6.9.8-zen1-1-zen
Version: #1 ZEN SMP PREEMPT_DYNAMIC Fri, 05 Jul 2024 22:11:01 +0000

GPU information:
26:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU106 [GeForce RTX 2060 SUPER] [10de:1f06] (rev a1) (prog-if 00 [VGA controller])

os-release: NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo

plugins:

======Config-Start======

Config File: /home/cascade/.config/hypr/hyprland.conf: Read Succeeded
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor = HDMI-A-2, highrr, 0x0, 1.0
monitor = Unknown-1, highrr, -1920x1080, 1.0
# monitor = , preferred, auto, 1.0

xwayland {
    force_zero_scaling = true
}

# See https://wiki.hyprland.org/Configuring/Keywords/ for more

# Execute your favorite apps at launch
# exec-once = waybar & hyprpaper & firefox

# Source a file (multi-file configs)
# source = ~/.config/hypr/myColors.conf

# Some default env vars.
env = XCURSOR_SIZE,32

# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
    kb_layout = us
    kb_variant =
    kb_model =
    follow_mouse = 1

    touchpad {
        natural_scroll = yes
    }

    tablet {
        region_position = 416 0
        region_size = 1728 1080
    }

    sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
    accel_profile = flat
}

general {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more

    gaps_in = 4
    gaps_out = 8
    border_size = 1
    col.active_border = rgba(dbe3c8ff)
    col.inactive_border = rgba(2222227f)
    allow_tearing = true

    layout = dwindle
}

env = WLR_DRM_NO_ATOMIC,1

windowrulev2 = immediate, class:^(cs2)$

decoration {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more

    rounding = 20

    drop_shadow = true
    col.shadow = rgba(0000005f)
    col.shadow_inactive = rgba(0000003f)
    shadow_range = 25

    blur {
        enabled = true
        size = 2
        passes = 2
        contrast = 1.2
    }
}

animations {
    enabled = true

    # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more

    bezier = myBezier, 0.05, 0.9, 0.1, 1.05

    animation = windowsMove, 1, 7, myBezier
    animation = windowsIn, 1, 3, default, popin 90%
    animation = windowsOut, 1, 2, default, popin 95%
    animation = border, 1, 3, default
    animation = fade, 1, 3, default
    animation = workspaces, 1, 5, default
}

dwindle {
    # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
    pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
    preserve_split = true # you probably want this
    split_width_multiplier = 1.4
}

misc {
    #force_hypr_chan = true
    mouse_move_enables_dpms = true
    key_press_enables_dpms = true
}

# Layer Rules
layerrule = blur, notifications
layerrule = ignorezero, notifications
layerrule = blur, launcher
layerrule = ignorezero, launcher

# Window Rules
windowrulev2 = float,class:(QQ) # QQ Popups
windowrulev2 = float,title:(Volume Control) # Volume Control
windowrulev2 = float,class:(steam) # Steam Popups
windowrulev2 = float,title:(Qt5 Configuration Tool) # Qt5
windowrulev2 = float,title:(Qt6 Configuration Tool) # Qt6
windowrulev2 = float,title:(Fcitx Configuration) # Fcitx Config
windowrulev2 = float,class:(org.gnome.Nautilus) # Nautilus Popups
windowrulev2 = float,class:(firefox),title:(Library) # Firefox Popups
windowrulev2 = float,class:(vlc) # VLC Popups
windowrulev2 = float,class:(qemu.*) # QEMU
windowrulev2 = float,class:(org.telegram.desktop),title:(Media viewer)
windowrulev2 = opacity 1.0,class:(cloudmusic.exe),title:(^$)
# windowrulev2 = opacity 0,class:^(fcitx)$ # Fcitx
windowrulev2 = immediate, class:^(Celeste.bin.x86_64)$
windowrulev2 = immediate, class:^(KSP.x86_64)$
# pinned window
windowrulev2 = bordercolor rgb(598da8) rgb(598da8), pinned:1

# Variables
$proxy_socks5 = socks5://localhost:1080
$proxy_http = http://localhost:1081

# See https://wiki.hyprland.org/Configuring/Keywords/ for more
$mainMod = SUPER

# Function Key bindings
bind = ,xf86audiomute, exec, pactl -- set-sink-mute @DEFAULT_SINK@ toggle
bind = ,xf86audiolowervolume, exec, pactl -- set-sink-volume @DEFAULT_SINK@ -5%
bind = ,xf86audioraisevolume, exec, pactl -- set-sink-volume @DEFAULT_SINK@ +5%
bind = ,xf86audiomicmute, exec, pactl -- set-source-mute @DEFAULT_SOURCE@ toggle
bind = ,xf86monbrightnessdown, exec, blight -d backlight/amdgpu_bl1 set -25.5
bind = ,xf86monbrightnessup, exec, blight -d backlight/amdgpu_bl1 set +25.5

# Hyprland hotkeys
bind = $mainMod, C, killactive,
bind = $mainMod, T, exec, alacritty
bind = $mainMod, M, exit,
bind = $mainMod, E, exec, nautilus --new-window
bind = $mainMod, V, togglefloating,
bind = $mainMod, R, exec, tofi-drun | xargs hyprctl dispatch exec -- ALL_PROXY=$proxy
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, togglesplit, # dwindle
bind = $mainMod, F, fullscreen
bind = $mainMod, U, bringactivetotop
bind = $mainMod, O, exec, dpms, on
bind = $mainMod, Z, pin

# Hyprland some reload
bind = $mainMod CTRL ALT, R, exec, killall waybar; waybar

# Screenshot
bind = $mainMod SHIFT, S, exec, grim -g "$(slurp)" - | wl-copy
bind = $mainMod SHIFT, W, exec, grim -g "$(hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"')" - | wl-copy
bind = ,print , exec, grim - | wl-copy

# OBS
bind = $mainMod, HOME, exec, obs-cli recording start --host <IP_ADDRESS> --port 50000
bind = $mainMod, END, exec, obs-cli recording stop --host <IP_ADDRESS> --port 50000

# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d

$switch_script = /home/cascade/.config/hypr/switch_workspace.sh

# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, exec, $switch_script switch 1
bind = $mainMod, 2, exec, $switch_script switch 2
bind = $mainMod, 3, exec, $switch_script switch 3
bind = $mainMod, 4, exec, $switch_script switch 4
bind = $mainMod, 5, exec, $switch_script switch 5
bind = $mainMod, 6, exec, $switch_script switch 6
bind = $mainMod, 7, exec, $switch_script switch 7
bind = $mainMod, 8, exec, $switch_script switch 8
bind = $mainMod, 9, exec, $switch_script switch 9
bind = $mainMod, 0, exec, $switch_script switch 10
bind = $mainMod, X, togglespecialworkspace

# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, exec, $switch_script move 1
bind = $mainMod SHIFT, 2, exec, $switch_script move 2
bind = $mainMod SHIFT, 3, exec, $switch_script move 3
bind = $mainMod SHIFT, 4, exec, $switch_script move 4
bind = $mainMod SHIFT, 5, exec, $switch_script move 5
bind = $mainMod SHIFT, 6, exec, $switch_script move 6
bind = $mainMod SHIFT, 7, exec, $switch_script move 7
bind = $mainMod SHIFT, 8, exec, $switch_script move 8
bind = $mainMod SHIFT, 9, exec, $switch_script move 9
bind = $mainMod SHIFT, 0, exec, $switch_script move 10
bind = $mainMod SHIFT, X, movetoworkspace, special

bind = $mainMod SHIFT, comma, movecurrentworkspacetomonitor, l
bind = $mainMod SHIFT, period, movecurrentworkspacetomonitor, r

workspace = r[1-5],monitor:ID,HDMI-A-2
workspace = r[6-10],monitor:ID,Unknown-1

# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1

# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow

# Input Methods
env = XMODIFIERS, @im=fcitx
# This line is removed since it causes GTK applications crash (if without Wayland support)
# env = GTK_IM_MODULE, wayland
# env = QT_IM_MODULE, wayland
env = SDL_IM_MODULE, fcitx

# SDL wayland
# This is deprecated since many clients does not support wayland
# env = SDL_VIDEODRIVER, "wayland,x11"

# NVIDIA Fix
env = LIBVA_DRIVER_NAME, nvidia
env = XDG_SESSION_TYPE, wayland
env = GBM_BACKEND, nvidia-drm
env = __GLX_VENDOR_LIBRARY_NAME, nvidia
env = WLR_NO_HARDWARE_CURSORS, 1

# Other Environment
env = QT_QPA_PLATFORMTHEME, qt5ct

# Proxy
env = ALL_PROXY, $proxy_socks5
env = HTTP_PROXY, $proxy_http
env = HTTPS_PROXY, $proxy_http
env = all_proxy, $proxy_socks5
env = http_proxy, $proxy_http
env = https_proxy, $proxy_http
env = NO_PROXY, <IP_ADDRESS>/8,<IP_ADDRESS>/8,<IP_ADDRESS>/12,<IP_ADDRESS>/16

# Auto start
exec-once = hyprpaper
exec-once = waybar
exec-once = fcitx5
# exec-once = swayidle timeout 300 'hyprctl dispatcher dpms off'
exec-once = dbus-update-activation-environment --systemd --all

======Config-End========

Content of switch script /home/cascade/.config/hypr/switch_workspace.sh
#!/bin/bash

operation=$1
workspace=$2

monitor_id=$(hyprctl activeworkspace | grep "monitorID" | awk '{print $2}')
workspace_id=$(($monitor_id * 10 + $workspace))
echo "Final Operation: $operation to $workspace_id"

if [[ $operation == "switch" ]]; then
	# hyprctl dispatch moveworkspacetomonitor $workspace_id $monitor_id;
	hyprctl dispatch workspace $workspace_id;
fi
if [[ $operation == "move" ]]; then
	# hyprctl dispatch moveworkspacetomonitor $workspace_id $monitor_id;
	hyprctl dispatch movetoworkspace $workspace_id;
fi

Description
When selecting which symbol to add in KiCAD eeschema (KiCAD 8.0.3), RAM/VRAM usage of Hyprland rapidly rises and doesn't drop. Each time you select a new symbol, RAM usage of Hyprland rises for about 10 MB.
After fully closing KiCAD, memory usage drops to normal level.
It's also reported that KiCAD 8.0.3 have a possible memory leakage issue, but when I was reproducing this issue, memory usage of KiCAD didn't rise.
How to reproduce

Open KiCAD Schematic Editor (eescheme)
Press A or click "Add Symbol" button. A window should pop up.
Randomly click items on the left side repeatedly, memory usage of Hyprland rises for about 10 MB.

Crash reports, logs, images, videos
No response

I tried reproducing this problem on sway and older versions of Hyprland. This issue can not be reproduced on sway and Hyprland v0.39.1. Trying to bisect now.

I tried bisect and found out the first bad commit is 6967a31450441fc5605c05db6f65505dace4b263.

I assume kicad is xwayland? in that case dup of #6584

I assume kicad is xwayland? in that case dup of #6584

KiCAD doesn't run on XWayland, it's Wayland native. So I don't think it's a problem related to XWayland.
Window 58fe2d0e2ab0 -> Choose Footprint (13802 items loaded):
	mapped: 1
	hidden: 0
	at: 1173,75
	size: 1950,1035
	workspace: 1 (1)
	floating: 1
	pseudo: 0
	monitor: 0
	class: kicad
	title: Choose Footprint (13802 items loaded)
	initialClass: kicad
	initialTitle: Choose Footprint (13802 items loaded)
	pid: 2257801
	xwayland: 0
	pinned: 0
	fullscreen: 0
	fullscreenmode: 0
	fakefullscreen: 0
	grouped: 0
	tags:
	swallowing: 0
	focusHistoryID: 1

is it ram or vram? If VRAM, are you sure it's not just lazy freeing by the driver?

is it ram or vram? If VRAM, are you sure it's not just lazy freeing by the driver?

Both RAM and VRAM. But it seems that the RAM usage issue is more severe than VRAM.
I didn't pay much attention to VRAM, so I will reproduce this and check VRAM usage later.

can you test under #6608?

can you test under #6608?

Tested under aquamarine branch 5b1400f, this issue still exists.

patch.txt
try this patch

patch.txt try this patch

Tested on e8374e0 with this patch, but issue still exists.

This is a KiCAD issue (and shm leak)
Sway itself doesn't leak likely because IIRC sway does lazy alloc but it's definitely KiCad and it does the same (leaky) behavior on sway and hyprland:
[2809502.700] {Default Queue}  -> wl_shm#7.create_pool(new id wl_shm_pool#125, fd 21, 2393600)
[2809502.704] {Default Queue}  -> wl_shm_pool#125.create_buffer(new id wl_buffer#126, 0, 880, 680, 3520, 0)

This buffer created is never referenced again (and neither is the pool) and KiCAD keeps creating them, thus having Hyprland allocate memory for it, thus increasing the VmRSS.
With sway, the leak is still there, but it will likely show up only on KiCAD's memory usage because it's only shared mem.


Title: Want to add a Nice Restaurant Management System Desktop Application in Python GUI.

Is your feature request related to a problem? Please describe.
==========        Small  Description about the project      ==============
The project name is Restaurant Management System using python.
You can add items like Drinks and Foods.
Get the total amount of Drinks and Foods.
Get the bill of the service charged, paid tax, and at last get the total bills include service charged, tax and drinks and food you order.
In this project a small calculator where you can calculate simple operations.
In this project you can save the bill receipt , send the bill on your mobile phone.
=======================================================
================== Features of the project ==================

Get the total cost of drinks & foods separate
Get the total bill include with tax charges and service charges.

You can save the receipt of the bill.
You can send the bill on your mobile phone.
Reset all the bill
Great Validation on this application.
Exit Features in the application.

======================================================
===============        SMS Feature   ==========================
To get the sms feature on this project where you can send bill on your mobile number through sms.
Go the offical website of           www.fast2sms.com          and signup here to get the free api.
copy the api and paste in  api variable in a  send() function code..
=====================================================

Describe the solution you'd like.
The project name is Restaurant Management System using python GUI
Describe alternatives you've considered.
I will think an alternative about it
Add any other context or screenshots about the feature request here.

@Kushal997-das please assign me

@Kushal997-das can you tell why you closed this?


Multi-Core support (Multiple servers generating)

Most software runs one minecraft server and generates map there.
Could you implement mult-core support? For example, start 4 servers and tell each to load different chunk. when servers are finished, merge map and continue on.
This will allow using multiple cores and will greatily speed up huge map preloading on 8 or 16 core server.

Nah, sorry.

Normally, the Minecraft server will use multiple threads as it sees fit, so it should be multi-threaded. (Maybe there's some command line flags for?)
Even though world generation may use a lot of CPU, the main bottleneck usually is your disk write speed, so multiple threads won't gain you much.
Merging worlds opens up a whole new can of worms, which would make this software even less stable than it currently is now. I did a project a while back where I copied chunks from one world to another (without changing them), and even though the patched world seemed perfectly fine to me, Minecraft didn't load those chunks, marked them as corrupted or simply crashed.

If you still want this really badly, you can do it yourself: Subdivide the region you want to generate by a grid of 32x32 chunks. Each 32x32 chunks cell will be stored in a separate region file (read up the Minecraft wiki on the Anvil format if this is new to you). Each of those cells may be generated independently from all the others, so you can use up to n server instances for n regions. Once finished, you can copy all those region files together into one merged world and it should work.


[Bug] Biome blending options not working correctly

Pre-Issue Checklist

[x] I have checked that I am on the latest version of Terra.
[x] I have searched the github issue tracker for similar issues, including closed ones.
[x] I have made sure that this is not a bug with another mod or plugin, and it is Terra that is causing the issue.
[x] I have checked that this is an issue with Terra and not an issue with the pack I am using.
[x] I have filled out and provided all the appropriate information.

Environment

Name
Value

Terra Version
5.4.1 BETA

Platform/Platform Version
Paper

Any External Plugins or Mods
None

Terra Packs In Use
My own

Terra Addons In Use
None

Issue Description
When I set biome blending options that are higher than default ones, e.g. distance: 6, step: 6, then "spikes" appear at the border of the biome. It must also be a high y position of blocks in biome, e.g. 130+ (comparing to the rest of biomes that have y pos at 64).
This is an example biome config which is causing the problem:
id: MOUNTAINS
vanilla: MOUNTAINS
noise-equation: "-((y / base) ^ 2) + 1 + |noise2(x / 15, z / 15)| / 3 + |noise2(x / 34, z / 34)| / 3 + |noise2(x / 2, z / 2)| / 3"

variables:
  base: 130

blend:
  distance: 7
  step: 12

palette:
  - GRASSY: 255

Broken blending is great so don't fix it.


fix(sbb-toggle-check): scroll into view when focused via tab key

Closes #1639

LGTM, but should we also check other components?

I've checked and I think the only other case where we don't have the input nested in the label is with form fields, but I've tested them and they seem to already work correctly.

Codecov Report

Merging #1643 (06a1f6c) into master (ab917b0) will decrease coverage by 4.79%.
The diff coverage is 50.41%.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@            Coverage Diff             @@
##           master    #1643      +/-   ##
==========================================
- Coverage   54.85%   50.07%   -4.79%
==========================================
  Files          49       79      +30
  Lines        1659     3571    +1912
  Branches      406      965     +559
==========================================
+ Hits          910     1788     +878
- Misses        671     1646     +975
- Partials       78      137      +59

Impacted Files
Coverage Δ

...mponents/sbb-accordion-item/sbb-accordion-item.tsx
0.00% <0.00%> (-37.21%)
:arrow_down:

src/components/sbb-icon/sbb-icon.tsx
91.52% <ø> (ø)

src/components/sbb-image/sbb-image.helper.tsx
0.00% <ø> (-64.52%)
:arrow_down:

src/components/sbb-image/sbb-image.tsx
0.00% <ø> (-62.97%)
:arrow_down:

...mponents/sbb-journey-header/sbb-journey-header.tsx
88.23% <ø> (+1.27%)
:arrow_up:

...onents/sbb-journey-summary/sbb-journey-summary.tsx
80.55% <ø> (ø)

src/components/sbb-link-list/sbb-link-list.tsx
84.00% <ø> (-4.24%)
:arrow_down:

src/components/sbb-link/sbb-link.tsx
60.41% <ø> (-31.02%)
:arrow_down:

src/components/sbb-logo/sbb-logo.tsx
0.00% <ø> (ø)

src/components/sbb-menu-action/sbb-menu-action.tsx
65.21% <ø> (ø)

... and 85 more

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Shifting large bit vectors (width > 64) can sometimes result in unexpected Dart exception.

Describe the bug
When performing a shift operation on a Logic whose width is large (>64), in some cases we get a Dart exception complaining about int vs. BigInt, as follows (including example full stack trace through ROHD libraries):
In this case, the width of the Logic being shifted is 144 (as well as the the width of the Const it is being shifted by). However, the Const value (==32) fits into an int.
Unhandled exception:
Exception: LogicValue width 144 is too long to convert to int. Use toBigInt() instead.
#0      _BigLogicValue.toInt (package:rohd/src/values/big_logic_value.dart:131:7)
#1      LogicValue._shift (package:rohd/src/values/logic_value.dart:1085:24)
#2      LogicValue.<< (package:rohd/src/values/logic_value.dart:1069:44)
#3      new LShift. (package:rohd/src/modules/gates.dart:579:31)
#4      _ShiftGate._execute (package:rohd/src/modules/gates.dart:383:16)
#5      _ShiftGate._setup (package:rohd/src/modules/gates.dart:372:5)
#6      new _ShiftGate (package:rohd/src/modules/gates.dart:367:5)
#7      new LShift (package:rohd/src/modules/gates.dart:579:9)
#8      Logic.<< (package:rohd/src/signals/logic.dart:351:39)
To Reproduce

Create a Logic with a large width (say, 144)
Perform a left shift of that Logic by either an integer or a Const (in the case of Const, use the same width of 144). Note that the in either case the shift amount should/can fit into a int.

Logic test = Logic(name: 'test', width: 144);
Logic shiftTest = Logic(name: 'shiftTest', width: 144);
// test 1
shiftTest <= (test << 32);
// test 2
shiftTest <= (test << Const(32, width: 144));
Expected behavior
This operation should be successful - at least for shift amounts that fit into the int size.
Actual behavior
Dart exception.
Additional: Dart SDK info
No response
Additional: pubspec.yaml
No response
Additional: Context
No response

May be related to #110


Add License

Would you be able to add a License to the project, so others can use it? As it seems, you want everyone to just use the cide as they want, so how about licensing it under the MIT-License https://opensource.org/licenses/MIT ? That would be great!

I just saw that you added it in the hwad if the file. Maybe you can alsi set it in the reposettings

Done!


⚠ Bofrost.fr has degraded performance

In bc06b93, Bofrost.fr (https://www.bofrost.fr) experienced degraded performance:

HTTP code: 200
Response time: 1089 ms

Resolved: Bofrost.fr performance has improved in 094e69c after 6 minutes.


Add support for scan-type: 'sbom'

It would be nice if trivy-action could support vulnerability scanning based on a pre-generated SBOM file. Using the Trivy CLI it is possible
trivy sbom /path/to/cyclonedx.json
https://aquasecurity.github.io/trivy/v0.32/docs/sbom/cyclonedx/
I tried the below configuration with trivy-action but it fails.
      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          scan-type: 'sbom'
          scan-ref: "trivy-sbom.json"
          format: 'sarif'
          output: 'trivy-vuln.sarif'

Looks like the scan-ref value with scan-type: sbom is not passed to the final trivy command. See attached image for details

Hey @luafanti.
The "generating SBOM" feature was added by #129. It's not exactly what you asked for, but here's the documentation.
It should serve as a reference for anyone looking to implement the feature you mentioned, in the future.
Note that Instead of scan-type: 'sbom', you should use scan-type: 'fs'

Hey @luafanti
So, it's a little bit hacky but you can create & scan SBOMs even though it's not listed as something you can do using the action in the same way you would using Trivy on the CLI.
My case was that I wanted to replicate the cli command for generating an SBOM for an image as shown here: `https://aquasecurity.github.io/trivy/v0.39/docs/sbom/spdx/
I've found using fs as the type just scans the repo and that's not what I was looking for. I wanted to essentially replicate what is in that link for image SBOM generation and scanning.
I could use a combination of Syft and Grype for this but I'm a Trivy guy and the CLI supports this so I dug through the entrypoint.sh script. The good news is that no where in it does it check the type and throw anything out that isn't supported so you can do the following:
Generate an SBOM for an image
    - name: Create SBOM
      uses<EMAIL_ADDRESS>      id: create-sbom
      with:
        scan-type: image
        format: spdx-json
        output: "sbom.spdx.json"
        image-ref: "alpine:3.17"

This works because defining a format of spdx or spdx-json disables security scanning by default causing an SBOM to be generated. It create this command and output:
Running trivy with options: trivy image  --format spdx-json --severity  HIGH,CRITICAL --output  sbom.spdx.json  [local/cloud-cli-tools:CN-130-grype-to-trivy](alpine:3.17)

Global options:
INFO	"--format spdx" and "--format spdx-json" disable security scanning

You can then scan the SBOM by passing the file in as the image-ref because again, there are no actual checks done against the image-ref to make sure it's actually an image.
    - name: Scan SBOM
      uses<EMAIL_ADDRESS>      id: scan-sbom
      with:
        scan-type: sbom
        format: json
        image-ref: "sbom.spdx.json"
        output: "sbom-results.json"
        ignore-unfixed: true
        exit-code: '1'

Due to how the CLI works and the script behind this action works, the image just gets dumped at the end of the command so this ends up generating this command:
trivy sbom  --format json --severity  MEDIUM,HIGH,CRITICAL --output  sbom-results.json --exit-code  1 --ignore-unfixed sbom.spdx.json

It'd be nice if this was built into the action and maybe if I have time I'll contribute this but for now, it's something that we can do.
Even something as simple as changing the image-ref input to input-ref would be sufficient. Alternatively you could use inputs.input I guess instead of image-ref. That seems to do the same thing to allow for scanning tgz files.

@drew-viles thanks for the time-saving hack! Much appreciated!


[WIP] Added tailwind:plugin command

This is a POC for allowing plugin vendors to compile css patches used to include their required tailwind css as a seperate file.
The idea being users should not have to recompile the Winter.TailwindUI package to add addtional tailwind css rules for custom plugins, but instead should be able to use the plugin to compile an additional backend.css file specific for their plugin.
Usage:
The target plugin must implement a tailwind.config.js file, however this can be an import of the original. For example:
const config = require('../../winter/tailwindui/tailwind.config.js');

config.content.push('./controllers/example/assets/src/**/*.{vue,htm}');

module.exports = config;

Then run the following:
./artisan tailwind:plugin author.plugin
(I also added support for passing webpack args to mix:compile)
./artisan tailwind:plugin author.plugin -- --stats-children
And a file will be created: author/plugin/assets/dist/css/backend.css which will only include the additional tailwind css rules added by their config extension.
Improvements:
This POC is implmented using some file hackery, it would be better to extend our mix support so we can inject custom mix configurations, allowing us to configure the tailwind config path. I attempted to do this using the postcss.config.js approach but it didn't seem to work properly.
If we did add the above override we could also dynamically rewrite output instructions, allowing us to not have to move the tailwindui plugin's backend.css file around.
Adding support for watch would also be very nice.
Any thoughts very welcome :)

@jaxwilko I'm pretty sure we do have the ability to set a custom Tailwind config path in the Mix commands.
I'm curious as to what overrides would be needed? Given that the Tailwind config could (mostly) be configured with JSON, we could allow it, but it might not be easy if we want to do dynamic stuff like importing / extending defaults and the like.

@bennothommo the point of the override use case isn't to actually override any of the base styles provided by this plugin, it's moreso to make other plugins play nicer with the default config provided by this plugin in its compiled styles; i.e. to make other plugins more aware of font choices, colours, breakpoints, etc introduced by this plugin.

Can you add a unit test for this?

Can you add a unit test for this?

There are many things that need to be added, but yeah unit tests would be good :)

@bennothommo I wasn't really talking about the tailwind config but more the mix config that is generated from the fixture during the compile. If we had the ability to dynamically extend that in php then we could avoid having to do all the horrible file moving and switching :)

@jaxwilko I'm a bit worried that, in that case, it might be too low level and open to abuse to be modifiable from the PHP side.

Could such customisations be driven from the JS side with a custom webpack config? I know Mix supports that at least.

Workable solution for now until this works well: https://github.com/wintercms/wn-tailwindui-plugin/blob/main/README.md#using-tailwind-in-other-plugins


Tag Cog Bug Fix: Detect Tags Buried in Markdown

When a tag is wrapped in markdown, such as **$clembot** or _$clembot_, the bot won't recognize the presence of the tag in the message.

the regex expects a space before and after, however if that SHOULD be the case is up for discussion


fix core query

Coverage remained the same at 88.889% when pulling 401f87d821d85e05dcd0596b9b2a55b8b668c57f on fix-core-query into 9cb8f1bd3709f33a23d211a68e2561115f071235 on develop.


Update MainActivity.java

Fixing error on sending broadcast.

Hey @MrDoel,
LoginData class is Serializable. It's intended that it's passed as LoginData, but not String


Warnings for "un build" with new babel / core-js versions

With the update to core-js@3 the @babel/preset-env introduced warnings and errors for dependency version mismatches and configuration errors:
https://github.com/babel/babel/pull/7646
See also https://github.com/babel/babel/pull/9716
We should probably set the coreJs option for the @babel/preset-env and print our own warning through the @untool/info package when core-js isn't a top-level dependency in the correct version.
Steps to reproduce:

check out the untool/untool master branch and get to the latest state.
delete yarn.lock file and re-install all packages.
run yarn build and observe the following warning:

untest:info running 'build' in 'development' mode

WARNING: We noticed you're using the `useBuiltIns` option without declaring a core-js version. Currently, we assume version 2.x when no version is passed. Since this default version will likely change in future versions of Babel, we recommend explicitly setting the core-js version you are using via the `corejs` option.

You should also be sure that the version you pass to the `corejs` option matches the version specified in your `package.json`'s `dependencies` section. If it doesn't, you need to run one of the following commands:

  npm install --save core-js@2    npm install --save core-js@3
  yarn add core-js@2              yarn add core-js@3

We already have a check for the right core-js version:
https://github.com/untool/untool/blob/0307e025085252c3ccf3a79787ba65b3a1f97418/packages/webpack/mixins/build/mixin.core.js#L87-L90


Websockets and multiprocessing

Can i use websockets with multiprocessing?
For example, the main process accepts new connections and passes them to other processes. Further work takes place in other processes.

websockets is based on the asyncio module from the standard library. If it's doable with asyncio, then it's probably doable with websockets.
Can you show how you would do this with a basic TCP server (e.g. an echo server) managed by asyncio? Then we can figure out how to adapt for websockets.

@slavestys I had the same question and the answer is yes. Below is a server client example I used to prove it to myself.
@aaugustin I don't know if this is an overly niche example for usage documentation, but personally I would have found it really helpful. Would you consider adding an even simpler example of using concurrent.futures with websockets?
Concurrent  futures ProcessPoolExecutor example:
server.py
#!/usr/bin/env python
import asyncio
import json
import logging
import time
import os
import websockets
from concurrent.futures import ProcessPoolExecutor
from functools import reduce

logging.basicConfig(level=logging.INFO,
                    format='PID %(process)-10d %(asctime)s %(message)s'
                    )

task_executer = ProcessPoolExecutor(max_workers=3)

def data_processor(raw_message):
    pid = os.getpid()

    message = json.loads(raw_message)
    print(f'PID {pid:<10} ID {message["id"]} message deserialized')

    message_data = message['data']
    result = reduce(lambda a,b: int(a)+int(b), message_data)

    # Sleeping just for visualizing things in the logs sake
    time.sleep(1.0)

    print(f'PID {pid:<10} Result {result}')

    result_message = {
        'id': message['id'],
        'result': result
    }

    return result_message

async def producer(websocket, path, message):
    log = logging.getLogger('producer')
    log.info('Received processed message')
    log.info(f'Sending {message["id"]}')

    serialized_message = json.dumps(message)

    await websocket.send(serialized_message)

async def listener(websocket, path):
    tasks =  []

    log = logging.getLogger('listener')
    loop = asyncio.get_running_loop()
    async for json_message in websocket:

        tasks.append(
            loop.run_in_executor(task_executer, data_processor, json_message)
        )
        for task in asyncio.as_completed(tasks):
            _message = await task
            loop.create_task(producer(websocket, path, _message))

try:
    start_server = websockets.serve(listener, "localhost", 8765)

    loop = asyncio.get_event_loop()

    loop.run_until_complete(start_server)
    loop.run_forever()
except Exception as e:
    print(f'Caught exception {e}')
    pass
finally:
    loop.close()

client.py
#!/usr/bin/env python

import asyncio
import websockets
import json
from random import randint

async def send_json(json_message: dict) -> None:
    uri = "ws://localhost:8765"

    # Make string representation
    json_message['data'] = [randint(0, 50) for _ in range(randint(25,100))]
    json_message = json.dumps(json_message)

    async with websockets.connect(uri) as websocket:

        await websocket.send(json_message)
        print(f"> message sent")

        response = await websocket.recv()
        print(f"< {response}")

if __name__ == "__main__":
    import sys

    _id = sys.argv[1]

    json_data = {
        'id': _id,
        'data': None
    }
    asyncio.get_event_loop().run_until_complete(send_json(json_data))

Open a shell session and start server.py, then in another shell run something similar to  for i in $(seq 1 10); do python client.py $i&; done. Basically run a client instance 10 times in the background, setting the id of the sent data to the iterative term of the bash for loop.

Thanks for the suggestion, but this is longer than the kind of examples that I'm willing to maintain in the documentation. Hopefully Google will take other users encountering the same issue to this page!

Thanks for the response @aaugustin, that makes complete sense. Having read my suggestion again, I am now more in line with your opinion. I hope Google does the trick myself as well!

Thanks for the example @aaraney. I converted your example into an echo bot, by commenting out the JSON message parsing and the corresponding operations and returning the incoming message itself. I removed server-side logging as I was testing under heavy concurrency.
Regardless of the concurrency level I use, the server prints messages like this one. The messages print much after the whole echo bot testing is complete and latency (generally decent) has been reported. But they consume screen space and look scary. Is there a resolution?
PID 275455     2022-08-02 17:56:41,241 Task exception was never retrieved
future: <Task finished name='Task-506815' coro=<producer() done, defined at server.py:38> exception=ConnectionClosed('WebSocket connection is closed: code = 1000 (OK), no reason')>
Traceback (most recent call last):
File "server.py", line 45, in producer
await websocket.send(message)
File "/home/ngoel-00171/anaconda3/lib/python3.8/site-packages/websockets/protocol.py", line 462, in send
yield from self.ensure_open()
File "/home/ngoel-00171/anaconda3/lib/python3.8/site-packages/websockets/protocol.py", line 644, in ensure_open
raise ConnectionClosed(
websockets.exceptions.ConnectionClosed: WebSocket connection is closed: code = 1000 (OK), no reason

@aaugustin would you have any suggestions? The client is already given above and here is the modified server:
#!/usr/bin/env python
import asyncio
import time
import os
import websockets
from concurrent.futures import ProcessPoolExecutor
from functools import reduce
task_executer = ProcessPoolExecutor(max_workers=3)
def data_processor(raw_message):
return raw_message
async def producer(websocket, path, message):
await websocket.send(message)
async def listener(websocket, path):
tasks =  []
loop = asyncio.get_running_loop()
async for message in websocket:
tasks.append(
loop.run_in_executor(task_executer, data_processor, message)
)
for task in asyncio.as_completed(tasks):
_message = await task
loop.create_task(producer(websocket, path, _message))
try:
start_server = websockets.serve(listener, "localhost", 3000)
loop = asyncio.get_event_loop()
loop.run_until_complete(start_server)
loop.run_forever()
except Exception as e:
print(f'Caught exception {e}')
pass
finally:
loop.close()

It turns out there is one more issue with the code. The code will work fine as long as there is only one message on a particular connection. if a connection sends a second message on the same connection, the for loop "for task in asyncio.as_completed(tasks):" will run again and that will cause 3 responses to 2 incoming messages.


MODE-2502 Adds retrying logic when a node cannot locate its parent self-reference

The code will now attempt to retry loading the parent and its references after removing it from the workspace cache first. This ensures that a "fresh" copy of the parent is always loaded from the persistent store.

Looks good. Glad it was pretty simple and straightforward.


(L)Built in reports/dashboard from synced reports and feedback to the user

Description:
Mobile users would appreciate feedback on how the app is serving them. This should likely be in the form of a dashboard with some basic reports/charts.
Suggestions:

Item consumption charts/tables (potentially useful for auditors)
Item stock level charts
Number of patients/invoices
Items with low stock/near expiring stock
Time since last stock take (and button to navigate to that stocktake)
Current stock inbound from suppliers
Current stock requested in requisitions

Perhaps a new DB table storing these calculated reports so that temporal information is readily available. This may be similar to what is already implemented in mSupply, so may be worth investigating that to see what can align and be synced.
Comments:
Talk to clients and consultants about what features in this area would benefit them the most. All of this should have a solid design (Open in the public forum) before implementation.

To summarise our discussion yesterday:
We decided to add a new table to mSupply that will sync to mobile site.

Field
Type

ID
Text UUID

storeID
Text UUID

data
json

reportID
Text UUID (FK to dashboard_report.ID

type
Text

title
Text

tabName
Text (optional)

This should be enough to display synced dashboards report in mobile. json data field will be in the same format as current web dashboard.
TODO add link to mSupply Desktop issue


Allow custom prefixes for ignite plugins because of reasons

Dear Ignite team,
recently I built a boilerplate based on your awesome Ignite CLI. I did not use the command line to initiate it but rather forked a different project.
The main focus was custom generators to support a certain file structure.
To my surprise, after adding the plugin in a project, the command line showed the correct generators but with missing descriptions. Also the generators failed silently. Apparently some data from the plugin was picked up correctly but it did not work. What was happening?
Turns out, when generating a plugin, the CLI prefixes its name with ignite-, which is then the package.json name, as outlined here. But his prefix is also a requirement for the plugin to work at all, because when I added it on a whim to my plugin's name - it worked!
This in itself is not much of a problem, merely a small documentation improvement.
But where a problem arises is in the case of scoped npm packages:
Creating a New Scoped Package
To create a new scoped package for your Organization scope, create a directory with the name of the package you would like to create. Navigate into that directory and use this command:

npm init --scope=<org_scope>
To verify that this worked, open the generated package.json with an editor of your choice. You should see that the name of the package will be @org_scope/<pkg_name>.

So if I want to publish an npm package for my organization, wether it be public or private, it can not be done for Ignite plugins, because of the must-have ignite- name prefix requirement.
I would very much like to manage distribute my Ignite plugins for internal use via npm, that's why I would like to ask for a change in the CLI to make this possible.

Absolutely, this is a valid concern. Thanks for bringing it up @monotv !
Do you have a sense for how we might accomplish this? Simplest is probably just to detect the @ at the beginning of the string and don't make any changes to the name.

I'll take a shot at this as time permits

@monotv thank you for your patience. Our team was away on our yearly retreat last week. I'll try to get this done when I can.


V8 commands are broken

https://github.com/nodejs/node-core-utils/pull/722#issuecomment-1706027683
See https://github.com/nodejs/node-v8/actions/runs/6093305552/job/16532764329
I do not have time to fix it until next week.

Backport command is still broken:
$ git node v8 --v8-dir ~/git/chromium/v8/v8 backport 1a3ecc2483b2dba6ab9f7e9f8f4b60dbfef504b7
✔ Update local V8 clone
⠋ V8 commit backport

Exit code: 1


can not compile dlib python with boost 1.6.2 on mac

Hi,
I find an issue with dlib python but I am not sure if this is a bug or it's my problem.
CMake Warning at /usr/local/Cellar/cmake/3.7.1/share/cmake/Modules/FindBoost.cmake:1499 (message):
  No header defined for python-py34; skipping header check
Call Stack (most recent call first):
  /Users/Sam_Du/dlib/dlib/cmake_utils/add_python_module:61 (FIND_PACKAGE)
  CMakeLists.txt:6 (include)
-- Could NOT find Boost
CMake Warning at /usr/local/Cellar/cmake/3.7.1/share/cmake/Modules/FindBoost.cmake:1499 (message):
  No header defined for python-py35; skipping header check
Call Stack (most recent call first):
  /Users/Sam_Du/dlib/dlib/cmake_utils/add_python_module:63 (FIND_PACKAGE)
  CMakeLists.txt:6 (include)
-- Could NOT find Boost
CMake Warning at /usr/local/Cellar/cmake/3.7.1/share/cmake/Modules/FindBoost.cmake:1499 (message):
  No header defined for python3; skipping header check
Call Stack (most recent call first):
  /Users/Sam_Du/dlib/dlib/cmake_utils/add_python_module:66 (FIND_PACKAGE)
  CMakeLists.txt:6 (include)
-- Could NOT find Boost
-- Boost version: 1.62.0
-- Found the following Boost libraries:
--   python
-- Found PythonLibs: /Library/Frameworks/Python.framework/Versions/3.4/lib/libpython3.4.dylib (found suitable version "3.4.4", minimum required is "3.4")
-- USING BOOST_LIBS: /usr/local/lib/libboost_python.dylib
-- USING PYTHON_LIBS: /Library/Frameworks/Python.framework/Versions/3.4/lib/libpython3.4.dylib

I find that in dlib/dlib/cmake_utils/add_python_module line 61, you set Finding the Package version to Boost 1.42.0, and 1.41.0, but latest boost is 1.62.0, so I don't know if it can recognize my boost installed in my Mac.
if (PYTHON3)
59     # On some systems the boost python3 module is called python-py34 so chec    k
60     # for that one first.
61     FIND_PACKAGE(Boost 1.42.0  COMPONENTS python-py34 )
62     if (NOT Boost_FOUND)
63         FIND_PACKAGE(Boost 1.41.0 COMPONENTS python-py35)
64     endif()
65     if (NOT Boost_FOUND)
66         FIND_PACKAGE(Boost 1.41.0 COMPONENTS python3)
67     endif()
68     if (NOT Boost_FOUND)
69         FIND_PACKAGE(Boost 1.41.0 COMPONENTS python)
70     endif()
71     FIND_PACKAGE(PythonLibs 3.4 REQUIRED)

Cheers,

That's not what the error is saying.  What's happened is you don't have boost python installed correctly, or are missing part of it or something.  Try installing it from the boost website.

thank u very much.
2016年12月13日 22:49，"Davis E. King"<EMAIL_ADDRESS>
That's not what the error is saying. What's happened is you don't have
boost python installed correctly, or are missing part of it or something.
Try installing it from the boost website.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/davisking/dlib/issues/358#issuecomment-266887235, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AQoyN77d1EdzKRiNZNSIgrYFR_qegk00ks5rHyDxgaJpZM4LMQQG
.


Use printf fd

We may land it currently, or wait for circt support is ready, either

link to llvm/circt#7983


Part of change from payments to part-payments

@leighmoney tests are fixed, you'll need to re-sync before you do any further work on this branch.


Running tests locally results in error

Describe the bug:
When running go test -v -timeout 99999s per the instructions, I get the following failure:
$ go test -v -timeout 99999s
# github.com/Microsoft/bedrock/test/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json
vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go:115:3: unknown field 'CaseSensitive' in struct literal of type jsoniter.Config
vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go:118:27: cannot use customNumberExtension literal (type *customNumberExtension) as type jsoniter.Extension in argument to config.RegisterExtension:
	*customNumberExtension does not implement jsoniter.Extension (wrong type for CreateDecoder method)
		have CreateDecoder("github.com/Microsoft/bedrock/test/vendor/github.com/modern-go/reflect2".Type) jsoniter.ValDecoder
		want CreateDecoder("github.com/Microsoft/bedrock/test/vendor/github.com/v2pro/plz/reflect2".Type) jsoniter.ValDecoder
FAIL	github.com/Microsoft/bedrock/test [build failed]

To Reproduce:
Follow the instructions in https://github.com/Microsoft/bedrock/tree/master/test
Expected behavior:
Able to run the test locally and replicate CI/CD results

46


is_nullish and NaN

I looked into is_nullish defined in utils.py. It checks whether the value is None, but alo checks whether value != value. Presumably this is to check for NaN. But Python has a better way, since 2.6,
called math.isnan.
Can actual nans appear so easily in Python code? The only mention in the GraphQL spec is to declare NaN nullish. But NaN is more likely in JavaScript as it's a possible result of parseInt. If we can say NaN is so unlikely in Python it cannot normally occur, we could replace is_nullish checks by is None checks, which would be more Pythonic.

I think that this is a good check. The only place NaNs would come from is the scalar parsers.

What do you think is a good check? If NaNs can only come from scalar parsers, does it makes sense to just do a is None check everywhere?

I am agreeing with you. Is None is a good check
Sent from my iPhone

On Oct 1, 2015, at 4:23 AM, Martijn Faassen<EMAIL_ADDRESS>wrote:
What do you think is a good check? If NaNs can only come from scalar parsers, does it makes sense to just do a is None check everywhere?
—
Reply to this email directly or view it on GitHub.


Few questions

Im gonna get straight to the point but i just want to say that im kind of a newbie to exploiting so im sorry if i dont understand much
My first question is what executor should i use now ? i tried the link you gave for electron but it seems down..
Secondly is is this compatible with macos ?
Thirdly is im only here for the autoaim actually so if you have another exploit i could use thats simpler id love to use it
ty !! ^^

Hello, its totally okay if you're confused as of the current state of roblox exploiting has changed for the better. Currently, there are no public exploits because they are all patched. The exploit I used to develop this script (Synapse X) is now out of service permanently and Electron is working to get unpatched. You can hardly find a private exploit which is expensive and unstable with minimal support for crucial functionality.
So to in short, this script at the current state is unusable, you must wait for trusted script execution software to get released and that will eventually happen but we all just need to be patient and make sure its safe to use once it even gets released.
And also, any script supports any platform whether phone or macos or whatever. The script executor needs to support the platform (.exe / .apk / .dmg).


uuid.js breaks concatenated output

Please see #2, which fixes this issue.

Merged. Thank you

New version 0.1.1 is available in both npm and bower
Thank you again!


fix: adding missing components the __init__.py at the components module level

Proposed Changes:

completing the __init__.py the components module level

How did you test it?

ran tests locally

Checklist

I have read the contributors guidelines and the code of conduct
I have updated the related issue with new insights and changes
I added unit tests and updated the docstrings
I've used one of the conventional commit types for my PR title: fix:, feat:, build:, chore:, ci:, docs:, style:, refactor:, perf:, test:.
I documented my code
I ran pre-commit hooks and fixed any issue

Pull Request Test Coverage Report for Build<PHONE_NUMBER>5
Details

5 of 5 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.006%) to 93.979%

Totals

Change from base Build<PHONE_NUMBER>0:
0.006%

Covered Lines:
3356

Relevant Lines:
3571

💛  - Coveralls


Add docker deployment

In this PR:
Adds docker file and compose file for easy docker deployment.
Also adds URL to state with localhost:9000 as fallback, should no environment variable be exported.

Maybe adding a subfolder /deployment for the scripts for help to keep things organized. We would have to call the docker-compose commands in the subdirectory then, tho.


Split ALL reporting content into three objectives (Recommendation, Roadmap, Report)

The reporting ovjectives should be only three
Recommendation Development = recommendation + resources
Roadmap Development = vuln priorization + roadmapping
Reporting Creation =
report creation / templates / boilerplate inclusion +OSINT section

Recommendation and resources moved to new recommendation development section in a28e9f4

Vulnerability prioritization and roadmapping moved to new roadmap development section in 8a9301d

reporting creation moved in b5d9241


Update RegisterAndInvoke to 1.5.8

Update registerandinvoke feature file to 1.5.8
Update Java and Python Test Agents to support 1.5.8

#79

@gregmedd totally agree, I have this in draft because I'm collecting all 1.5.8 changes. Will split once it's ready for review

My recommendation for splitting this PR would be to provide one PR for each 1.5.8/1.6.0 language update, then to add new features as one or a series of pull requests after those.


Feature/csl 2388 test passive wallet

Description
This adds the "wallet worker", a layer that can asynchronously receive blocks and rollbacks from the block listener and apply them to a wallet. The worker is also responsible for batching related operations together. For example, it will combine a sequence of rollbacks and block applications into a single switchToFork operation.
The worker is agnostic about the kind of wallet it is managing; in fact, it does not even have a concept of a wallet. Instead, the worker is configured with a WalletActionInterp that describes how to execute basic wallet API functions such as applyBlocks and switchToFork. This makes it easy to test the wallet worker's behavior in a pure setting, and validate it against simpler operational models (e.g. the Stack operations in WalletUnitTests)
Linked issue
https://iohk.myjetbrains.com/youtrack/issue/CSL-2388
Type of change

[ ~] 🐞 Bug fix (non-breaking change which fixes an issue)
[ x] 🛠 New feature (non-breaking change which adds functionality)
[ ~] ⚠ Breaking change (fix or feature that would cause existing functionality to change)
[ ~] 🏭 Refactoring that does not change existing functionality but does improve things like code readability, structure etc
[ ~] 🔨 New or improved tests for existing code
[ ~] ⛑ git-flow chore (backport, hotfix, etc)

Developer checklist

[ x] I have read the style guide document, and my code follows the code style of this project.
[ x] If my code deals with exceptions, it follows the guidelines.
[ x] I have updated any documentation accordingly, if needed. Documentation changes can be reflected in opening a PR on cardanodocs.com, amending the inline Haddock comments, any relevant README file or one of the document listed in the docs directory.

Testing checklist

[ x] I have added tests to cover my changes.
[ x] All new and existing tests passed.

QA Steps
The wallet worker will be active on any node running with --new-wallet, or can be tested purely as in WalletUnitTests.

I've made a mess of this one; going to close the PR and apply the changes to a new branch.


docs: add alert stories

Preview environments are getting posted here, as soon as they are ready!

I just noticed a display issue with the fixed alert and the alert with action buttons:

@alizedebray Works on my machine.
Does the problem persist?
If "yes": Can you give more context (browser, controls states, ...)?

@alizedebray
I was able to detect the render issue in firefox.
However, this is more of a firefox bug than a issue in our component.
Firefox incorrectly places "fixed" positioned containers, which have a parent with a "transform" statement.
I'll try to find a solution for this, but am not sure if there is one...

@alizedebray Can you please check if the error you reported is now fixed?
Thanks ;)

Thank you Olivier for all these changes!
Last thing, I noticed some unwanted padding around the alerts header:

The problem appears on several components when using portal styles. I created a separate issue #879.


Pooled fibers

(Recreated based off of master now)
This adds support for a variant on TaskFiber which pools fibers for a given thread. This is primarily a triage patch for JRuby 1.7.5+ which isn't currently pooling the threads that back its fibers, resulting in a ridonkulous amount of CPU burn as it spins up a new thread per Fiber. See jruby/jruby#1443 for full details there.
This is the same fiber pattern used by rack-fiber_pool, among others. In my tests, it's completely eliminated the JRuby CPU thrashing, and actually improved performance of Celluloid under MRI, too.
Using this very unrigorous benchmark, I saw the following results:

TaskFiber
TaskPooledFiber

2.0.0-p247
4.08 sec
2.79 sec

jruby-1.7.10
29.5 sec (not a typo)
5.04 sec

@cheald not sure what happened here... why this collected dust. Are you still using this code yourself? I will factor this into #512

We are still using it with great success, yes.

I am very excited to test this myself @cheald and bring it in.

So far, this is amazing. I need to test it further but in my extremely complicated implementation it seems like it's removing issues I've been stuck with congestion-wise for years.

@tarcieri I think this is a separate gem -- celluloid-taskpooledfiber

I'd like to get pools out of core entirely FWIW

Agreed, #512 -- I'm saying this is another pool oriented gem.

I'm all for multiple competing pool gems :wink:

Right on. I have it coexisting well with the existing pool implementation, but it's different enough to where I wouldn't want to lump it into celluloid-pool

That looks good also ( celluloid-coordinator ) -- I'll bring that over also. And I think I may have another myself that I call spans but that can hold a while probably.

Yeah, #478 is looking really good right about now.

Sorry, I've been out all evening. Yes, this is simply an alternate Task type. If it's desired, I can publish it as a gem; shouldn't be too hard.

Dinged you on LinkedIn in on the topic, I was going to ask if you'd mind being attributed and I'd cut the gem for you either stand-alone or in celluloid-extras so it can be actively maintained and kept current with changes as they happen in the API ( unless you are prepared to do that ). There are several pieces of Celluloid being decoupled so it'd be in good company.

Oh, that's fine. I just pushed https://github.com/cheald/celluloid-task-pooled-fiber but I'm happy to nuke it if it's already in motion to be made available somewhere.

BTW, if you want, I'm happy to just give you the commit bit on that repo, too. Whatever's easiest - we're definitely going to be using TaskPooledFiber for a long while, so I will have a vested interest in keeping it maintained. :)

I went ahead and pushed https://rubygems.org/gems/celluloid-task-pooled-fiber - if this ends up getting rolled into another gem I'll just pull it.

The way you've got it now will work out totally fine. I look forward to maintaining this together. I'm very impressed with its performance in my use so far. My own platform is like new, snappier than ever before. Glad this code came back to the foreground. Excited to see it widely used.

This will be well taken care of, with your cooperation or approval of any decisions, in #549 once the new API changes land.


Fix a typo in README.md

Trying to add the coroutines module would result in a gradle error

Just merged another pull request that fixed this. Thanks anyway!

Ref: https://github.com/Kotlin/anko/pull/396


Multi cursor support

I noticed that ctrl+shift+o breaks if you have multiple cursors. Here is a quick example fix to add multi-cursor support.
const swapCursor = () => {
  try {
    const editor = vscode.window.activeTextEditor;
    if (editor) {
      editor.selections = editor.selections.map(selection => {
        if (!selection.isEmpty) {
          return new vscode.Selection(
            selection.active,
            selection.anchor
          );
        }

        return selection;
      });
    }
  } catch (err) {
    vscode.window.showErrorMessage(
      "An error occurred during command execution. Please check the console for details."
    );
  }
};

ok! thank you && I have fixed it in V0.0.4


Measure progress of upload

Is there a way to measure progress of an upload similarly to whats done for downloads in the samples?

I have tried to do this using this class, http://stackoverflow.com/a/27422691/1253832 but it seems to only track the data being added to the stream (to the headers?) not the actual upload of content to the server.

I actually designed the Progress to be useful for both uploads and downloads.  However since you don't always know the type of content being posted it posed a problem for calculating upload progress, because some are instantly read into memory like strings and others read on demand like streams.
You can manually use the ProgressStreamContent to monitor an upload. https://github.com/paulcbetts/ModernHttpClient/blob/master/src/ModernHttpClient/ProgressStreamContent.cs Here is a basic example of how I use it for my own purposes.
var stream = /* your stream here */;
var client = new HttpClient(...);
var request = new HttpRequestMessage(HttpMethod.Post, url);

var progressContent = new ProgressStreamContent(stream, CancellationToken.None);
progressContent.Progress = HandleUploadProgress;
request.Content = progressContent;

var response = await client.SendAsync(request);

void HandleUploadProgress(long bytes, long totalBytes, long totalBytesExpected)
{
     Console.WriteLine("Downloading {0}/{1}", totalBytes, totalBytesExpected);
     BeginInvokeOnMainThread(() => {
          var progressPercent = (float)totalBytes / (float)totalBytesExpected;
          progress.SetProgress(progressPercent, animated: true);
     });
}

@nberardi could you possibly update your public branch (or create a new branch) to include the changes you made to support this?

I have the same issue.
I am expecting others to have this same problem for the following reason. Airwatch app wrapping feature (for providing authentication / authorization in our case) on Xamarin.iOS is only supported when using the ModernHttpClient!  I'm not sure you were looking for an exclusivity, but congratulations, it guarantees you will be getting more adoption.  With great power comes great responsibility, so I'm hoping you will help us out with this.
I think the reason for this is that they are wrapping all app calls to the NSUrlSession.SharedSession somehow.  Our application requires progress indicator for upload and it sounds like your approach above might work?!  If someone on the team could please publish it, provide more direction or integrate into the branch - it would be very much appreciated - by us, all airwatch app wrappers, and AirWatch themselves.

I found away to report upload progress using ModernHttpClient.ProgressStreamContent. But a proper public constructor of  ModernHttpClient.ProgressStreamContent is not available in PCL. Is there anybody know the reason?
You can use
ModernHttpClient.ProgressStreamContent content = new ModernHttpClient.ProgressStreamContent (decrypt_file_stream, 4096);
content.Progress = new ModernHttpClient.ProgressDelegate ((bytes, totalBytes, totalBytesExpected) => {
					Logger.Info ("** bytes [{0}] totalBytes [{1}] totalBytesExpected [{2}]", bytes, totalBytes, totalBytesExpected);
				});

I found away to report upload progress using ModernHttpClient.ProgressStreamContent. But a proper public constructor of ModernHttpClient.ProgressStreamContent is not available in PCL. Is there anybody know the reason?

Hm, let me look into making this public


VM service getObject response for scripts no longer include "source" for SDK libraries in v2.10 dev SDKs

When using a Dart v2.10 dev SDK, the "source" property appears to be missing from the response of getObject call to the VM Service for dart:core/print.dart.
Left is v2.9, right is v2.10.0-56.0.dev.

We use this in VS Code when the user steps into SDK libraries (otherwise the user will just see <source not available>).
cc @bkonyi

@bkonyi do you know if this is an intended change or a bug? I've been noticing it a lot more the last few days while debugging using nightly SDK builds, it's much more difficult to debug things.

No, that's not intended. It's possible someone was messing with build rules or how the platform snapshot is linked in and managed to remove it. I'll have to take a look.

Was this a Flutter application? Is this still an issue? I'm unable to reproduce with the standalone VM.

It was just Dart. I can repro using the most recently nightly from http://gsdview.appspot.com/dart-archive/channels/be/raw/latest/sdk/:
Dart SDK version: 2.10.0-edge.ca25787ad4fa0a6429679e38bec272957e0445b6 (be) (Thu Sep 3 16:55:25 2020 +0000) on "macos_x64"
I created a simple script that used print() then tried to step into it:
[6:27:02 PM] [VmService] ==> {"id":"44","jsonrpc":"2.0","method":"resume","params":{"isolateId":"isolates/818684413507763","step":"Into"}}
[6:27:02 PM] [VmService] <== {"jsonrpc":"2.0","result":{"type":"Success"},"id":"44"}
[6:27:02 PM] [VmService] <== {"jsonrpc":"2.0","method":"streamNotify","params":{"streamId":"Debug","event":{"type":"Event","kind":"Resume","isolate":{"type":"@Isolate","id":"isolates/818684413507763","name":"main","number":"818684413507763","isSystemIsolate":false},"timestamp":1599154022005,"topFrame":{"type":"Frame","kind":"Regular","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@19027873/scripts/file%3A%2F%2F%2FUsers%2Fdanny%2FDesktop%2Fdart_sample%2Fbin%2Fmain.dart/1745501d02d","uri":"file:///Users/danny/Desktop/dart_sample/bin/main.dart","_kind":"kernel"},"tokenPos":211},"function":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/closures/10","name":"async_op","_vmName":":async_op","owner":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/functions/main","name":"main","owner":{"type":"@Library","fixedId":true,"id":"libraries/@19027873","name":"","uri":"file:///Users/danny/Desktop/dart_sample/bin/main.dart"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"_kind":"ClosureFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b725e21-111aa5480","name":"[Unoptimized] main","_vmName":"[Unoptimized] async_op","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"vars":[{"type":"BoundVariable","name":"danny","value":{"type":"@Instance","_vmType":"String","class":{"type":"@Class","fixedId":true,"id":"classes/81","name":"_OneByteString","_vmName":"_OneByteString@0150898"},"kind":"String","id":"objects/27","length":4,"valueAsString":"test"},"declarationTokenPos":177,"scopeStartTokenPos":184,"scopeEndTokenPos":211}],"index":0}}}}
[6:27:02 PM] [VmService] <== {"jsonrpc":"2.0","method":"streamNotify","params":{"streamId":"Debug","event":{"type":"Event","kind":"PauseBreakpoint","isolate":{"type":"@Isolate","id":"isolates/818684413507763","name":"main","number":"818684413507763","isSystemIsolate":false},"timestamp":1599154022006,"pauseBreakpoints":[],"topFrame":{"type":"Frame","kind":"Regular","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@15069316/scripts/dart%3Aio%2Fdirectory.dart/0","uri":"dart:io/directory.dart","_kind":"kernel"},"tokenPos":5230},"function":{"type":"@Function","fixedId":true,"id":"classes/941/functions/get%3Acurrent","name":"current","_vmName":"get:current","owner":{"type":"@Class","fixedId":true,"id":"classes/941","name":"Directory"},"_kind":"GetterFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81bc8e8a5-111aa8b60","name":"[Unoptimized] Directory.current","_vmName":"[Unoptimized] current","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"vars":[],"index":0}}}}
[6:27:02 PM] [VmService] ==> {"id":"45","jsonrpc":"2.0","method":"getStack","params":{"isolateId":"isolates/818684413507763"}}
[6:27:02 PM] [VmService] <== {"jsonrpc":"2.0","result":{"type":"Stack","frames":[{"type":"Frame","kind":"Regular","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@15069316/scripts/dart%3Aio%2Fdirectory.dart/0","uri":"dart:io/directory.dart","_kind":"kernel"},"tokenPos":5230},"function":{"type":"@Function","fixedId":true,"id":"classes/941/functions/get%3Acurrent","name":"current","_vmName":"get:current","owner":{"type":"@Class","fixedId":true,"id":"classes/941","name":"Directory"},"_kind":"GetterFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81bc8e8a5-111aa8b60","name":"[Unoptimized] Directory.current","_vmName":"[Unoptimized] current","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"vars":[],"index":0},{"type":"Frame","kind":"Regular","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@19027873/scripts/file%3A%2F%2F%2FUsers%2Fdanny%2FDesktop%2Fdart_sample%2Fbin%2Fmain.dart/1745501d02d","uri":"file:///Users/danny/Desktop/dart_sample/bin/main.dart","_kind":"kernel"},"tokenPos":211},"function":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/closures/10","name":"async_op","_vmName":":async_op","owner":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/functions/main","name":"main","owner":{"type":"@Library","fixedId":true,"id":"libraries/@19027873","name":"","uri":"file:///Users/danny/Desktop/dart_sample/bin/main.dart"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"_kind":"ClosureFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b725e21-111aa5480","name":"[Unoptimized] main","_vmName":"[Unoptimized] async_op","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"vars":[{"type":"BoundVariable","name":"danny","value":{"type":"@Instance","_vmType":"String","class":{"type":"@Class","fixedId":true,"id":"classes/81","name":"_OneByteString","_vmName":"_OneByteString@0150898"},"kind":"String","id":"objects/28","length":4,"valueAsString":"test"},"declarationTokenPos":177,"scopeStartTokenPos":184,"scopeEndTokenPos":211}],"index":1},{"type":"Frame","kind":"Regular","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@1026248/scripts/dart%3Aisolate-patch%2Fisolate_patch.dart/0","uri":"dart:isolate-patch/isolate_patch.dart","_kind":"kernel"},"tokenPos":8821},"function":{"type":"@Function","fixedId":true,"id":"libraries/@1026248/closures/9","name":"<anonymous closure>","owner":{"type":"@Function","fixedId":true,"id":"libraries/@1026248/functions/_startIsolate%401026248","name":"_startIsolate","_vmName":"_startIsolate@1026248","owner":{"type":"@Library","fixedId":true,"id":"libraries/@1026248","name":"dart.isolate","uri":"dart:isolate"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"_kind":"ClosureFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b7255c9-111aa32d0","name":"[Unoptimized] _startIsolate.<anonymous closure>","_vmName":"[Unoptimized] <anonymous closure>","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"vars":[{"type":"BoundVariable","name":"port","value":{"type":"@Instance","_vmType":"ReceivePort","class":{"type":"@Class","fixedId":true,"id":"classes/67","name":"_RawReceivePortImpl","_vmName":"_RawReceivePortImpl@1026248"},"kind":"PlainInstance","id":"objects/29"},"declarationTokenPos":8557,"scopeStartTokenPos":7427,"scopeEndTokenPos":8924},{"type":"BoundVariable","name":"isSpawnUri","value":{"type":"@Instance","_vmType":"Bool","class":{"type":"@Class","fixedId":true,"id":"classes/55","name":"bool"},"kind":"Bool","fixedId":true,"id":"objects/bool-true","valueAsString":"true"},"declarationTokenPos":7493,"scopeStartTokenPos":7427,"scopeEndTokenPos":8924},{"type":"BoundVariable","name":"entryPoint","value":{"type":"@Instance","_vmType":"Closure","class":{"type":"@Class","fixedId":true,"id":"classes/49","name":"_Closure","_vmName":"_Closure@0150898"},"kind":"Closure","id":"objects/30","closureFunction":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/implicit_closures/0","name":"main","owner":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/functions/main","name":"main","owner":{"type":"@Library","fixedId":true,"id":"libraries/@19027873","name":"","uri":"file:///Users/danny/Desktop/dart_sample/bin/main.dart"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"_kind":"ImplicitClosureFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"closureContext":{"type":"@Instance","_vmType":"Context","class":{"type":"@Class","fixedId":true,"id":"classes/152","name":"Null"},"kind":"Null","fixedId":true,"id":"objects/null","valueAsString":"null"}},"declarationTokenPos":7427,"scopeStartTokenPos":7427,"scopeEndTokenPos":8924},{"type":"BoundVariable","name":"args","value":{"type":"@Instance","_vmType":"Array","class":{"type":"@Class","fixedId":true,"id":"classes/78","name":"_List","_vmName":"_List@0150898"},"kind":"List","id":"objects/31","length":0},"declarationTokenPos":7457,"scopeStartTokenPos":7427,"scopeEndTokenPos":8924},{"type":"BoundVariable","name":"message","value":{"type":"@Instance","_vmType":"null","class":{"type":"@Class","fixedId":true,"id":"classes/152","name":"Null"},"kind":"Null","fixedId":true,"id":"objects/null","valueAsString":"null"},"declarationTokenPos":7475,"scopeStartTokenPos":7427,"scopeEndTokenPos":8924},{"type":"BoundVariable","name":"_","value":{"type":"@Instance","_vmType":"null","class":{"type":"@Class","fixedId":true,"id":"classes/152","name":"Null"},"kind":"Null","fixedId":true,"id":"objects/null","valueAsString":"null"},"declarationTokenPos":8604,"scopeStartTokenPos":8604,"scopeEndTokenPos":8924}],"index":2},{"type":"Frame","kind":"Regular","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@1026248/scripts/dart%3Aisolate-patch%2Fisolate_patch.dart/0","uri":"dart:isolate-patch/isolate_patch.dart","_kind":"kernel"},"tokenPos":4911},"function":{"type":"@Function","fixedId":true,"id":"classes/67/functions/_handleMessage%401026248","name":"_handleMessage","_vmName":"_handleMessage@1026248","owner":{"type":"@Class","fixedId":true,"id":"classes/67","name":"_RawReceivePortImpl","_vmName":"_RawReceivePortImpl@1026248"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b72551f-111aa2ec0","name":"[Unoptimized] _RawReceivePortImpl._handleMessage","_vmName":"[Unoptimized] _handleMessage","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"vars":[{"type":"BoundVariable","name":"handler","value":{"type":"@Instance","_vmType":"Closure","class":{"type":"@Class","fixedId":true,"id":"classes/49","name":"_Closure","_vmName":"_Closure@0150898"},"kind":"Closure","id":"objects/32","closureFunction":{"type":"@Function","fixedId":true,"id":"libraries/@1026248/closures/9","name":"<anonymous closure>","owner":{"type":"@Function","fixedId":true,"id":"libraries/@1026248/functions/_startIsolate%401026248","name":"_startIsolate","_vmName":"_startIsolate@1026248","owner":{"type":"@Library","fixedId":true,"id":"libraries/@1026248","name":"dart.isolate","uri":"dart:isolate"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"_kind":"ClosureFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"closureContext":{"type":"@Context","id":"objects/33","length":5}},"declarationTokenPos":4672,"scopeStartTokenPos":4672,"scopeEndTokenPos":4961},{"type":"BoundVariable","name":"message","value":{"type":"@Instance","_vmType":"null","class":{"type":"@Class","fixedId":true,"id":"classes/152","name":"Null"},"kind":"Null","fixedId":true,"id":"objects/null","valueAsString":"null"},"declarationTokenPos":4685,"scopeStartTokenPos":4685,"scopeEndTokenPos":4961}],"index":3}],"asyncCausalFrames":[{"type":"Frame","kind":"Regular","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@15069316/scripts/dart%3Aio%2Fdirectory.dart/0","uri":"dart:io/directory.dart","_kind":"kernel"},"tokenPos":5230},"function":{"type":"@Function","fixedId":true,"id":"classes/941/functions/get%3Acurrent","name":"current","_vmName":"get:current","owner":{"type":"@Class","fixedId":true,"id":"classes/941","name":"Directory"},"_kind":"GetterFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81bc8e8a5-111aa8b60","name":"[Unoptimized] Directory.current","_vmName":"[Unoptimized] current","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"vars":[],"index":0},{"type":"Frame","kind":"Regular","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@19027873/scripts/file%3A%2F%2F%2FUsers%2Fdanny%2FDesktop%2Fdart_sample%2Fbin%2Fmain.dart/1745501d02d","uri":"file:///Users/danny/Desktop/dart_sample/bin/main.dart","_kind":"kernel"},"tokenPos":211},"function":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/closures/10","name":"async_op","_vmName":":async_op","owner":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/functions/main","name":"main","owner":{"type":"@Library","fixedId":true,"id":"libraries/@19027873","name":"","uri":"file:///Users/danny/Desktop/dart_sample/bin/main.dart"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"_kind":"ClosureFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b725e21-111aa5480","name":"[Unoptimized] main","_vmName":"[Unoptimized] async_op","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"vars":[{"type":"BoundVariable","name":"danny","value":{"type":"@Instance","_vmType":"String","class":{"type":"@Class","fixedId":true,"id":"classes/81","name":"_OneByteString","_vmName":"_OneByteString@0150898"},"kind":"String","id":"objects/34","length":4,"valueAsString":"test"},"declarationTokenPos":177,"scopeStartTokenPos":184,"scopeEndTokenPos":211}],"index":1},{"type":"Frame","kind":"AsyncCausal","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@19027873/scripts/file%3A%2F%2F%2FUsers%2Fdanny%2FDesktop%2Fdart_sample%2Fbin%2Fmain.dart/1745501d02d","uri":"file:///Users/danny/Desktop/dart_sample/bin/main.dart","_kind":"kernel"},"tokenPos":-1},"function":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/implicit_closures/0","name":"main","owner":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/functions/main","name":"main","owner":{"type":"@Library","fixedId":true,"id":"libraries/@19027873","name":"","uri":"file:///Users/danny/Desktop/dart_sample/bin/main.dart"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"_kind":"ImplicitClosureFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b7257b9-111aa4120","name":"[Unoptimized] main","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"index":2},{"type":"Frame","kind":"AsyncCausal","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@0150898/scripts/dart%3Acore-patch%2Ffunction.dart/0","uri":"dart:core-patch/function.dart","_kind":"kernel"},"tokenPos":-1},"function":{"type":"@Function","fixedId":true,"id":"classes/49/dispatchers/2","name":"call","_vmName":"dyn:call","owner":{"type":"@Class","fixedId":true,"id":"classes/49","name":"_Closure","_vmName":"_Closure@0150898"},"_kind":"InvokeFieldDispatcher","static":false,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b725565-111aa2f80","name":"[Unoptimized] _Closure.call","_vmName":"[Unoptimized] call","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"index":3},{"type":"Frame","kind":"AsyncCausal","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@1026248/scripts/dart%3Aisolate-patch%2Fisolate_patch.dart/0","uri":"dart:isolate-patch/isolate_patch.dart","_kind":"kernel"},"tokenPos":8821},"function":{"type":"@Function","fixedId":true,"id":"libraries/@1026248/closures/9","name":"<anonymous closure>","owner":{"type":"@Function","fixedId":true,"id":"libraries/@1026248/functions/_startIsolate%401026248","name":"_startIsolate","_vmName":"_startIsolate@1026248","owner":{"type":"@Library","fixedId":true,"id":"libraries/@1026248","name":"dart.isolate","uri":"dart:isolate"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"_kind":"ClosureFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b7255c9-111aa32d0","name":"[Unoptimized] _startIsolate.<anonymous closure>","_vmName":"[Unoptimized] <anonymous closure>","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"index":4},{"type":"Frame","kind":"AsyncCausal","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@0150898/scripts/dart%3Acore-patch%2Ffunction.dart/0","uri":"dart:core-patch/function.dart","_kind":"kernel"},"tokenPos":-1},"function":{"type":"@Function","fixedId":true,"id":"classes/49/dispatchers/2","name":"call","_vmName":"dyn:call","owner":{"type":"@Class","fixedId":true,"id":"classes/49","name":"_Closure","_vmName":"_Closure@0150898"},"_kind":"InvokeFieldDispatcher","static":false,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b725565-111aa2f80","name":"[Unoptimized] _Closure.call","_vmName":"[Unoptimized] call","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"index":5},{"type":"Frame","kind":"AsyncCausal","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@1026248/scripts/dart%3Aisolate-patch%2Fisolate_patch.dart/0","uri":"dart:isolate-patch/isolate_patch.dart","_kind":"kernel"},"tokenPos":4911},"function":{"type":"@Function","fixedId":true,"id":"classes/67/functions/_handleMessage%401026248","name":"_handleMessage","_vmName":"_handleMessage@1026248","owner":{"type":"@Class","fixedId":true,"id":"classes/67","name":"_RawReceivePortImpl","_vmName":"_RawReceivePortImpl@1026248"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b72551f-111aa2ec0","name":"[Unoptimized] _RawReceivePortImpl._handleMessage","_vmName":"[Unoptimized] _handleMessage","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"index":6}],"awaiterFrames":[{"type":"Frame","kind":"Regular","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@15069316/scripts/dart%3Aio%2Fdirectory.dart/0","uri":"dart:io/directory.dart","_kind":"kernel"},"tokenPos":5230},"function":{"type":"@Function","fixedId":true,"id":"classes/941/functions/get%3Acurrent","name":"current","_vmName":"get:current","owner":{"type":"@Class","fixedId":true,"id":"classes/941","name":"Directory"},"_kind":"GetterFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81bc8e8a5-111aa8b60","name":"[Unoptimized] Directory.current","_vmName":"[Unoptimized] current","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"vars":[],"index":0},{"type":"Frame","kind":"AsyncActivation","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@19027873/scripts/file%3A%2F%2F%2FUsers%2Fdanny%2FDesktop%2Fdart_sample%2Fbin%2Fmain.dart/1745501d02d","uri":"file:///Users/danny/Desktop/dart_sample/bin/main.dart","_kind":"kernel"},"tokenPos":211},"function":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/closures/10","name":"async_op","_vmName":":async_op","owner":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/functions/main","name":"main","owner":{"type":"@Library","fixedId":true,"id":"libraries/@19027873","name":"","uri":"file:///Users/danny/Desktop/dart_sample/bin/main.dart"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"_kind":"ClosureFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b725e21-111aa5480","name":"[Unoptimized] main","_vmName":"[Unoptimized] async_op","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"vars":[{"type":"BoundVariable","name":"danny","value":{"type":"@Instance","_vmType":"String","class":{"type":"@Class","fixedId":true,"id":"classes/81","name":"_OneByteString","_vmName":"_OneByteString@0150898"},"kind":"String","id":"objects/35","length":4,"valueAsString":"test"},"declarationTokenPos":177,"scopeStartTokenPos":184,"scopeEndTokenPos":211}],"index":1},{"type":"Frame","kind":"Regular","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@1026248/scripts/dart%3Aisolate-patch%2Fisolate_patch.dart/0","uri":"dart:isolate-patch/isolate_patch.dart","_kind":"kernel"},"tokenPos":8821},"function":{"type":"@Function","fixedId":true,"id":"libraries/@1026248/closures/9","name":"<anonymous closure>","owner":{"type":"@Function","fixedId":true,"id":"libraries/@1026248/functions/_startIsolate%401026248","name":"_startIsolate","_vmName":"_startIsolate@1026248","owner":{"type":"@Library","fixedId":true,"id":"libraries/@1026248","name":"dart.isolate","uri":"dart:isolate"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"_kind":"ClosureFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b7255c9-111aa32d0","name":"[Unoptimized] _startIsolate.<anonymous closure>","_vmName":"[Unoptimized] <anonymous closure>","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"vars":[{"type":"BoundVariable","name":"port","value":{"type":"@Instance","_vmType":"ReceivePort","class":{"type":"@Class","fixedId":true,"id":"classes/67","name":"_RawReceivePortImpl","_vmName":"_RawReceivePortImpl@1026248"},"kind":"PlainInstance","id":"objects/36"},"declarationTokenPos":8557,"scopeStartTokenPos":7427,"scopeEndTokenPos":8924},{"type":"BoundVariable","name":"isSpawnUri","value":{"type":"@Instance","_vmType":"Bool","class":{"type":"@Class","fixedId":true,"id":"classes/55","name":"bool"},"kind":"Bool","fixedId":true,"id":"objects/bool-true","valueAsString":"true"},"declarationTokenPos":7493,"scopeStartTokenPos":7427,"scopeEndTokenPos":8924},{"type":"BoundVariable","name":"entryPoint","value":{"type":"@Instance","_vmType":"Closure","class":{"type":"@Class","fixedId":true,"id":"classes/49","name":"_Closure","_vmName":"_Closure@0150898"},"kind":"Closure","id":"objects/37","closureFunction":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/implicit_closures/0","name":"main","owner":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/functions/main","name":"main","owner":{"type":"@Library","fixedId":true,"id":"libraries/@19027873","name":"","uri":"file:///Users/danny/Desktop/dart_sample/bin/main.dart"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"_kind":"ImplicitClosureFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"closureContext":{"type":"@Instance","_vmType":"Context","class":{"type":"@Class","fixedId":true,"id":"classes/152","name":"Null"},"kind":"Null","fixedId":true,"id":"objects/null","valueAsString":"null"}},"declarationTokenPos":7427,"scopeStartTokenPos":7427,"scopeEndTokenPos":8924},{"type":"BoundVariable","name":"args","value":{"type":"@Instance","_vmType":"Array","class":{"type":"@Class","fixedId":true,"id":"classes/78","name":"_List","_vmName":"_List@0150898"},"kind":"List","id":"objects/38","length":0},"declarationTokenPos":7457,"scopeStartTokenPos":7427,"scopeEndTokenPos":8924},{"type":"BoundVariable","name":"message","value":{"type":"@Instance","_vmType":"null","class":{"type":"@Class","fixedId":true,"id":"classes/152","name":"Null"},"kind":"Null","fixedId":true,"id":"objects/null","valueAsString":"null"},"declarationTokenPos":7475,"scopeStartTokenPos":7427,"scopeEndTokenPos":8924},{"type":"BoundVariable","name":"_","value":{"type":"@Instance","_vmType":"null","class":{"type":"@Class","fixedId":true,"id":"classes/152","name":"Null"},"kind":"Null","fixedId":true,"id":"objects/null","valueAsString":"null"},"declarationTokenPos":8604,"scopeStartTokenPos":8604,"scopeEndTokenPos":8924}],"index":2},{"type":"Frame","kind":"Regular","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@1026248/scripts/dart%3Aisolate-patch%2Fisolate_patch.dart/0","uri":"dart:isolate-patch/isolate_patch.dart","_kind":"kernel"},"tokenPos":4911},"function":{"type":"@Function","fixedId":true,"id":"classes/67/functions/_handleMessage%401026248","name":"_handleMessage","_vmName":"_handleMessage@1026248","owner":{"type":"@Class","fixedId":true,"id":"classes/67","name":"_RawReceivePortImpl","_vmName":"_RawReceivePortImpl@1026248"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b72551f-111aa2ec0","name":"[Unoptimized] _RawReceivePortImpl._handleMessage","_vmName":"[Unoptimized] _handleMessage","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"vars":[{"type":"BoundVariable","name":"handler","value":{"type":"@Instance","_vmType":"Closure","class":{"type":"@Class","fixedId":true,"id":"classes/49","name":"_Closure","_vmName":"_Closure@0150898"},"kind":"Closure","id":"objects/39","closureFunction":{"type":"@Function","fixedId":true,"id":"libraries/@1026248/closures/9","name":"<anonymous closure>","owner":{"type":"@Function","fixedId":true,"id":"libraries/@1026248/functions/_startIsolate%401026248","name":"_startIsolate","_vmName":"_startIsolate@1026248","owner":{"type":"@Library","fixedId":true,"id":"libraries/@1026248","name":"dart.isolate","uri":"dart:isolate"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"_kind":"ClosureFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"closureContext":{"type":"@Context","id":"objects/40","length":5}},"declarationTokenPos":4672,"scopeStartTokenPos":4672,"scopeEndTokenPos":4961},{"type":"BoundVariable","name":"message","value":{"type":"@Instance","_vmType":"null","class":{"type":"@Class","fixedId":true,"id":"classes/152","name":"Null"},"kind":"Null","fixedId":true,"id":"objects/null","valueAsString":"null"},"declarationTokenPos":4685,"scopeStartTokenPos":4685,"scopeEndTokenPos":4961}],"index":3},{"type":"Frame","kind":"AsyncSuspensionMarker","marker":"AsynchronousSuspension","index":4},{"type":"Frame","kind":"AsyncCausal","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@19027873/scripts/file%3A%2F%2F%2FUsers%2Fdanny%2FDesktop%2Fdart_sample%2Fbin%2Fmain.dart/1745501d02d","uri":"file:///Users/danny/Desktop/dart_sample/bin/main.dart","_kind":"kernel"},"tokenPos":-1},"function":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/implicit_closures/0","name":"main","owner":{"type":"@Function","fixedId":true,"id":"libraries/@19027873/functions/main","name":"main","owner":{"type":"@Library","fixedId":true,"id":"libraries/@19027873","name":"","uri":"file:///Users/danny/Desktop/dart_sample/bin/main.dart"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"_kind":"ImplicitClosureFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b7257b9-111aa4120","name":"[Unoptimized] main","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"index":5},{"type":"Frame","kind":"AsyncCausal","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@0150898/scripts/dart%3Acore-patch%2Ffunction.dart/0","uri":"dart:core-patch/function.dart","_kind":"kernel"},"tokenPos":-1},"function":{"type":"@Function","fixedId":true,"id":"classes/49/dispatchers/2","name":"call","_vmName":"dyn:call","owner":{"type":"@Class","fixedId":true,"id":"classes/49","name":"_Closure","_vmName":"_Closure@0150898"},"_kind":"InvokeFieldDispatcher","static":false,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b725565-111aa2f80","name":"[Unoptimized] _Closure.call","_vmName":"[Unoptimized] call","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"index":6},{"type":"Frame","kind":"AsyncCausal","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@1026248/scripts/dart%3Aisolate-patch%2Fisolate_patch.dart/0","uri":"dart:isolate-patch/isolate_patch.dart","_kind":"kernel"},"tokenPos":8821},"function":{"type":"@Function","fixedId":true,"id":"libraries/@1026248/closures/9","name":"<anonymous closure>","owner":{"type":"@Function","fixedId":true,"id":"libraries/@1026248/functions/_startIsolate%401026248","name":"_startIsolate","_vmName":"_startIsolate@1026248","owner":{"type":"@Library","fixedId":true,"id":"libraries/@1026248","name":"dart.isolate","uri":"dart:isolate"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"_kind":"ClosureFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b7255c9-111aa32d0","name":"[Unoptimized] _startIsolate.<anonymous closure>","_vmName":"[Unoptimized] <anonymous closure>","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"index":7},{"type":"Frame","kind":"AsyncCausal","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@0150898/scripts/dart%3Acore-patch%2Ffunction.dart/0","uri":"dart:core-patch/function.dart","_kind":"kernel"},"tokenPos":-1},"function":{"type":"@Function","fixedId":true,"id":"classes/49/dispatchers/2","name":"call","_vmName":"dyn:call","owner":{"type":"@Class","fixedId":true,"id":"classes/49","name":"_Closure","_vmName":"_Closure@0150898"},"_kind":"InvokeFieldDispatcher","static":false,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b725565-111aa2f80","name":"[Unoptimized] _Closure.call","_vmName":"[Unoptimized] call","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"index":8},{"type":"Frame","kind":"AsyncCausal","location":{"type":"SourceLocation","script":{"type":"@Script","fixedId":true,"id":"libraries/@1026248/scripts/dart%3Aisolate-patch%2Fisolate_patch.dart/0","uri":"dart:isolate-patch/isolate_patch.dart","_kind":"kernel"},"tokenPos":4911},"function":{"type":"@Function","fixedId":true,"id":"classes/67/functions/_handleMessage%401026248","name":"_handleMessage","_vmName":"_handleMessage@1026248","owner":{"type":"@Class","fixedId":true,"id":"classes/67","name":"_RawReceivePortImpl","_vmName":"_RawReceivePortImpl@1026248"},"_kind":"RegularFunction","static":true,"const":false,"_intrinsic":false,"_native":false},"code":{"type":"@Code","fixedId":true,"id":"code/81b72551f-111aa2ec0","name":"[Unoptimized] _RawReceivePortImpl._handleMessage","_vmName":"[Unoptimized] _handleMessage","kind":"Dart","_optimized":false,"_intrinsic":false,"_native":false},"index":9}],"messages":[]},"id":"45"}
[6:27:02 PM] [VmService] ==><EMAIL_ADDRESS>[6:27:02 PM] [VmService] <== {"jsonrpc":"2.0","result":{"type":"Script","class":{"type":"@Class","fixedId":true,"id":"classes/12","name":"Script"},"size":96,"fixedId":true,"id":"libraries/@15069316/scripts/dart%3Aio%2Fdirectory.dart/0","uri":"dart:io/directory.dart","_kind":"kernel","_loadTime":0,"library":{"type":"@Library","fixedId":true,"id":"libraries/@15069316","name":"dart.io","uri":"dart:io"},"lineOffset":0,"columnOffset":0,"tokenPosTable":[[109,4038,1],[114,4171,3,4182,14,4186,18],[125,4496,4],[126,4523,3,4531,11,4540,20,4548,28],[127,4579,24,4589,34,4603,48],[128,4616,5,4620,9,4630,19],[129,4647,7,4658,18,4669,29],[131,4686,5,4693,12,4703,22,4719,38],[132,4728,3],[134,4734,4],[135,4761,3,4769,11,4790,32,4801,43],[137,4852,5,4863,16,4886,39],[138,4895,3],[145,5035,3,5043,11,5060,28,5065,33,5073,41,5077,45,5087,55,5091,59,5104,72],[151,5201,3,5222,24,5230,32],[152,5255,24,5265,34,5279,48],[153,5292,5,5296,9,5306,19],[154,5323,7,5341,25],[156,5360,5,5367,12,5377,22],[157,5402,3],[166,5668,3,5676,11,5679,14],[186,6462,3,6478,19,6485,26,6486,27],[187,6517,24,6527,34,6541,48],[188,6554,5,6558,9,6568,19],[189,6596,18,6606,28],[190,6618,7],[192,6636,5,6646,15,6666,35],[193,6675,3],[206,7135,3,7153,21,7159,27,7166,34,7177,45,7184,52],[217,7539,3,7544,8,7554,18,7561,25,7572,36,7579,43],[227,7867,3,7888,24,7899,35],[228,7924,24,7934,34,7948,48],[229,7961,5,7965,9,7975,19],[230,7992,7,8010,25],[232,8032,5,8039,12,8049,22],[233,8077,3],[244,8430,3,8448,21,8458,31,8468,41,8476,49],[254,8794,3,8804,13,8818,27,8828,37,8836,45],[256,8841,3,8856,18,8876,38,8878,40],[258,8883,3,8890,10,8914,34,8916,36],[268,9266,3,9284,21,9290,27,9298,35,9306,43],[278,9609,3,9619,13,9629,23,9637,31,9645,39],[287,9898,3,9912,17,9920,25],[309,10764,3,10789,28,10793,32],[310,10807,13,10818,24,10830,36,10843,49,10849,55],[332,11686,3,11709,26,11717,34],[333,11731,13,11742,24,11754,36,11767,49,11773,55],[338,11856,3,11863,10,11871,18,11873,20],[339,11875,1]]},"id":"46"}

The last line is the response to calling getObject with the script ID, and it's missing the source still. I don't know if it's specific to the nightlies, but it was causing my integration tests to fail (which use Dev builds) too (I haven't re-enabled them yet though).

That's really strange... Can I trouble you to share your script and how you run it?

Sure! I'm using VS Code, with two files:
bin/main.dart
main() {
  print('test'); // Breakpoint here
}

.vscode/settings.json
{
	"dart.sdkPath": "/Users/danny/Dev/Dart SDKs/nightly-2020-09-03", // Path to SDK here
	"dart.debugSdkLibraries": true,
	"dart.debugExternalLibraries": true,
	"dart.vmServiceLogFile": "logs/vmservice.txt",
}

Open the folder parent of those folders in VS Code (so the .vscode and bin folders are both in the workspace)
add a breakpoint on the marked line in bin/main.dart
Press F5 to run and wait to hit the breakpoint
Press F11 to step-into

You'd normally see source code, but you'll now see <source not available>. The VM service traffic will be logged into the logs folder so you can examine it.

Confirmed I can reproduce using VSCode and a local SDK build. I wonder if there's maybe two copies of these scripts reported and maybe that's what's causing the issue... I'll keep digging.

Great! Let me know if you need me to test anything, or if you think I might be doing anything weird in VS Code to cause this. Thanks!

Fix up for review.

Great, thanks!

@bkonyi it seems like this still isn't working in the v2.10 release build:
{
	"jsonrpc": "2.0",
	"result": {
		"type": "Script",
		"class": {
			"type": "@Class",
			"fixedId": true,
			"id": "classes\/12",
			"name": "Script"
		},
		"size": 96,
		"fixedId": true,
		"id"<EMAIL_ADDRESS>		"uri": "dart:core\/print.dart",
		"_kind": "kernel",
		"_loadTime": 0,
		"library": {
			"type": "@Library",
			"fixedId": true,
			"id": "libraries\/@0150898",
			"name": "dart.core",
			"uri": "dart:core"
		},
		"lineOffset": 0,
		"columnOffset": 0,
		"tokenPosTable": [[8,302,1,307,6,312,11,321,20],[9,340,10,345,15,347,17,354,24],[10,372,7,379,14,381,16],[11,396,3,400,7,407,14],[12,422,5,437,20],[14,459,5,465,11,466,12],[16,477,1]]
	},
	"id": "97"
}

I created a script that called print() and stepped into it with the debugger, and that's the result from the getObject call.

It looks like this just missed the 2.10 branch (landed 26 days ago). https://github.com/dart-lang/sdk/commit/19875e9ab4a030860938e8d76326f744c52b43c5 landed 25 days ago :-(

Oh, I see it. I saw some v2.10.0-dev rags on that change and assumed it was in. My bad, thanks!