rpc: streamline PSBT funding API to better support batch-funding and expanded use cases

Background
The current PSBT funding API uses the funding shim in open channels which is designed for flexibility in arguments
Pitfalls in this API:

The no_publish directive is difficult to test as generating a failure condition for this argument is tricky
It cannot be used with the REST request/response API and requires using the streaming endpoint
The internal publish step of the transaction relies on the local mempool accepting the tx, which for CPFP or other chain spends may not be reliable
It's tricky to batch funding across multiple nodes because of the internal control over the publish step

Suggested improvements:

Reduce the abstraction in the high level API design to be more dedicated to batch PSBT funding
Allow callers to be solely responsible for the funding transaction broadcast
Add the option or document PSBT creation using LND on-chain funds for batch opens

Your environment

LND 0.12.0-beta

I started working on a BatchOpenChannel RPC that will make it easy to atomically open multiple channels at the same time (funded by the internal wallet, not using PSBTs).
Wanted to check back on this issue to see if there was anything that needs to be improved for the manual batch open process using the PSBT API.
From what I can see all the points mentioned in the issue above can be resolved without any changes to the channel open API:
Pitfalls in this API:

The no_publish directive is difficult to test as generating a failure condition for this argument is tricky

You can set no_publish to true for all channels then manually publish the transaction once everything is ready. The main problem is that the external script needs to be responsible for cleaning up everything if the funding fails. This can be achieved by #5335. Perhaps we can simplify it quite a bit if the new BatchChannelOpen has parameters for the account to use for creating the funding TX (that way a HW wallet can be used if lnd watches the addresses for it) and a parameter for interrupting the process before the TX is signed. That way the first two steps (OpenChannel and PsbtVerify) would be done by BatchChannelOpen and the user only has to sign the TX, then call PsbtFinalize and manually publish the TX. The burden for cleaning up pending states would still fall to the user though.

It cannot be used with the REST request/response API and requires using the streaming endpoint

With the WebSocket API all RPC endpoints can now be used via REST.

The internal publish step of the transaction relies on the local mempool accepting the tx, which for CPFP or other chain spends may not be reliable

See point above about setting no_publish=true for all channels.

It's tricky to batch funding across multiple nodes because of the internal control over the publish step

See point above about setting no_publish=true for all channels.

Suggested improvements:

Reduce the abstraction in the high level API design to be more dedicated to batch PSBT funding

The API is a bit tricky to use, that's true. Perhaps we could simplify it a bit by

Allow callers to be solely responsible for the funding transaction broadcast

See point above about setting no_publish=true for all channels.

Add the option or document PSBT creation using LND on-chain funds for batch opens

See https://github.com/lightningnetwork/lnd/blob/master/docs/psbt.md#batch-opening-channels

has parameters for the account to use for creating the funding TX

This would interfere with PayJoin use case I had in mind, I hope it won't be mandatory.
I don't understand what's the problem with cleanup, also the use case for abandonchannel - shouldn't double-spend of the input be detected automatically?

This would interfere with PayJoin use case I had in mind, I hope it won't be mandatory.

I was talking about the new BatchOpenChannel RPC. You would only use that in cases where lnd is either the single funder or at least watches the UTXOs (hence the --account flag for watch-only imported accounts).
For the PayJoin use case you would use the existing OpenChannel+psbt_shim/FundingStateStep flow as it exists today. Removing the need for giving lnd the final, signed TX before it continues should fully allow that use case (see comment in #5215).

I don't understand what's the problem with cleanup, also the use case for abandonchannel - shouldn't double-spend of the input be detected automatically?

There are three things that are possibly created during the funding flow (depending on how far everything got and how exactly you are funding the TX):

A funding shim/intent: Informs the wallet that a funding process is going on. This remains in memory for 10 minutes or until the next restart. Should be cleaned up with FundingStateStep->CancelFundingShim. Doing so will also tell the peer that the channel won't be created. If you don't do this it'll time out after 10 minutes on their end but until then you might run into "too many pending channels" errors if you try too often without cleaning up.
A pending channel. Once the channel negotiation has completed and it is shown as pending, it will stay around forever. If it doesn't confirm within 2 weeks the other party will forget it and it'll become useless. But the funding party will never forget it automatically. This is probably something that we should fix, registering a spend of the funding input should probably be a straight-forward way. Currently you need to call AbandonChannel to get rid of it (which is only available in dev builds, but see also https://github.com/lightningnetwork/lnd/pull/5335).
A locked UTXO: If lnd is the funder a UTXO will be locked for 10 minutes. If you don't unlock that your next funding attempt might fail if you only have one UTXO.

Thanks for clarification, I believe I understand it now.
I agree that spend of the input should automatically clean up things. Apart from it being the sane thing to do this would probably resolve all issues around PayJoin because PayJoin mandates always spending the input.


Clamp GradientTexture2D dimensions to 2048×2048 in the inspector

Larger sizes take up a lot of memory for little visual benefit. They also take a while to initialize, which makes the inspector slow to refresh when the texture needs to be regenerated. When entering particularly large sizes like 10000×10000, it's also possible to run out of VRAM or even cause a crash.

Maybe a 4096x4096 makes more sense? (since GradientTexture1D using that limit)

4096×4096 is much, much larger than a 4096×1 texture :slightly_smiling_face:
It's pretty slow to generate, and a single 4K RGBA8 texture requires 67 MB of VRAM on its own.

Thanks!


problem on Netatmo integration in 0.105.x version

##Problem
I'm not able to see Netatmo camera in my Lovelace UI after upgraded to 0.105.1 or 0.105.2 version (all worked fine since 0.104 versions). I already adjusted my config:

I already edited configuration.yaml
I go in integration panel
I click on integrate and then it open new web page in netatmo web page where I click on "accept" button, then it redirect to a new page with 404 web error.
Then nothing happen, I don't see any cameras in HASSIO items...

Environment
-HASSIO 0.105.2
-raspberry pi3+
-supervisor 199
-HassOS 3.9
-integration Netatmo
-configurazione.yaml as here: https://www.home-assistant.io/integrations/netatmo/
Problem-relevant configuration.yaml
this is my configuration.yaml
netatmo:
  client_id: !secret client_id_netatmo
  client_secret: !secret secret_key_netatmo

Traceback/Error logs
I only found this error but I think this isn't related to my problem with Netatmo:
20-02-07 14:05:11 INFO (MainThread) [hassio.api.proxy] Home Assistant WebSocket API request initialize
20-02-07 14:05:11 INFO (MainThread) [hassio.api.proxy] WebSocket access from a0d7b954_appdaemon3
20-02-07 14:05:11 ERROR (MainThread) [hassio.api.proxy] Client error on WebSocket API Cannot connect to host <IP_ADDRESS>:8123 ssl:False [Connection refused].

Additional information
here it's new authorization page of Netatmo:

Can you please check if this helps: https://community.home-assistant.io/t/netatmo-in-ha-0-105/169377/11

Not worked for me...

What is base_url set to? Does it contain the port number?

if I comment netatmo config in my configuration.yaml I'm able to complete integration, but it integrates with nabu and not with my HASSIO, so camera entities appear but don't works...

http:
base_url: https://danielevelardi.duckdns.org
server_port: 8123
ssl_certificate: /ssl/fullchain.pem
ssl_key: /ssl/privkey.pem

I found this log:
"""
netatmo: Error on device update!
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 304, in _async_add_entity
await entity.async_device_update(warning=False)
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 461, in async_device_update
await self.hass.async_add_executor_job(self.update)
File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "/usr/src/homeassistant/homeassistant/components/netatmo/binary_sensor.py", line 162, in update
cid=self._camera_id, offset=self._timeout
File "/usr/local/lib/python3.7/site-packages/pyatmo/camera.py", line 691, in animal_detected
if self.outdoor_lastEvent[cid]["video_status"] == "recording":
KeyError: 'video_status'
"""
I hope this could be useful...

I also tried this config:
http:
base_url: https://danielevelardi.duckdns.org:8123
ssl_certificate: /ssl/fullchain.pem
ssl_key: /ssl/privkey.pem
but with this config HASSIO don't boot...

Do you use the duckdns addon?

Yes, I use duckdns and access from wan work fine with ssl

I can see that you’re using duckdns, I just want to understand your setup better.

this is configuration of duckdns add-on:
lets_encrypt:
accept_terms: true
certfile: fullchain.pem
keyfile: privkey.pem
token: xxxxxxxxxxxxxxxxxxxxxxxxxx
domains:

xxxxx.duckdns.org
seconds: 300

do you need other informations?

Have you tried on the forums or discord for help with that issue? I don’t think this is a specific problem with netatmo.
The cloud option does not support cameras right now. Do your other sensors work?

No any comment on forum...
Built-in presence sensor in camera don’t work else...
This release don’t support camera? Can you explain?

I have only 2 netatmo welcome and 2 netatmo presence, no any other netatmo products...

The cloud link currently does not support camera features because HA is not yet certified by Netatmo. When configured with yaml and your own dev account it work’s fine.

Ok, I don’t have NABU ACCOUNT CLOUD, so it must work for my cameras?!

I have a cam myself and know plenty who have successfully updated to 0.105 with an existing Netatmo integration and cameras, no it can’t be a general issue.

This sounds like the same issue you’re having, no? https://community.home-assistant.io/t/netatmo-in-ha-0-105/169377/71?u=cgtobi

I don’t use nabu cloud config...it’s different from my problem....
When I disabled netatmo config and then I added again netatmo integration I notice my PC in my home network isn’t able to connect to netatmo web page of access confirmation...I obtain a redirect to <IP_ADDRESS> web page of my router...so I tried to connect my PC to 4G connection and I obtained netatmo token for nabu cloud (I don’t need it but integration panel don’t ask me which integration type I need...)
During this test I found a similar problem of the issue you linked: a problem in loopback of home router, but I use duckdns link from lan and wan ...it worked fine in these months with all other integrations...

I just did another test in my dev environment which is not exposed to the WAN and the authentication works just fine with Netatmo.
Once you've choosen either method you have to restart HA to be able to get the selection again as it stores your choice for that session.
The steps to migrate from 0.104 is as follows:

clean up old netatmo config
add key and secret to your config as per the documentation
restart HA
add the integration using the configuration.yaml rather then cloud link
accept the Netatmo authorization dialogue

The steps to migrate from 0.104 is as follows:
clean up old netatmo config
add key and secret to your config as per the documentation
restart HA
add the integration using the configuration.yaml rather then cloud link
accept the Netatmo authorization dialogue

@cgtobi should we update the release notes to include these migration steps?

@springstan probably a good idea, but it’s not too different from what we already have, is it?

@cgtobi yeah there is not much difference but I think a step by step tutorial is easier to follow and I think the migration is difficult for multiple users so clarifying the process could help them as well.

Hi,
I tried again:

configuration.yaml modified...
restart HA
go to integration and add new Netatmo integration using configuration.yaml
it open new netatmo authorization page of netatmo
it redirect to this web page:

https://app.netatmo.net/oauth2/authorize?client_id=5caf68322f659210008b4656&response_type=code&redirect_uri=https://danielevelardi.duckdns.org/auth/external/callback&state=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmbG93X2lkIjoiMjY4NjMxNTc1ODY2NDExOWI3OWI2NjVhNTk1OGZkMzgifQ.7XxMQszyOXxc19OjEI8ARKbENiEqtZAAkBNgYM7Jj4Q&scope=access_camera access_presence read_camera read_homecoach read_presence read_smokedetector read_station read_thermostat write_camera write_thermostat&access_token=5c7827ee8dd0900c008b8151|f97a828c5011a96ba08bafc884a8b508
and then  I receive this HTTP error:
https://dxxxx.duckdns.org/auth/external/callback?state=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmbG93X2lkIjoiMmU0NzRmOTFlNDY5NDgwMmJhMzkzNmFjN2ZlM2IxNTUifQ.TID_-b7n272cejZMumwkO57jdyyVsf4mxZ3ecOTYFtc&code=df9ba3bab61a534d5bad02dcf7b858e6
I don't see 8123 port in URL, it's ok?
I also tried to call these URL:
https://app.netatmo.net/oauth2/authorize?client_id=5caf68322f659210008b4656&response_type=code&redirect_uri=https://dxxxxx.duckdns.org/auth/external/callback&state=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmbG93X2lkIjoiMjY4NjMxNTc1ODY2NDExOWI3OWI2NjVhNTk1OGZkMzgifQ.7XxMQszyOXxc19OjEI8ARKbENiEqtZAAkBNgYM7Jj4Q&scope=access_camera access_presence read_camera read_homecoach read_presence read_smokedetector read_station read_thermostat write_camera write_thermostat&access_token=5c7827ee8dd0900c008b8151|f97a828c5011a96ba08bafc884a8b508
https://dxxxx.duckdns.org:8123/auth/external/callback?state=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmbG93X2lkIjoiMmU0NzRmOTFlNDY5NDgwMmJhMzkzNmFjN2ZlM2IxNTUifQ.TID_-b7n272cejZMumwkO57jdyyVsf4mxZ3ecOTYFtc&code=df9ba3bab61a534d5bad02dcf7b858e6
but I received this error:
500 Internal Server Error
Server got itself in trouble
any ideas?

What browser on what device do you use?

I'm on Mac OS X, I tried with Google Chrome and Safari: same result!
I also tried form my iPhone: same result...
problem could be related to my HASSIO installation...

I am seeing a different issue, I think.
My camera shows up fine, but the smoke alarm and weather stations do not. I have been trying to set up 0.105.x for the past few days.
I see this in the log file:
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='prodvpn-eu-1.netatmo.net', port=443): Read timed out. (read timeout=30) 2020-02-14 07:36:46 ERROR (MainThread) [homeassistant.components.sensor] Error while setting up netatmo platform for sensor Traceback (most recent call last):   File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 159, in _async_setup_platform     await asyncio.wait_for(asyncio.shield(task), SLOW_SETUP_MAX_WAIT)   File "/usr/local/lib/python3.7/asyncio/tasks.py", line 442, in wait_for     return fut.result()   File "/usr/src/homeassistant/homeassistant/components/netatmo/sensor.py", line 129, in async_setup_entry     async_add_entities(await hass.async_add_executor_job(get_entities), True)   File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run     result = self.fn(*self.args, **self.kwargs)   File "/usr/src/homeassistant/homeassistant/components/netatmo/sensor.py", line 125, in get_entities     entities.extend(find_entities(data))   File "/usr/src/homeassistant/homeassistant/components/netatmo/sensor.py", line 100, in find_entities     all_module_infos = data.get_module_infos()   File "/usr/src/homeassistant/homeassistant/components/netatmo/sensor.py", line 527, in get_module_infos     return self.station_data.getModules()   File "/usr/local/lib/python3.7/site-packages/pyatmo/weather_station.py", line 82, in getModules     "module_name": s["module_name"], KeyError: 'module_name'

I have problem with integration...

@pilot1981 this is really difficult to reproduce. Have you tried to ask for help on discord yet?
@larserhardsen please contact me on discord to debug this. Also please open a new issue as this is an actual bug.

I have created an issue here: https://github.com/home-assistant/home-assistant/issues/31822

Hi,
I upgraded to 0.105.5 and now I'm able to get authorization from Netatmo webpage.
Now all work fine.
regards

Not sure if why It’s working now, but I’m glad to hear that.


Products -> Detail Page still shows product's page after the page is deleted

I guess it's the way Concrete5 works but it may be confusing to the Store user.
If you delete a product's page, it's deleted from the site tree but not from the database, it goes to the Trash and seats there until the Trash is cleaned. So
if ($page->isError())
will return false (in edit() of products single page controller).
But until then, if you go to Products -> Detail Page, it still shows Detail Page is set to: [product page]. So there's no way to generate a new page until the Trash is emptied. Maybe it's worth to add a warning to there to tell the user to empty Trash to enable new page generation?

This is an excellent point, there are ways to detect pages in the trash so this could be handled better.


Tracking issue for the extra_traits features

RFC2235.
https://github.com/rust-lang/rust/issues/57715

[ ] not all types derive all traits yet (e.g. grep for missing_debug_implementations)

cc @Susurrus

let's track this here instead: https://github.com/rust-lang/rust/issues/57715


Test against more recent versions of stdlib

This module only supports stdlib <5, while the most recent version is 5.1.0. I did simple testing by using all the hiera examples in  the Readme.md and it worked OK.  RHEL 7.
If we install the most recent version of stdlib, then install this module, it installs version 1.2.2, because at that time the requirement was stdlib >= 4.2.0

I am using puppet 6.0 and cannot use the most recent version 3.4.0, since it relies on stdlib < 5.  The newest version supported on puppet 6.0, from what I can tell, is 1.2.2 and this is VERY old.
Please update as stated above to current version of stdlib as stated above so that this will work with current version of puppet.


[💡 FEATURE REQUEST]: Make a universal configuration for running commands for all plugins

Plugin
Server
I have an idea!
Feature is a very similar to this https://github.com/roadrunner-server/roadrunner/issues/1570
on_init contained in server section but doesn't inherit user/group parameters. I want to specify these parameters explicitly.
server:
    command: "php public/index.php"
    user: www-data
    group: www-data
    on_init:
        command: "bin/console command:whoami" # echo whoami = root
        # user: www-data
        # group: www-data

In general, a more thorough improvement of the commands can be suggested. Now "command" is the simple path to the file, but it's worth turning this path into a more universal structure.
Like this:
server:
    command:
        path: "php public/index.php"
        user: "www-data"
        group: "www-data"
        another_param: "another_value"
    on_init:
        command:
            path: "bin/console command:whoami" # echo root
            another_param: "another_value"

service:
    schedule:run:
        command:
            path: "bin/console schedule:run"
            user: "www-data"
            group: "www-data"
            another_param: "another_value"
        process_num: 1
        exec_timeout: 0s
        remain_after_exit: true
        service_name_in_log: false
        restart_sec: 60

Now it is clear that there can be commands in different plugins and it is worth making a general configuration method. Thanks to this, it is not necessary to add a user and group setting to each plugin.

Hey @Kaspiman 👋🏻
This is not possible at the moment, as it would break config v3. Counfig should be stable between major releases. But since I like the idea, I'll put it in the Discuss column for 2024.1.0.
Thanks 👍🏻

Hi! Maybe for now we should add user/group for on_init only?

I don't think, that we need to add the user and group per every pool. All pools configuration (user and group) is located under the server plugin. I don't think, that we should duplicate these options all around the every command.

Thanks @Kaspiman, I thought of this suggestion:
        command:
            path: "bin/console schedule:run"
            user: "www-data"
            group: "www-data"
            another_param: "another_value"

Command nowaday is quite universal. I don't think that splitting command itself from it's args simplifies the use of the command. It'll also break all configs, plus it would be harder to just copy-paste the command into the RR command field.


The sign-up token is not treated as password

Changing <input type="text" name="token" required="" id="id_token" maxlength="10"> into type="password"  would allow password managers (in browsers) to store the token as password.

Good one. Will add.

Fixed, thanks!


Ignore libcrypto.ld and libssl.ld

These are auto generated files that should not be checked into git

Fixup commit pushed.

Pushed. Thanks.


Elbow tracking support OwO

Add support for elbow tracking using the SlimeVR feeder app (https://github.com/SlimeVR/SlimeVR-Feeder-App/releases/)
OwO

 Elbow Tracking


Update testcontainers-scala-postgresql, ... to 0.40.16

About this PR
📦 Updates

com.dimafeng:testcontainers-scala-postgresql
com.dimafeng:testcontainers-scala-scalatest

from 0.40.15 to 0.40.16
Usage
✅ Please merge!
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

⚙ Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "com.dimafeng" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "com.dimafeng" }
}]

labels: test-library-update, early-semver-minor, semver-spec-patch, commit-count:1

Superseded by #189.


ServiceLocator: ActionDescriptorCollectionProvider.GetCollection

            var providers =
                _serviceProvider.GetServices<IActionDescriptorProvider>()
                                .OrderBy(p => p.Order)
                                .ToArray();

This was fixed at some point https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.Core/Internal/ActionDescriptorCollectionProvider.cs


[SUGGESTION] "zero-copy" for better latencies

Hi there, 1st of all thanks for your (voluntary) work !
According to many - if not all - devs, the best approach to reduce latencies is to bypass the video buffering and implement the so-called "zero-copy" 'cause, according to @iEvgeny (the author of best-latencies multi-RTSP player CCTV Viewer):
"the absence of video buffering, which is in every player and introduces a significant delay up to several tens of seconds.
In addition, the new implementation uses the Zero-copy rendering method whenever possible."
...maybe the @alexeyvasilyev's rtsp-client-android lib could be - more easily ? - "ported" on Tizen too...
Last but not least, in order to push the "IP video-streams' players" evolution, we've collected/doxed some interesting projects (yours too) in our HyMPS project (under a dedicated page) and recently opened a discussion about "near-zero latency multiple (IP) video-streams playing" to stimulate the discussion/knowledge-share on the topic between developers/maintainers.
Check it out.
Hope that inspires !

Interesting info. I've been looking at other options to eliminate the re-streaming in my clone of this project.
vzakharchenko seems to be MIA.
My cloned project, https://github.com/homeautomaton/ethervue, adds audio and PTZ control. It's presently in a state of flux, as I have yet to remove the "add camera" web-based GUI option, when now all configuration is done by editing a .json file. I need to add a lot of documentation, too.


chore: add advice table with example data

:tada: This PR is included in version 2.0.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

:tada: This PR is included in version 2.0.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


All examples and demo should work on the main branch

The main branch should contain working and tested code, this means all the examples and demos should work if an agent from the main branch is created. This is not true for the development branch.
Currently, there are several examples that have been created that are not yet part of the CI these need to be added.

Image magick and gif conversion

Also it does not look like the globus tests are running in the CI this needs to be fixed.

The Globus tests have been fixed in this PR https://github.com/ORNL/zambeze/pull/68
Still need to ensure that examples are running as part of the CI/CD pipeline

After merging message infastructure into devel I need to make sure that devel examples are working.

Progress made here thanks to @renan-souza https://github.com/ORNL/zambeze/pull/88

Globus tests were fixed here: https://github.com/ORNL/zambeze/pull/99

Though the Globus plugin works, the Globus example needs to be made part of the CI.


Traffic Control: Alert when a road topic exists without associated model

Main change: Creation of a ModelAssociationChecker which periodically checks inconsistencies between Kafka and Hive Metastore.
Please note this PR is based on https://github.com/HotelsDotCom/data-highway/pull/37 as otherwise we would have used the deprecated Kafka API to list the topics.

I'm going to review this after the cluster is upgraded.


✨ Use descriptive placeholder instead of obsolete tags

Summary
This PR replaces a couple of literal tags that get replaced by the publishing workflow (.github/workflows/goreleaser.yml) with a statement to that effect.
Related issue(s)
Fixes #

@MikeSpreitzer I personally think that this is not a good idea because it makes the chart in main unusable with building locally.
I think latest should be the default in main, like for kubeflex, and could be customized to a specific tag during the release process.

@francostellari: we have support for testing locally, it replaces the placeholders. You can see it in the Makefile target local-chart. The E2E tests use that.

Thanks.
Approving after the call we had
/lgtm
/approve


docs and style fixes, limitrange and HPA implementation

@wlan0
#185 (still need to address the older converters)

Thanks for making the fixes. This LGTM


Using NavigationObstacle with StaticBody produces a warning

Godot version
4.0.beta2 / 3.5.1.stable
System information
Arch Linux
Issue description
A NavigationObstacle node will produce a warning if its parent is a static body.

The NavigationObstacle3D is intended for constantly moving bodies like CharacterBody3D or RigidDynamicBody3D as it creates only an RVO avoidance radius and does not follow scene geometry exactly.
Not constantly moving or complete static objects should be (re)baked to a NavigationMesh so agents can not only avoid them but also move along those objects outline at high detail.

But static bodies can be constantly moving too, they are just not movable by others. This is documented in 4.0 classref, but also applies to 3.x:

A static body is a simple body that can't be moved by external forces or contacts.

So I see no reason that it should not have a NavigationObstacle child.
Steps to reproduce
Add NavigationObstacle3D node as a child of StaticBody3D.
Minimal reproduction project
No response

Because you should bake static geometry to the navmesh for both pathfinding quality and performance.
Just because Godot allows you to move a StaticBody node around every frame (static only in name) like a KinematicBody or RigidBody node does not make the use with an avoidance obstacle less wrong. The warning was added because people would add obstacles to all their static collision geometry in the level and then complain about the horrendously bad path movement as a result.
Reminder that obstacles do not change the resulting path from the pathfinding, they only affect the actual actor movement in a radius. Basically if you use obstacles for the walls in your level that wall does not exist in the pathfinding. If you want an actor to move around e.g. corners in your level geometry in detail using obstacles is the worst option you can pick.

I understand that the obstacles don't affect pathfinding. The point of this issue is that static bodies are not always for building static geometry.
There're valid use cases for using static bodies as ... obstacles. e.g. obstacles in an obstacle course that move back and forth. This kind of physical objects can push the characters but can't be affected by other objects, which makes it perfect for static bodies. And AI characters are supposed to avoid them.

@timothyqiu I would say that for this use case there is AnimatableBody3D

@sadovsf AnimatableBody3D inherits from StaticBody3D, so NavigationObstacle3D still produces a warning for it.

I dont see this being the case in beta3:

@sadovsf Try putting the node as a direct child of AnimatableBody3D :)

@timothyqiu true, question is what is intended usage. But this type of collisions should be supported for sure

Changing obstacles from Node to Node2D/Node3D should be done. Would not break anything and remove the need for a warning and make the obstacle node use more flexible. Could still keep the old functionality or be attached as a child node but not as a hard requirement for usage.
There is no real technical reason to have NavigationObstacle nodes depend on a parent node compared to the NavigationAgent nodes. I think this was only done back in the day cause the obstacle started out as a cheap / shallow copy of the NavigationAgent node and it was never questioned enough if it would make sense.


make datetime objs timezone-aware and UTC default

requires (assumes) standard config of local system and hw clocks
(everything is UTC by default using system TZ offset)

After looking through several timezone-related PRs/issues, I think a simple UTC time config is probably the safest default, although it does rely on the system timezone being set.  That said, current Linux distros, modern Linux kernels, NTP, etc, are pretty standard.  Use as you see fit.

Coverage remained the same at ?% when pulling a40de1da25993545be4557aacbf668bb22b1694f on sarnold:utc-time into 7ab021c7d7b0f3e35bbb57b130134470283d3543 on dbader:master.

Hmm, the tests run here fine, and travis seems happy except for 2.7 where it bails with an import error building docs.  Got any tips for that?

If you're going to always use utc for timezone, how about datetime.datetime.utcnow() in place of datetime.datetime.now(timezone.utc)

I think I'm pretty much done with this one (pending feedback).  Thanks for making me update/add tests and learn something new...  ;)

Hmm, this looks okay now, albeit with some extra functionality and reworked tests.  Let me know if you'd rather have some squashing and/or more separation.

Note this is no longer just the timezone-awareness after the recent rebase; it now includes a few extra "features" like a tag parameter and some new job properties.  Also includes new tests for the above and green builds on linux/os/x and all the python versions.

Current totals are:
----------- coverage: platform linux, python 3.7.1-final-0 -----------
Name                   Stmts   Miss  Cover   Missing
----------------------------------------------------
schedule/__init__.py     274      4    99%   42-43, 462-466

26 passed in 0.93 seconds =====================

versus:
----------- coverage: platform linux, python 3.7.1-final-0 -----------
Name                        Stmts   Miss  Cover   Missing
---------------------------------------------------------
schedule/__init__.py          304      7    98%   42-43, 54-56, 508-512
schedule/parent_logger.py       8      0   100%
schedule/timezone.py           12      3    75%   13, 16, 19
---------------------------------------------------------
TOTAL                         324     10    97%

35 passed in 1.17s ==========================

came here because I was looking for an explicit way to define the timezone.
as a user I would like to specify the option (explicit timezone or server timezone).
couple nits:

use pytz instead of timezone.utc (more sustainable, also to support user defined timezone)
datetime.datetime.now(timezone.utc) is the correct way to get utc in python (utcnow() is naive)

besides this it lgtm

When will this branch be merged? We need it because it probably fixes the problem we had during the ending of Daylight Saving Time: we schedule jobs to run every minute, but for one hour no jobs are executed because the local time is changed from 3:00 to 2:00.

If you're going to always use utc for timezone, how about datetime.datetime.utcnow() in place of datetime.datetime.now(timezone.utc)

datetime.utcnow() is suppossed to be worse than datetime.now(timezone.utc)

Yeah can you merge this? I'm trying to schedule something, and can convert the time so that it matches the correct utc time, but I think daylight savings will mess it up


2786: Upgrade dependencies

Short description

Upgrade dependencies.
Proposed changes

Upgrade most dependencies
Increase memory limit for linting in CI

Blocked

@react-native-community/geolocation: Somehow crashes the app if using different location providers than google, see https://github.com/Agontuk/react-native-geolocation-service/issues/433#issuecomment-2131176759
entities: htmlparser2 expects v4.5.0 and does not work otherwise
@dr.pogodin/react-native-static-server (starting v0.8): RN 0.72 and minimum SDK 28
@math.gl/web-mercator: Dependency not found?
react-navigation-header-buttons: Lots of changes necessary and using of unstable flags.
webdriverio: E2E tests fail without any apparent reason.
webpack-dev-server: Error: Cannot set headers after they are sent to the client stops the server in the CI
decamelize, flat: Only ESM modules available
eslint: Lots of breaking changes in v9.0.0. Might be done in a separate issue once bugs are fixed.
react-native and react: Blocked by react-native-static-server.

Side effects

Hopefully none.
Testing

:warning: Test the whole app, both web and native!
Resolved issues

Fixes: #2786.

Urg, can you try deleting your node_modules and Pods and then reinstalling?

One thing perhaps: After you installed the pods/did the installation for iOS @LeandraH, I reverted some upgrades and dependency resolutions. So differing pod file is probably okay, just commit them.

It doesn't build for me anymore either, though that may partially be because I stupidly let my computer update Xcode this morning 🤦  I'm getting lots of "Could not build module XYZ" errors in React-RCTAppDelegate. Will try to figure that out tomorrow.

I got it working again, @f1sh1918 can you test again? Probably with deleting node_modules and deintegrating Pods

@f1sh1918 Can you give this another check? Just to see if it builds for you, I don't think you need to test the app itself if you don't have the time :)


bug: updating cache for onContractCall hook does not work properly

regression: difference in evaluated state for contracts:
w27141UQGgrCFhkiw9tL7A0-qWMQjbapU3mq2TfI4Cg,
Qa9SzAuwJR6xZp3UiKzokKEoRnt_utJKjFjTaSR85Xw,
38TR3D8BxlPTc89NOW67IkQQUPR8jDLaJNdYv-4wWfM
when cache is updated for onContractCall hook.

This problem occurs for some non-flat contracts (ie. contracts that make reads from other contracts) when EvaluationOptions.updateCacheForEachInteraction is set to false.

Duh..the reason was in CacheableExecutorFactory and caching the handlers...if contract A was calling contract B, and then contract B was calling contract A - both calls to contract A were sharing the same handler - and the same swGlobal object - which may lead to issues, if contract code was reading eg. swGlobal.block.height values...

fixed in https://github.com/redstone-finance/redstone-smartcontracts/pull/108, released in 0.4.36


Populate deploy_to variable with custom server property

I'm trying to populate the deploy_to variable with a custom server property (named organisation) to deploy the same application multiple times to the same server.
set :deploy_to, "/home/deploy/sites/#{server.properties.organisation}"
It seems impossible to load the server Array? using the fetch() method.

Sorry, I believe this is not possible with Capistrano. The only thing I can think of is to run the cap command multiple times with different arguments/environment variables. You might want to post this to Stack Overflow to see if that community there has more ideas.
--
GitHub issues are for feature requests or bug reports. Since this is more of a how-to question, I am closing this issue. The Capistrano team recommends you use Stack Overflow for general questions. For more details, please see our contribution policy.

Thank you for your comment. I'm using your idea as a workaround for now and asked the same question on Stack Overflow (http://stackoverflow.com/questions/38991846/how-to-populate-deploy-to-variable-with-custom-server-property).


Difficulties when translating 3D view name

Godot version
3.3.2, 3.4.beta1, 3.x(883bb2f4f6), 4.0(5de991d57c)
System information
macOS 11.4
Issue description
Name is shown on the top left corner of each 3D viewport, like "Top Orthognal". But i18n and l10n are done separately on each word and then joined with a space.
This is OK in English, but in languages like Chinese, the space is not needed. There is no way to get rid of the space because it's hardcoded.
Wording & order may also be different depending on the context in other languages. "Top Orthognal" may not always be "Top" + "Orthognal". For example, Top - 顶部,  Orthognal - 正交, but Top Orthognal should be 正交顶视图 in Chinese, which swaps the order and changes the words when used together.
Currently, "thanks" to the space, "顶部 正交" makes sense if you think it's displaying two separate fields. But it's not ideal since Top Orthognal is always 正交顶视图 in other 3D softwares (e.g. Blender).
Steps to reproduce
Open the 3D editor in Chinese.
Minimal reproduction project
No response

Yes that logic should be refactored to have the full names be translated, not be combined from sub-strings:
https://github.com/godotengine/godot/blob/c2c82de49de93d58f8be1255ca787e2aa8c7f129/editor/plugins/node_3d_editor_plugin.cpp#L759-L773
It wouldn't work at all for RTL languages, and the " [auto]" part can't be localized currently and hardcoding the space wouldn't be good either for RTL.


Supporting MCMCTempering in Turing

Adds a dependency to Turing on MCMCTempering, and in return allows for all of its samplers to be wrapped with Tempered to apply the Parallel Tempering algorithm during execution. To do this I have added a file to the inference submodule that implements a minimal set of API requirements exposed by MCMCTempering and then exported the relevant functions.

Pull Request Test Coverage Report for Build 892721789

0 of 30 (0.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage decreased (-1.6%) to 76.669%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

src/inference/tempering.jl
0
30
0.0%

Totals

Change from base Build 861690835:
-1.6%

Covered Lines:
1114

Relevant Lines:
1453

💛  - Coveralls

I've tried to improve the style a bit, please comment again if there is more to be done as I am not sure what the optimal is here as I see a lot of different approaches to function docs in Julia packages.
Will write some tests later today and add them also.

I've tried to improve the style a bit, please comment again if there is more to be done as I am not sure what the optimal is here as I see a lot of different approaches to function docs in Julia packages.

I tried to explain it in https://github.com/TuringLang/Turing.jl/pull/1628#discussion_r642977269.

I'm going to close this for now, as we'll need a completely new PR after https://github.com/TuringLang/MCMCTempering.jl/pull/133 anyways.


changing the index attribute in angular-cli.json breaks app

Versions
cli 1.6.0

Step 1
create default working app - confirm it works
Step 2
change the name of file src/index.html to src/default.html
Step 3
change "index" attribute in angular-cli.json
from ..."index": "index.html"
to... "index": "default.html"

Observed behavior
core.js:1448 ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'default.html'
Error: Cannot match any routes. URL Segment: 'default.html'
at ApplyRedirects.webpackJsonp.../../../router/esm5/router.js.ApplyRedirects.noMatchError (router.js:1719)
Desired behavior
I would expect to be able to browse to index.html (as a static page my express app) normally,
then when i browse to default.html - the angular app would proceed as normal
Mention any other details that might be useful (optional)
This issue arrises because Im trying to find a way to have HTML and my app co-exist in my build
when I try to change my express default behavior from -
app.get('*', (req,res) => {
res.sendFile(path.join(__dirname,'dist/index.html'));
})
to
app.get('*', (req,res) => {
res.sendFile(path.join(__dirname,'dist/default.html'));
})
The angular index.html gets executed anyway - not my default.html...(as static html)
SO I tried to flip the scenario - and make the angular app "default.html" and make my static HTML "index.html" - but that doesn't work either.
however - in the process, distilling this concept of renaming the 'index' property of the cli.json SHOULD work - otherwise, what's the point of having the angular-cli.json config file?
I hope that makes sense.

I have the same problem, I tried changing .angular-cli.json's apps index property to something other than index.html (so I can drop dist in a subfolder of overall website and it "just work").
Error message
ERROR in   Error: Child compilation failed:
  Entry module not found: Error: Can't resolve [snipped path]\my-awesome-app\src\index.html' in [snipped path]\my-awesome-app':
  Error: Can't resolve '[snipped path]\my-awesome-app\src\index.html' in '[snipped path]\my-awesome-app'

Looks like a problem with old version of the CLI. Let us close the issue for now. If it's still relevant, please open a new ticket with steps to reproduce and a minimal demo. Thanks!


smoke(electron): wait for page navigation to commit before using driver

Addresses the following error
[2022-08-04T00:58:03.481Z] getDriverHandle
[2022-08-04T00:58:03.768Z] Playwright (Electron): window.on('console') [[uncaught exception]: TypeError: Cannot read properties of undefined (reading 'getElements')]
[2022-08-04T00:58:03.768Z] Playwright (Electron): window.on('console') [TypeError: Cannot read properties of undefined (reading 'getElements')
    at eval (eval at evaluate (:192:30), <anonymous>:1:43)
    at UtilityScript.evaluate (<anonymous>:194:17)
    at UtilityScript.<anonymous> (<anonymous>:1:44)]

Example run https://dev.azure.com/vscode/VSCode/_build/results?buildId=70300&view=results
We currently rely on polling to identify if our custom driver is setup in the renderer, this broke with Electron 19 update very likely that playwright calls are made before the window has finished loading.
PR relies on https://playwright.dev/docs/api/class-electronapplication#electron-application-event-window to ensure window has finished navigation before the driver can be accessed.

Timeout is in Browser smoke tests, Electron smoke tests are fine. The event should only be used with Electron smoke tests, will make it conditional. Currently it is applied for both and that wouldn't work since the event is not present in the former.

We want this check to happen before checking for .monaco-workbench presence https://github.com/microsoft/vscode/blob/34f184263de048a6283af1d9eb9faab84da4547d/test/automation/src/application.ts#L120 but after workbench initialization https://github.com/microsoft/vscode/blob/34f184263de048a6283af1d9eb9faab84da4547d/test/automation/src/application.ts#L112 which happens after launch. Also, the launcher forwards access to the ElectronApplication to the driver https://github.com/microsoft/vscode/blob/34f184263de048a6283af1d9eb9faab84da4547d/test/automation/src/playwrightElectron.ts#L25, hence the current implementation.
If we were to move the implementation to Electron launcher, should the launcher now maintain access to the ElectronApplication ?

Yeah so I think I am acting up a bit against the conditional didFinishLoad. This encodes some underlying knowledge in otherwise target runtime agnostic code.
So I would rather have didFinishLoad also in the web case, even if that is a no-op. Does that make sense?

So I would rather have didFinishLoad also in the web case, even if that is a no-op. Does that make sense?

👍


Bug: Status bar misaligned

New RS update seems to have interfered with the position of status bars.

Not sure what caused this but closing the client didn't fix the issue neither did disabling then re-enabling the addon or reinstalling RuneLite.

Wait for the update


Enforce positive timestamps and maximal gaps

The timestamp of value 0 is somewhat specially treated by the library and used as initialiser for the field storedTimestamp in both compression & decompression.
This leads to a number of strange behaviours if in the middle of a series some timestamp is 0.
It might be a good idea to disallow all non-positive timestamps to protect users from those behaviours.
Also, the same could be applied for timestamps that are too far apart in time.

Yes, the storedTimestamp could be changed to something else or a boolean instead to detect the initialization part.
The other issues are a bit more tricky and more related to the application using them, due to way the original paper was written. The application using the library should take care of the block management, so writing a timestamp too far was never an issue that the library has to manage. Same applies to the negative timestamps, if we follow the original paper (in-order inserts).


feat/adds the light mode for home page

✨ Codu Pull Request 💻

👉 Please remove the below and replace with your own values, leaving the headers where they are. 👈
Pull Request details:

Fixes : Homepage should have light/dark mode #435

Any Breaking changes:

None

Associated Screenshots:

let me know if there is any other changes


Tool stats display incorrectly

The stats of every tool in the game (spefically the attack speed) displays incorrectly

Annoyingly, this also overrides mods that change the display of tool/weapon stats such as https://www.curseforge.com/minecraft/mc-mods/tool-stats

Hi there,
PlayerEx modifies tool stats to display Attack Speed and Attack Damage the same way all other attributes are displayed - in blue and red with positive and negative modifiers. Furthermore, the values you see are not incorrect. By default, Minecraft displays what your Attack Damage/Speed will be when the tool is equipped; that is to say, the final value is displayed. PlayerEx changes this to display the change in value - or rather, how the tool will affect the player. Note how in default Minecraft there is no + or -.
This is, naturally, not to everyone's liking; and can be a source of incompatibility between other mods that modify item tooltips, such as Tool Stats. That's why it can be configured in the mod's client config. Please see here for more information.
You have three config options:

PLAYEREX which is as described above.
VANILLA which displays the tooltip in the familiar green final value, but fixes a bug with default Minecraft that causes Attack Damage/Speed to not account for attribute modifiers.
DEFAULT which completely disables any modification of the tooltip by PlayerEx, and is implemented for cases such as yours where another mod is present that modifies the tooltip.

Hope that helps,
Thanks.


Katylouise/module decorator pattern

This is a first proof of concept for the decorator patterns done with @katylouise but we have not implemented all of them (or all of the possible attributes).
At the moment we are excluding all the nested objects from the JSON serialisation. That means that we would be possibly lacking some data when we append .json on a page in the front app. We might want to look into this further.

Coverage remained the same at 100.0% when pulling 575d6d32f5564aadedd891b5ea66eea5f50073ac on mattrayner:katylouise/module-decorator-pattern into e4b56674e67e7de41e79f45b732badd18196e021 on ukparliament:master.

Coverage remained the same at 100.0% when pulling 5e49e406ba62f88ae4a4b6e0079ebf1797504315 on mattrayner:katylouise/module-decorator-pattern into e4b56674e67e7de41e79f45b732badd18196e021 on ukparliament:master.

Coverage remained the same at 100.0% when pulling 1d82a0c5ef0d33c27a2e526a0367fd50b8292273 on mattrayner:katylouise/module-decorator-pattern into e4b56674e67e7de41e79f45b732badd18196e021 on ukparliament:master.

Coverage remained the same at 100.0% when pulling e1d3cf74e6b6e76fa28b2857009f9e6d5ac92699 on mattrayner:katylouise/module-decorator-pattern into e4b56674e67e7de41e79f45b732badd18196e021 on ukparliament:master.

Coverage remained the same at 100.0% when pulling 8f8a43576b27bd80328e75ec7294a292ef791243 on mattrayner:katylouise/module-decorator-pattern into 0282e5ce09a063043491a9fa5ad7ecb7741f5f5a on ukparliament:master.

Coverage decreased (-75.0%) to 25.0% when pulling 073bc09ab84a5e647aa07c39c1dd5cb5316dc056 on mattrayner:katylouise/module-decorator-pattern into 0282e5ce09a063043491a9fa5ad7ecb7741f5f5a on ukparliament:master.

Coverage remained the same at 100.0% when pulling 3a442dd55bc487a180f0bf29503aaaf43fe6391b on mattrayner:katylouise/module-decorator-pattern into 0282e5ce09a063043491a9fa5ad7ecb7741f5f5a on ukparliament:master.


Fix pageResultListener leak

See commit messages
This is probably also a bug in 1.0.X - I didn't include changes because I have to verify that first and I'll probably have to create a separate PR because the code diverged quite a lot

Codecov Report

Merging #5128 into master will increase coverage by 0.03%.
The diff coverage is 90%.

@@             Coverage Diff              @@
##             master    #5128      +/-   ##
============================================
+ Coverage     82.39%   82.42%   +0.03%
+ Complexity    11001    10999       -2
============================================
  Files          1331     1331
  Lines         45048    45051       +3
  Branches       5661     5662       +1
============================================
+ Hits          37116    37133      +17
+ Misses         5278     5263      -15
- Partials       2654     2655       +1

Impacted Files
Coverage Δ
Complexity Δ

...main/java/io/crate/jobs/PageDownstreamContext.java
81.48% <90%> (-0.34%)
42 <1> (ø)

...n/java/io/crate/exceptions/JobKilledException.java
0% <0%> (-66.67%)
0% <0%> (-1%)

...b/src/main/java/io/crate/blob/PutChunkRequest.java
47.05% <0%> (-52.95%)
4% <0%> (-2%)

...crate/executor/transport/TransportShardAction.java
77.5% <0%> (-12.5%)
8% <0%> (-1%)

...a/io/crate/metadata/sys/SysSnapshotsTableInfo.java
82.85% <0%> (-5.72%)
6% <0%> (-1%)

.../java/io/crate/blob/TransportDeleteBlobAction.java
75% <0%> (-5%)
5% <0%> (-1%)

...c/main/java/io/crate/exceptions/SQLExceptions.java
67.01% <0%> (-3.1%)
33% <0%> (-2%)

...executor/transport/TransportShardDeleteAction.java
66.03% <0%> (-1.89%)
10% <0%> (ø)

...main/java/io/crate/metadata/doc/DocSchemaInfo.java
83.78% <0%> (-0.91%)
29% <0%> (-1%)

...executor/transport/TransportShardUpsertAction.java
88.11% <0%> (-0.7%)
76% <0%> (-1%)

... and 12 more

Continue to review full report at Codecov.

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


Use cost as a metric

Is your feature request related to a problem? Please describe.
I'd like to know the average cost per test case
Describe the solution you'd like
Use cost as a metric without a threshold
Describe alternatives you've considered
I've tried both of these and neither seem to work:
  # this expects a threshold - Error: Cost assertion must have a threshold
  - metric: cost
    weight: 0
    type: cost
  # this shows a cost of zero - probably the cost field is undefined
  - metric: cost_js
    weight: 0
    type: javascript
    value: cost

Additional context
Add any other context or screenshots about the feature request here.
It might also be good to allow token counts to be metrics too

Hi @brendanator, we actually show average cost per test case already!  It's tucked away in that gray text at the bottom of the header

I do get the cost reported but it doesn't seem to be the average.  In my example here, the cost per completion is ~0.00095. The number reported on top is roughly 53*0.00095, which is about $0.051. Personally, I would prefer to see the average cost but both could be useful.


Ad not showing on real device

Ads shows on emulator but doesnt shows on the real device ...
why so ?
actually it shows test ads..
but real ad doesnt seems to be showing...
but on emulator working..

Since emulator are automatically considered as test devices, they will only get test ads. You can see here the possible reason of the ads not showing: https://support.google.com/admob/answer/9469204?hl=en
But I'll leave here the possible reason:

When you first sign up for AdMob, your account is reviewed before it’s approved. This typically takes up to 24 hours, but in rare cases can take up to 2 weeks.

Newly registered apps and newly created ad units typically take up to an hour to activate.

Hello @sushilbalami . Can you try this plugin in a newly created project? Some users have notice that projects created before flutter version 1.22 have some issues. See this

Since emulator are automatically considered as test devices, they will only get test ads. You can see here the possible reason of the ads not showing: https://support.google.com/admob/answer/9469204?hl=en
But I'll leave here the possible reason:

When you first sign up for AdMob, your account is reviewed before it’s approved. This typically takes up to 24 hours, but in rare cases can take up to 2 weeks.

Newly registered apps and newly created ad units typically take up to an hour to activate.

i had try in both emulator and mobile but same error the real ads r not working

@bdlukaa
hello i had got very confused and i had check u example app from
now i had used your example app to test my admob real ads
  /// Make sure you add this line here, so the plugin can access the native side
  WidgetsFlutterBinding.ensureInitialized();

  /// Make sure to initialize the MobileAds sdk. It returns a future
  /// that will be completed as soon as it initializes
  await MobileAds.initialize(
      interstitialAdUnitId: 'ca-app-pub-28205****37/3641**46',
      nativeAdUnitId: 'ca-app-pub-2820502455308437/9671****78',
      bannerAdUnitId: 'ca-app-pub-282050****3425');
  // This is my device id. Ad yours here
  //MobileAds.setTestDeviceIds(['9345804C1E5B8F0871DFE29CA0758842']);

  /// Run the app
  runApp(MyApp());
}```

wheather i had add ad uint id in other field link

```  final controller = NativeAdController(unitId: ??????????);

i had add AndroidManifest
<meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="ca-app-pub-2820*****08437~904***08392"/>

error on example app
D/DynamitePackage(32683): Instantiating com.google.android.gms.ads.ChimeraAdManagerCreatorImpl
I/Ads     (32683): Use RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("803137889471BFC07C5A5B6FF8AB8630")) to get test ads on this device.
I/DynamiteModule(32683): Considering local module com.google.android.gms.ads.dynamite:0 and remote module com.google.android.gms.ads.dynamite:210890500
I/DynamiteModule(32683): Selected remote version of com.google.android.gms.ads.dynamite, version >= 210890500
I/DynamiteModule(32683): Considering local module com.google.android.gms.ads.dynamite:0 and remote module com.google.android.gms.ads.dynamite:210890500
I/DynamiteModule(32683): Selected remote version of com.google.android.gms.ads.dynamite, version >= 210890500
2
D/AudioManager(32683): getStreamVolume isRestricted mode = 0
I/Ads     (32683): Ad failed to load : 3

so please help me i am beginer too and check my code
i need to reminder u as app  was not published and not link with firebase too
i had try different admob accounts but still same

If you are running in debug mode, you must add that test device code in that line you commented:
MobileAds.setTestDeviceIds([803137889471BFC07C5A5B6FF8AB8630]);
To test your real ads, run flutter run --release, but comment the line above

I/Ads     (32683): Ad failed to load : 3

According to wiki/Ad error codes, the request was successful, but no ad was returned due to lack of ad inventory.
That means this is not a problem with the implementation, but with the server.

hi guys
I had found an idea to solve an issue
the test is working fine but real ads are stopped or not served to our app
so we need to upload our app in any admob recommended store play store or mi store or others to solve this problem
I had uploaded my app to mi store after it was accepted or goes live in mi store The ads are working fine