WIP: Secret Providers POC

Change how secrets are managed so they are requested just in time by
the Engine from the CLI whenever they're needed, rather than stored in plaintext from the get go.
New (still ugly) MapSecret API

Similar to AddSecret but instead of providing the plaintext value
we map the URI of an external secret (e.g. vault://...) to a dagger.Secret
Need re-thinking

we may only want the CLI to map a secret (e.g. avoid a module "jail breaking" by mapping more external secrets)

MapSecret was shoved into the current API, some bits don't make sense

CLI implements 2 quick & dirty POC secret providers

env: like before
op: 1Password

Example:
# Env
BAR=baz dagger core container from --address alpine with-mounted-secret --path /tmp/secret.txt --source env://BAR terminal

# 1Password
dagger core container from --address alpine with-mounted-secret --path /tmp/secret.txt --source "op://Infra/ITEM/credential" terminal

PS: @sipsma @vito I have no idea what I'm doing ... I followed the socket pattern where it looks like we're "proxying" the BK session (bk -> engine -> cli). There's a lot of concepts in there however: bk session, nesting, clients, metadata, IDs ... and I don't know how much I missed

@aluzzardi Noice 😎

I have no idea what I'm doing ... I followed the socket pattern where it looks like we're "proxying" the BK session (bk -> engine -> cli). There's a lot of concepts in there however: bk session, nesting, clients, metadata, IDs ... and I don't know how much I missed

On a first quick glance this looks good so far!
I really really don't like that proxying part either, but it's necessary to coerce buildkit into working with our dagger session that consists of multiple clients. I'd prefer it was just engine -> cli but 🤷♂ for now.

we may only want the CLI to map a secret (e.g. avoid a module "jail breaking" by mapping more external secrets)

Fortunately, I think that jail breaking is already protected against in the code you have so far. Worth an integ test to confirm nonetheless, once you're at that point.
There's more details in the PR that added support for this, but basically each client in a session gets its own isolated secret store. The CLI is one client and every function call is its own client, so the secrets they can access are isolated from each other even though they are in the same session.
The end result is that if a module called mapSecret as you wrote it, it wouldn't just magically be mapping secrets from the CLI. It would actually be mapping the secrets to itself (which is weird, but not a jailbreak).
That being said, I would probably still call this function in mapSecret to only allow the CLI to call it, but just for correctness. Modules run in ephemeral containers so if they called it they may not be around any more to give the secret on demand, which would just be a confusing error.

(longer term thoughts)
In follow-ups, it would be cool if mapSecret could additionally point to a Function that gets called on demand to retrieve the secret plaintext.
If we have that, I think we could+should deprecate SetSecret. If all secrets were obtained on demand rather than being mutable things stored in memory so so so much would be simplified (we could probably just flip on function call caching by default, for example)

CLI implements 2 quick & dirty POC secret providers

Bit of an open question (and not really to-be-tackled in this PR), but how do we want to handle all of these? Are we gonna maintain all of these in-tree, or would we want to consider a plugin mechanism?
However we do it, I think we should be prepared for a lot of providers, and make it easy for users/contributors to add new ones - some ones that I would love:

OnePassword/Bitwarden/Infiscal/Vault/etc
pass, keepass
Kubernetes

Maybe we should keep the exec hook so we can easily allow extending with custom secret providers without needing source changes?

Similar to AddSecret but instead of providing the plaintext value
we map the URI of an external secret (e.g. vault://...) to a dagger.Secret

How would this work if there are multiple potential services for a single provider, e.g.:

logged into two one password sessions at once (maybe not possible)
have multiple kubeconfigs
need to connect to a remote vault, etc.

Would each provider have a similar scheme? Or would it be up to each provider to determine how to address a service, and then a secret within that service?

(longer term thoughts)
In follow-ups, it would be cool if mapSecret could additionally point to a Function that gets called on demand to retrieve the secret plaintext.

Cool - I like this :tada: Don't wanna derail too far, but just curious about this!

If we have that, I think we could+should deprecate SetSecret. If all secrets were obtained on demand rather than being mutable things stored in memory so so so much would be simplified (we could probably just flip on function call caching by default, for example)

Maybe :thinking: There's a use-case where I think it's still useful, even if we have all of this. I can take a secret like a password, but I need to "manipulate" the password into a config file (or a header, or an encoded env var) - see a couple of examples in our ci:
https://github.com/dagger/dagger/blob/006c2ff824cdc9b9208aa7554db64665bbbd64aa/.dagger/sdk_typescript.go#L202-L211
https://github.com/dagger/dagger/blob/006c2ff824cdc9b9208aa7554db64665bbbd64aa/.dagger/sdk.go#L133-L143
These do feel like a bit of a special case - they're "derived" secrets - I wonder if we could somehow support these in the API as the well? Maybe mapSecret with functions and self-calls would be enough to handle this case?

@sipsma

If we have that, I think we could+should deprecate SetSecret. If all secrets were obtained on demand rather than being mutable things stored in memory so so so much would be simplified (we could probably just flip on function call caching by default, for example)

+1000
@jedevc

Bit of an open question (and not really to-be-tackled in this PR), but how do we want to handle all of these? Are we gonna maintain all of these in-tree, or would we want to consider a plugin mechanism?

IMO, a plugin mechanism would be ideal but I don't know what kind of complexity that adds. Without it, we'd be able to maintain support for a good number of providers in-tree, especially with community support, but there will always be a huge list of requests for more providers

Bit of an open question (and not really to-be-tackled in this PR), but how do we want to handle all of these? Are we gonna maintain all of these in-tree, or would we want to consider a plugin mechanism?

:wave: chiming in here. The original idea in my head was if these plugins could be also modules so they could both serve as secret providers as well as stand-alone modules that could be also used for other types of operations. Still haven't through about all the details, just sharing some random ideas that came across my head while thinking about this :handshake:

@aluzzardi since the current API was designed with this extra feature in mind (#4426) couldn't you simply use the human-readable secret name as the url, and no longer need mapsecret()?

we may only want the CLI to map a secret (e.g. avoid a module "jail breaking" by mapping more external secrets)

Personally I like the idea of leaving the CLI in charge of the mapping. It's not just a matter of sandboxing (I saw @sipsma 's reassuring comment on that dimension) but also of portability. I don't think we want modules hardcoding op:// urls, that's guaranteed to not be reusable anywhere.
I like the idea of using "virtual environments" as the interface for CLI-controlled mapping, wdyt @sipsma @aluzzardi @kpenfound ?

We standardize on a standard unix-style env API, key/val strings.
API can request specific env key. We could even use them as defaults for secret arguments (// +defaultKey=API_TOKEN)
CLI is in charge of mapping. mapping would be configurable for the entire env, instead of secret-by-secret
Fine-grained per-secret URL would still be supported

We standardize on a standard unix-style env API, key/val strings

API can request specific env key

How would we present a 1-password vault in this style? I'm not too sure.
Maybe something like this:
func (*Module) Function(
	// +defaultKey="API_TOKEN"
	password *dagger.Secret,
) error {

Then:
$ dagger config map-secret API_TOKEN op://...
$ dagger call function

Or maybe even an interactive session to do all the secrets at once?
It feels like we still need some manual config and setup on the part of a user, because how would we map API_TOKEN into an op:// automagically?

I like the idea of using "virtual environments" as the interface for CLI-controlled mapping, wdyt @sipsma @aluzzardi @kpenfound ?

I think that's interesting but not specific to secrets. Arguments do change based on the environment, but IMO it affects all types, nothing "special" about secrets. For instance:DoIt(bucket string, awsCreds dagger.Secret, production bool). In this example, awsCreds are 100% co-dependant on bucket (changing one requires changing the other -- it's the creds FOR the bucket).
The current solution to avoid passing a bunch of arguments has been through default values. I think it might make sense exploring a different interface for passing arguments that can be environment specific. Something like, in order of preference: 1) In-code default value 2) Environment specific file 3) flag

We standardize on a standard unix-style env API, key/val strings

API can request specific env key

How would we present a 1-password vault in this style? I'm not too sure.

The most important question :)
My thinking is that to use this "virtual env" feature in your vault or password manager, you would have to adapt the layout of your vault. Specifically, you would have to create a single item containing all the key-values for your env, using custom fields.
I believe this is a known pattern, although perhaps not ubiquitous. I think, if it passes the gut check of @kpenfound, we should consider "blessing" that pattern as the correct one. It would make the problem of mapping go away completely, by moving it entirely in the password manager. In that way it's much simpler: Dagger doesn't need to implement any custom configuration for mapping: you simply use the tool you already have, to organize your environment as you see fit. Then you just pass that item to dagger. For example:
$ dagger --env=op://personal/acme/shykes-dev-env call deploy --token TOKEN

Under the hood, the CLI would read the secret value from op://personal/acme/shykes-dev-env/TOKEN

It feels like we still need some manual config and setup on the part of a user, because how would we map API_TOKEN into an op:// automagically?

Yes sometimes manual configuration will still be needed. In those cases, you would do as in this POC: pass op:// directly as value for one particular argument. Eg.
$ dagger --env=op://personal/acme/shykes-dev-env call deploy --token TOKEN --other-token op://shared/foo/some-other-place

IMO, a plugin mechanism would be ideal but I don't know what kind of complexity that adds

My 2 cents, penciled in opinion:

A plugin mechanism is hard to design and, even more, maintain without breaking

It would be our first foray into "meaningful interface" rather than mapping 1:1 what's in the module
Using containers for secret plugins is not ideal because sandboxing prevents trust

Secret providers would themselves need secrets to work (e.g. vault needs a vault token that's on the host)
More advanced use cases just don't work (e.g. in this POC I'm spawning the op CLI for 1Password which communicates over a proprietary API with the local 1Password agent)

There are many secret providers, but it's a finite number

I think with 5-10 in-tree providers we could handle 80-90% of use cases
Having the env and cmd provider as a escape hatch would cover the remaining 10-20% of use cases

Based on the 2 assumptions above, IMO we should:

Start with in-tree providers to get proper secret support out the door ASAP
Eventually, take our time to provide an extensible design

I believe this is a known pattern, although perhaps not ubiquitous. I think, if it passes the gut check of @kpenfound, we should consider "blessing" that pattern as the correct one. It would make the problem of mapping go away completely, by moving it entirely in the password manager. In that way it's much simpler: Dagger doesn't need to implement any custom configuration for mapping: you simply use the tool you already have, to organize your environment as you see fit. Then you just pass that item to dagger. For example:
$ dagger --env=op://personal/acme/shykes-dev-env call deploy --token TOKEN

I think this is too constraining as it requires re-tooling the secrets around dagger. Users would lose many of the benefits provided by their secret store (individual secret permissions, ownership, auditing, expiry, rotation, ...). Providers offer more than simple k/v storage (SSH key generation, Cloud tokens based on IAM, etc).
Doing this would be the equivalent of saying we don't support external secrets, instead dagger has its own secret mechanism. Similar to SOPS & co where the secrets are handled off platform, and the secret store is only there to store the key encrypting key.
Which is a valid model, but it's not a 1:1 alternative: either we support fetching secrets from providers, or we have our own secret mechanism and rely on an external vault to store the sensitive bits (whether it's a key encrypting key or an envrc-like file)

Dagger doesn't need to implement any custom configuration for mapping: you simply use the tool you already have, to organize your environment as you see fit. Then you just pass that item to dagger. For example:

$ dagger --env=op://personal/acme/shykes-dev-env call deploy --token TOKEN

I think this is too constraining as it requires re-tooling the secrets around dagger. Users would lose many of the benefits provided by their secret store (individual secret permissions, ownership, auditing, expiry, rotation, ...). Providers offer more than simple k/v storage (SSH key generation, Cloud tokens based on IAM, etc).
Doing this would be the equivalent of saying we don't support external secrets, instead dagger has its own secret mechanism. Similar to SOPS & co where the secrets are handled off platform, and the secret store is only there to store the key encrypting key.
Which is a valid model, but it's not a 1:1 alternative: either we support fetching secrets from providers, or we have our own secret mechanism and rely on an external vault to store the sensitive bits (whether it's a key encrypting key or an envrc-like file)

What I was suggesting was to have both as layered features:

Explicit per-argument mapping as you proposed
Virtual environments for convenience, in exchange for less fine-grained control

My issue is, if we only support the first layer (explicit per-argument mapping), how do we resolve the convenience problem? One of the most requested features is "contextual auth". How would you suggest we solve that problem, without having eg. op://shykes/super-specific/not-portable/path hardcoded in module source?

My issue is, if we only support the first layer (explicit per-argument mapping), how do we resolve the convenience problem? One of the most requested features is "contextual auth". How would you suggest we solve that problem, without having eg. op://shykes/super-specific/not-portable/path hardcoded in module source?

Replied in an earlier comment https://github.com/dagger/dagger/pull/8730#issuecomment-2427173526
IMHO it's not tied to secrets specifically.
You could stash the bucket in the secrets as well, but then it becomes this shadow system to map arbitrary k/v to environments, and everything becomes a secret. For instance, production bool would become a production *dagger.Secret which you're responsible to parse. Not to mention the loss in visibility from traces/TUI and the potential caching downsides.

My thinking is that to use this "virtual env" feature in your vault or password manager, you would have to adapt the layout of your vault. Specifically, you would have to create a single item containing all the key-values for your env, using custom fields.

I believe this is a known pattern, although perhaps not ubiquitous. I think, if it passes the gut check of @kpenfound, we should consider "blessing" that pattern as the correct one

This is where we start getting into the differences of "password managers" and "secret managers" IMO. In this way, they probably have different usage patterns with a tool like Dagger and we probably want both to feel natural. What I mean is, I could see a call with a "password manager" pointing to each individual value and looking something like:
dagger call my-pipeline --user op://foo/bar/user --password op://foo/bar/password --aws-token op://bar/baz/token
Those paths will point to specific secret values and the caller better have access to that secret.
On the other hand, with a "secret manager" like Vault or Infisical for example, you may have all of the credentials you need in a single map. And depending on who's asking for it, you might get handed different sets of credentials from the server. In that case, you might want a call to pull a whole map and look more like:
dagger call my-pipeline --secrets vault://ci/my-pipeline

What I was suggesting was to have both as layered features

That seems fine? I feel like adoption maturity will drive people to structure everything in a "secret manager" fashion. The part where it gets really sticky is when you're mixing password and secret managers in different environments. Like if you're using 1password locally and vault in Jenkins. In that situation I could see people using 1password entries more like secret maps to emulate what's happening in vault, etc.

IMHO it's not tied to secrets specifically.
You could stash the bucket in the secrets as well, but then it becomes this shadow system to map arbitrary k/v to environments, and everything becomes a secret. For instance, production bool would become a production *dagger.Secret which you're responsible to parse. Not to mention the loss in visibility from traces/TUI and the potential caching downsides.
In summary:

I agree with the lack of convenience
I think however it should be addressed in a secret-agnostic way, e.g. mapping arbitrary function inputs whether they're secrets or not
The mapping doesn't need to be stored in a secret provider, provided the mapping does not contain sensitive data (e.g. map to a secret URI rather than the plaintext value)

Yeah I agree it applies to other environment-specific configurations, which goes beyond secrets. I feel like "virtual environments" could be extended beyond secrets, to work with scalar configurations also. By the way that is how Github Actions "environment" feature works as well: they have secrets and "regular" variables. And of course, the original Unix environment also is used in that way.
So the revised example might be:
$ dagger --env=op://personal/acme/shykes-dev-env call deploy \
   --token TOKEN --bucket env:BUCKET

It works better in the shell:
$ dagger shell --env=op://personal/acme/shykes-dev-env
> deploy $TOKEN $BUCKET

In summary, is it fair to say the following @aluzzardi ?

you're not against virtual environments per se, but for them to work, they would have to:
Not be secrets-specific
Be flexible enough to be usable in real-world scenarios (eg. sometimes you can't reorganize all your secrets etc)

Just to keep this moving - I think it feels like we want to support both patterns?

The pattern in this PR, where you explicitly map each secret
The virtual environments pattern, where you map one item structured for dagger, and you can lookup each TOKEN in there.

I think just doing item 1 for now feels like a good start, and definitely better than the current status quo, as long as we make sure to follow-up with item 2 (I don't feel like we need to hit both in the same PR - if we can, wonderful).

Totally. Not sure how exactly, but I hope we can get rid of SetSecret in this PR -- the only remaining use case is a module returning a brand new secret. The "point to a Function" is interesting, no idea how that would work though?

Could we maybe do that change separately? I think there's some tricky use cases like I mentioned at the end of https://github.com/dagger/dagger/pull/8730#issuecomment-2422168796 that need some special consideration, and feel kind of separate to the design of secret providers long-term.
We need better SetSecret handling generally - maybe that's removal, or maybe we just need some tidier caching mechanics - but I think with this PR (and any follow-ups), we move the use cases where you even want to use SetSecret at all to a minimum, and we could carry on the discussion of what to do with it separately.

I took the liberty of rebasing

Here's a standalone script to try out this feature :)
#!/usr/bin/env dagger shell -q -m github.com/aluzzardi/dagger@secret-providers-poc

# op is only available as amd64 package on alpine
platform=linux/amd64

.core container --platform=$platform |
from alpine |
with-exec sh,-c,"echo https://downloads.1password.com/linux/alpinelinux/stable/ >> /etc/apk/repositories" |
with-file \
<EMAIL_ADDRESS>\
    $(.http<EMAIL_ADDRESS>|
with-exec apk,update |
with-exec apk,add,1password-cli |
with-file /bin/dagger $(cli | binary --platform=$platform) |
with-service-binding dagger-engine $(engine | service dev) |
with-env-variable _EXPERIMENTAL_DAGGER_RUNNER_HOST $(engine | service dev | endpoint --scheme=tcp) |
terminal --cmd=sh,-c,'op account add; eval $(op signin); dagger shell'

Instructions:

Execute the script
You will be prompted for 1password auth information.
You will land in an interactive dagger shell, with everything setup. Try .container | from alpine | with-secret-variable FOO $(.map-secret foo op://YOURVAULT/YOURSECRET) | terminal`

Quick note for a tricky case we might need to handle (had to deal with it in Concourse):
Vault supports generating multiple fields when you request a credential, so you can have ephemeral/rapidly-rotating credentials:
$ vault read aws/creds/my-role
Key                Value
---                -----
lease_id           aws/creds/my-role/f3e92392-7d9c-09c8-c921-575d62fe80d8
lease_duration     768h
lease_renewable    true
access_key         AKIAIOWQXTLW36DV7IEA
secret_key         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
session_token     <nil>

If I were to try to pass the access key and secret key as separate flags, I might try something like this:
dagger call deploy --access-key vault://aws/creds/my-role.access_key --secret-key vault://aws/creds/my-role.secret_key

For this to work we would need to be careful not to fetch the same credential twice - if we do, I'll end up with a access key and secret key that don't work together.
Is that handled already?

dagger call deploy --access-key vault://aws/creds/my-role.access_key --secret-key vault://aws/creds/my-role.secret_key
For this to work we would need to be careful not to fetch the same credential twice - if we do, I'll end up with a access key and secret key that don't work together.

How can the double fetch be avoided? Does that imply that we actually know the secret is vault://aws/creds and not vault://aws/creds/my-role.access_key, fetch more than the user requested (the entire thing), and keep it warm in case it's requested later on?
Or you're saying that for a given secret (vault://aws/creds/my-role.access_key), we should only fetch it once throughout the session?

I'm getting this error from all SDK tests (missing buildkit session id) ... any pointers @sipsma @helderco ?

3034: ! input: container.from.withMountedCache.withWorkdir.withDirectory.withServiceBinding.withEnvVariable.withMountedFile.withEnvVariable.withExec.withMountedSecret.withExec.sync InvalidArgument: rpc error: code = InvalidArgument desc = missing buildkit session id

@aluzzardi Just looking at the code here, my best guess is that the error is coming from this line, and that field might be missing because it was newly added but isn't getting set in the AddSecret method here.
That's probably relevant since AddSecret is called when you grant another client access to it (here). So just need to make sure that field gets transferred over when the secret is added to another store.

@sipsma 🤦 Sorry I thought there was some dark magic involved for getting the session ID automatically, this PR is quite old and missed the fact I forgot to plumb that argument through.
Surprisingly enough -- when I opened this PR, it did work (see screenshot of the original comment). Not sure why? I thought the CI errors were related to some SDK magic.

@sipsma 🤦 Sorry I thought there was some dark magic involved for getting the session ID automatically, this PR is quite old and missed the fact I forgot to plumb that argument through.
Surprisingly enough -- when I opened this PR, it did work (see screenshot of the original comment). Not sure why? I thought the CI errors were related to some SDK magic.

Oh yeah -- I'm plumbing the session ID when calling MapSecret but not AddSecret. Design is still in progress (e.g. do we add "ephemeral secrets" through callbacks and get rid of AddSecret altogether?).
Not sure why the SDK tests are triggering the session ID code path since it's only called when Plaintext is nil (which only happens for MapSecret, which the SDK tests shouldn't be doing?)

@sipsma I'm getting nested call failures (e.g. Error: input: mapSecret only the main client can call this function) here:
https://github.com/dagger/dagger/blob/main/core/integration/module_call_test.go#L500-L510
Is that caused by dagger in dagger in the tests?

@sipsma I'm getting nested call failures (e.g. Error: input: mapSecret only the main client can call this function) here:
https://github.com/dagger/dagger/blob/main/core/integration/module_call_test.go#L500-L510
Is that caused by dagger in dagger in the tests?

@aluzzardi Ah yeah, getting stuff like this to work w/ nested clients is always a bit annoying. But looking at the implementation right now, I think you could actually just drop the check for RequireMainClient in mapSecret. When the secret is mapped in, the buildkit session ID is included, so there's no risk of a nested client or module mapping a secret in that points back to the main client. We need to be sure that you either can't overwrite already mapped secrets, or if we do allow that always be sure to set the buildkit session ID again too. But given that this should all be safe I believe.
Side note: I do think that before merging we should probably hide this API from module clients for now since they could do broken things like map in a secret and return a value w/ it referenced, which would fail when the secret is attempted to be accessed (since the module client will not be running anymore by then). There's already existing APIs we hide from module clients, so nothing too new needed here. For nested clients, this shouldn't be a problem since they can't "return" values.

@sipsma 🙏

@sipsma Still struggling with nested client :/
I removed the main client check, added the provider to setupNestedClient, but the provider is failing to lookup the env var. Probably happening in the wrong environment.

@aluzzardi Ah okay, yep that code runs in the engine, not the container, so you have to jump through an extra hoop to get it to work consistently in nested execs. You can see that happening for the filesync/socket attachables too in that chunk of code.
The idea would be that the session attachable reads env vars from state.origEnvMap rather than os.Getenv.
This is kind of absurd though and I'm not sure it's gonna be feasible for any mapped secrets more involved than "read env var" (i.e. "call 1password cli"). There is the option to just not use nested execs in the integ tests for this, but I feel like we need some generic fix here to squash this from continuing to be a headache.

Ideally we could just run the dagger cli in the nested exec so all that code is completely reusable, then none of this would a problem. IIRC there's some subtlety that made that difficult, but I'm gonna take a quick look to sketch that out.

Ideally we could just run the dagger cli in the nested exec so all that code is completely reusable, then none of this would a problem. IIRC there's some subtlety that made that difficult, but I'm gonna take a quick look to sketch that out.

Okay remembered why this is not straightforward, it's because none of the existing subcommands on dagger do what we need precisely. We want to give the nested exec access just to it's own API it's being presented, not the entire engine listener (which opens all sorts of doors for weird behavior we don't want to support and/or security concerns). We also want to avoid a setup of 2+ listeners where all the traffic has to hop between multiple servers to get back to the engine.
So we'd need to add some extra hidden subcommand to the dagger CLI to implement this. But honestly that seems worth it at this point since this is such a silly thing to get blocked on and have to jump through so many hoops to support. It's only gonna get worse too unless we squash this.
I'll give this a quick shot.

This fixes the problems mentioned in the last few comments: https://github.com/dagger/dagger/pull/9262, should only need one impl of the secret mapper after that

Design questions:

How can we handle native auth methods, for example Docker (read a config file on the host, and depending on the contents, possibly execute a native helper on the host); or Depot (read a config file on the host)? Are those secret providers too? And if so what would the URLs look like?

Do we really need a new mapSecret function? Back when we designed setSecret we specifically left the door open to secret providers. The idea was that we could later make the name argument special, eg. op:// and the plaintext optional. Did that idea turn out to be flawed? It might help with backwards compat?

Before
After

set-secret mypassword top-secret
set-secret op://private/mypassword

wdyt?
(cc @kpenfound @sipsma )

How can the double fetch be avoided? Does that imply that we actually know the secret is vault://aws/creds/my-role and not vault://aws/creds/my-role.access_key, fetch more than the user requested (the entire thing), and keep it warm in case it's requested later on?

Yep - in Concourse we would fetch all the fields at the same time and cache them in memory for future references to them.

Is the .<field> syntax something you came up with? Looking at the docs, it seems like there's no "official" field syntax (CLI is through -field flag, GitHub Action is <path>SPACE<field>, GitLab is using vault: production/db/password # Translates to secret: kv-v2/data/production/db, field: password)

Yeah, afaik there's no consistent pattern here so we just went with .foo for field access in Concourse and I repeated it in the fake syntax here. It's possible we don't need a special . syntax and can just deduce it based on structure of the value that's present in the provider, but I kind of like the explicitness.
Since there's no real consistency between providers (at least at the time), in general as much was left up to the provider as possible, but we minimally needed a mechanism for fetching entire sets of fields at once and selecting fields off of them, rather than selecting one field at a time.


HTML entities (°) do not display properly in Evapotranspiration and Runoff tables for lat/lon reports

Closed by #650.


Add korean translation

Hi! I viewed your repo for reference.
I saw there's no Korean language support, so add Korean strings.xml.

@wlals822 I added Vietnamese language support for this app. However, I have failed the check. I just translated and stored in the res/values-vi/strings.xml file. How did you do your issue and passed the check? I saw your files changed, the path res/values-ko/strings.xml. I think they are same. Would you please show me did you change anything else?

@susantruong I only changed strings.xml too.  The reason you fail could be lint problem.


feature - recent ui

Github Issue URL/Tags (required)
What's this PR do? Please give a technical summary (required)

[x] create recent ui

Any references (stackoverflow …) (optional)

Total linter violations in pull request: 1
Serious: 0
Warnings: 1

:+1: There are no linter violations.


How to rename both file and folder?

I have a folder structure like:
project-name/
├─ components/
│  ├─ Navbar/
│  │  ├─ Navbar.tsx

when I rename the Navbar file all works fine but if I try to rename both folder and file to get some like that:
project-name/
├─ components/
│  ├─ Navbar2/
│  │  ├─ Navbar2.tsx

I get an error... How I can handle this?

This would need to be implemented upstream in typescript-language-server. I had written a very tortured workaround for this that involved scanning a directory's files, but as it goes against the philosophy of this plugin, I don't plan on implementing it here.

VSCode can track the rename of the files and the folders separately: you cannot rename the folder and the file in one action. Maybe a second command :TypescriptRenameFolder could be one solution

Unlike Neovim, VS Code doesn't have to use typescript-language-server as an intermediary between the editor and tsserver, so its behavior is quite different (it also contains a large number of off-spec features and optimizations specifically for TypeScript which we wouldn't be able to replicate either way). This isn't a matter of having a separate command - until the language server supports it, I don't plan on adding support here.

Thank you!


Remove order before transition to IncomingOrderRequest

fixes https://github.com/itchysats/itchysats/issues/524

bors r+


TagBot trigger issue

This issue is used to trigger TagBot; feel free to unsubscribe.
If you haven't already, you should update your TagBot.yml to include issue comment triggers.
Please see this post on Discourse for instructions and more details.
If you'd like for me to do this for you, comment TagBot fix on this issue.
I'll open a PR within a few hours, please be patient!

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/88687

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

TagBot fix

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/91846

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/92098

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/92291

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/92199

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/92413

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/92419

Triggering TagBot for merged registry pull request: https://github.com/JuliaRegistries/General/pull/92458

Triggering TagBot for merged registry pull request
This extra notification is being sent because I expected a tag to exist by now, but it doesn't.
You may want to check your TagBot configuration to ensure that it's running, and if it is, check the logs to make sure that there are no errors.


Updated link to article

The link to the Article "Using the Seeed Studio Raspberry Pi Relay Board" wasn't working anymore.

@Tetrikus thanks for catching that.


DocsArchive-<IP_ADDRESS>Auto archive content

Please don't merge this PR until target archive repo PR https://github.com/OPS-E2E-PPE/docs-archive-test-source-version-target/pull/251 is merged into live branch.
Auto archive content to https://github.com/opstest2/docs-archive-test-source-version-target.git

Docs Build status updates of commit 755a960:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

.openpublishing.redirection.json
:white_check_mark:Succeeded

versioningArchiveSourceFolder/docfx.json
:white_check_mark:Succeeded

versioningArchiveSourceFolder/TOC.yml
:white_check_mark:Succeeded
View (sql-server-2014 || azuresqldb-current || azuresqldb-mi-current || azure-sqldw-latest || >= aps-pdw-2016 || >= sql-server-2016 || >= sql-server-linux-2017 || sql-server-previousversions || sqlallproducts-allversions)

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel


Failed to parse config from file 'dfx/state/replicated_state/ic.json5': missing field listening_port

The commands "dfx start", "dfx start --clean" and "dfx replica" throw an exception: Failed to parse config from file 'dfx/state/replicated_state/ic.json5': missing field listening_port with the "dfx-0.12.0-beta.1-x86_64-linux" version.
This puts the process in a state where it rejects attempts to install canisters with ic-nns-init, I haven't tried other ways of calling the process but it looks like it's broken.
I added the missing property to the generated config while preventing it's deletion (dfx always deletes the config on start) without success.

We have tests that cover the various ways to start the replica on Linux. Are there any extra logs you can share?

I haven't seen any reports of this for both 0.12.0-beta.2 and 0.12.0-beta.3 so I'll close this for now. If the issue reappears, feel free to re-open.


[BUG] Multiple text lines on canvas are overlapped

Environment

chrome-aws-lambda Version: 2.0.1
puppeteer / puppeteer-core Version:  2.0.0
OS: Amazon Linux 2
Node.js Version: 10.x
Lambda / GCF Runtime: nodejs10.x

Expected Behavior

Text lines are not overlapped. (This image is rendered from my PC which is running debian linux)
Current Behavior

Text lines are overlapped when running on aws lambda.
Possible Solution
N/A
Steps to Reproduce
Render text element on canvas with multiple lines separated by the new line character. For example: '7.1%\nFLR{sub|95}'
Note: These graphics are rendered from echarts charting library.

@gihanw If you could share some repro that would be helpful to hone down the issue, but at first sight it seems and without more information, it seems that your local Debian is rendering the text with a different font-face than the one available on Lambda (note the curvature on the 7).
By default, Lambda ships only with DejaVu font on Node 8.x runtime, and on other runtimes this package bundles Roboto font-face. I recommend you check which font is being used to render the SVG on your local setup and provision that same font on the Lambda using the font() method.


Temporarily skip javadoc for modules where it fails

Be sure to do all of the following to help us incorporate your contribution
quickly and easily:

[x] Make sure the PR title is formatted like:
[BEAM-<Jira issue #>] Description of pull request
[x] Make sure tests pass via mvn clean verify. (Even better, enable
Travis-CI on your fork and ensure the whole test matrix passes).
[x] Replace <Jira issue #> in the title with the actual Jira issue
number, if there is one.
[x] If this contribution is large, please file an Apache
Individual Contributor License Agreement.

This should fix remaining javadoc build issues.

R: @davorbonaci @dhalperi @jbonofre

LGTM


python310Packages.scmrepo: 0.1.16 -> 0.1.17

Diff: https://github.com/iterative/scmrepo/compare/refs/tags/0.1.16...0.1.17
Changelog: https://github.com/iterative/scmrepo/releases/tag/0.1.17
Description of changes

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 223099 run on x86_64-linux 1

4 packages failed to build:

dvc
dvc-with-remotes
dvc-with-remotes.dist
dvc.dist

4 packages built:

python310Packages.scmrepo
python310Packages.scmrepo.dist
python311Packages.scmrepo
python311Packages.scmrepo.dist


Bootstrap 3 alerts not showing

The class "fade" makes the alert with opacity 0, so it's hidden. Working under bootstrap 4 correctly.

Please make a pull request. Thanks.

I'II make 2 different views for the 2 different bootstrap version, so that you can decide the correct view according to the bootstrap version in use

Okay, do that and then we can take a look at it.


Security Assessment: Rate Limiting for API usage on Pool and Gate

Based on the Security Assessment we should introduce rate limiting for Pool and Gate
https://confluence.catena-x.net/pages/viewpage.action?spaceKey=cxsecurity&title=Security+Assessment+-+BPDM+Golden+Record

Please don't link to infermation which is not publicly accessible. Add the information to the issue so it's available to see for evrybody. If for security reasons that is not possible please get in touch with me again


Check and update documentation

Checked the documentation for typos and updated it where needed for readability.
This should fix issue #21.

May you also check the readme.md file? Thanks

@iusehooks Hi! I've updated the pull request. Let me know if there is anything else to do!

Hi @Ginger-Llama.
PR is approved.
Thanks for contribuiting.


BUG: float truncation in eval with py 2

[x] closes #14241
[x] tests added / passed
[x] passes git diff upstream/master | flake8 --diff
[x] whatsnew entry

Python 2 only - apparently str() rounds shorter than repr()
In [1]: f =<PHONE_NUMBER>.006

In [2]: str(f)
Out[2]: '1000000000.01'

In [3]: repr(f)
Out[3]: '1000000000.006'

Current coverage is 85.25% (diff: 100%)

Merging #14255 into master will increase coverage by <.01%

@@             master     #14255   diff @@
==========================================
  Files           140        140
  Lines         50568      50570     +2
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
+ Hits          43112      43114     +2
  Misses         7456       7456
  Partials          0          0

Powered by Codecov. Last update a7469cf...b386184

can you change the pytables test to add 3 values, then have the scalar select the middle one select and having it return empty doesn't prove it works, more like proves it doesn't not work :>

i don't know how equality of floats works in numexpr / HDF5
it might test well for us but fail on some platforms (just a guess) - so include if passes

thanks!


rclone: 1.49.5 -> 1.50.0

Package bump due to new release: https://github.com/rclone/rclone/releases/tag/v1.50.0

@GrahamcOfBorg build rclone

We might want to revert: https://github.com/rclone/rclone/issues/3685


FR: Add support for Consul KV as Filer database

Since Consul is very popular for clusters and it is pretty easy to setup a highly available Consul cluster, I would really like to see support for it's key value store in Seaweed as a Filer database.

there are simply too many kv stores. do you want to work on this?

my impression is that consul kv store is mainly for consistency, not for high performance.


Add CI binaries to release artefacts

We want to have the binaries built by the CI also available as release artefacts so that people have less chance to use modified versions.
For:

Linux x86 and arm64
Windows/macOS is not needed

The binaries are actually already part of the release artefacts.


SDK methods

SDK Method - createShipment:
While using the Aramex SDK, I have come across the createShipment method. I would like clarification on the roles of the shipper and consignee in this context. Specifically:
Is the shipper typically the seller's address, or does it refer to another entity?
Similarly, who is considered the consignee? Is it the buyer's address, or is there a different definition?
SDK Method - calculateRate:
In the calculateRate method of the Aramex SDK, I am uncertain about the meaning of the originAddress. Could you please clarify whether this should be the seller's address or if it refers to an Aramex-specific location?

The shipper is the origin of the product, basically if you want to ship product from point A to B, the shipper address / seller address / origin address  is the address of A, and the consignee address is the address of B.
A is the address of the seller
B is the address of the buyer
For calculate rate method, the origin address is the address you want to ship from (in other words, address of A), and usually it's a warehouse or a shop, ...etc.
and there's no Aramex-specific locations in those scenarios.
Please refer to the official Aramex documentation and make sure you read it before you start the integration, because there are a lot of specific details and aspects that I can't cover in my mini-documentation.

Thanks for the reply


⚠ AGEG website (prod) has degraded performance

In 4a0623d, AGEG website (prod) (https://www.ageg.ca/) experienced degraded performance:

HTTP code: 200
Response time: 2511 ms

Resolved: AGEG website (prod) performance has improved in eab97e6.


Current download-checker for XMM raw data is very crude

Doesn't check for presence of particular instrument files, just that there is a directory for the particular ObsID - definitely needs to be more sophisticated

Now very crude for NuSTARPointed as well...
Should check for the presence of key files I suppose, but knowing what they are a priori can be tricky.


How to make a footer in drawer?

    ....

    This div doesn't go to the bottom properly. If you try absolute, it will conflict with overlay.

Adding flex flex-col justify-end in the drawer-side className and wrap the label and ul also conflicts

I have the same question... @bsor-dev  - how did you solve it?
Any chance you could give some info here, @saadeghi ?
When I try to add a   after the  it doesn't render well, it goes to the top, instead of rendering after the

Here's an example where footer is in content section:
https://play.tailwindcss.com/oKamNfzThE
Here's an example where footer is inside the sidebar:
https://play.tailwindcss.com/AtS0Dh2lnC
The trick is having flex flex-col and adding grow to the section you want to fill the empty space and push the footer to stick to bottom

Amazing, thanks very much, @saadeghi


Increment version for signalr releases

Increment package version after release of Microsoft.Azure.WebJobs.Extensions.SignalRService

API change check
API changes are not detected in this pull request.


TextInput color crash on RN Android

Bug with<EMAIL_ADDRESS><EMAIL_ADDRESS>and<EMAIL_ADDRESS>This component:
const Input = styled.TextInput`
  font-size: 14;
  letter-spacing: -0.5;
  font-weight: bold;
  background-color: transparent;
  color: ${props => props.color};
  height: 40;
  padding-horizontal: 0;
  text-align: ${props => props.align};
  font-family: OpenSans;
  margin-top: 20;
`;

when rendering with  this code:
return <Input testID={testID} editable={editable} {...inputProps} color={'#242424'} innerRef={this.handleInputRef} />;
Crashes with error:

When using this code:
return <Input testID={testID} editable={editable} {...inputProps} style={{ color: '#242424' }} innerRef={this.handleInputRef} />;

It works fine (removing color: ${props => props.color}; from the component above).

We've been seeing a LOT of issues with RN 0.57, many from in RN core itself. I think it's just a really buggy release and recommend sticking with 0.56 for the moment which seems to be working fine.

That being said, if you could supply a reproduction repo I could try and investigate

Thanks for the comments, I will see if I can provide one.

I am experiencing the same problem with version 0.59.10.
Has anyone got a solution?


API to retrieve song lyrics

Would be great to have an API to retrieve song lyrics, with proper time codes.
Looks like it's possible as this js package does it.

This is in the new-api branch that is currently being developed: #891
Thanks for the link though, it's got a more basic HTTP lyrics endpoint as well as a search endpoint that I will implement.

The APIs are now in dev (see the spclient) and return a JSON response. I intend to add a native Rust struct in metadata later. Some work on this was already done in the new-api discussion, feel free to contribute! (also a great starting point for Rust or librespot newcomers)


Update nf-tests so full modules are only run in module tests

Use expedited options for geNomad, checkv, iphop, pharokka, and instrain in subworkflow, workflow, and pipeline nf-tests


See Completed tasks ?

I want to be able to delete tasks that are no longer required, even if they are completed.
I could store the taskID for later.
But if there was a way of accessing completed tasks, it could be helpful ?
is it practical ?

I'm away at the moment, I'd need to just work that through, but I think it should be feasible.

Thanks.
In a dream world, when a task was clicked as completed, it would trigger an event into home assistant.  But I guess I'm asking too much now !

Never triggered events in HA, but I can certainly look and see if I can learn something new.

Just working up to doing this. Basically I'll have to add a poll for completed items (I think it does it on 10 seconds, but not 100% sure). Can't do it so it is instantaneous, because that would required a webhook url on the HA instance, and all the challenges required of getting people to configure an internet accessible HA instance, etc.
Are you wanting display of completed items, or just the event so you can trigger delete?

Ideally I’d get a list of all tasks instead of just open tasks.
Then complete or not would be an attribute.
If that’s not possible then just an event that told me a task had been ticked would be fine.
A delay before that happens is fine.
Bruce Hartley
Click Spares
07966 924863

From: RogerSelwyn @.>
Sent: Sunday, February 19, 2023 9:09:27 AM
To: RogerSelwyn/O365-HomeAssistant @.>
Cc: Bruce Hartley @.>; Author @.>
Subject: Re: [RogerSelwyn/O365-HomeAssistant] See Completed tasks ? (Issue #122)
Just working up to doing this. Basically I'll have to add a poll for completed items (I think it does it on 10 seconds, but not 100% sure). Can't do it so it is instantaneous, because that would required a webhook url on the HA instance, and all the challenges required of getting people to configure an internet accessible HA instance, etc.
Are you wanting display of completed items, or just the event so you can trigger delete?
—
Reply to this email directly, view it on GitHubhttps://github.com/RogerSelwyn/O365-HomeAssistant/issues/122#issuecomment-1435932136, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AHFFIDO4FBI3I76IKJ2REUDWYHPMPANCNFSM6AAAAAAUY26U3U.
You are receiving this because you authored the thread.Message ID: @.***>

Completed with - https://github.com/RogerSelwyn/O365-HomeAssistant/releases/tag/v4.2.3
See here for config details - https://rogerselwyn.github.io/O365-HomeAssistant/tasks_configuration.html and here for events - https://rogerselwyn.github.io/O365-HomeAssistant/events.html

I've got a task that was completed and deleted from the app.
It is still showing in home assistant as a "completed task".
I've done a home assistant restart, it still shows ?
I executed the service to delete it and it went away, but it didn't exist in the app even before I did that?
thoughts ?

I’ll take a look and see if a delete from an external app actually deletes it. What so are you using? I use Reminders on iPhone but there are plenty of other ways.

I'm using the microsoft todo app.
previously it did delete it.
I'm wondering if it is a timing issue?

I'll have an experiment tomorrow.

Bear in mind before I wasn’t showing completed items, so it might appear ‘deleted’ but actually be completed. I’ll take a look tomorrow on what happens when an item is deleted.

I'm having problems reproducing this problem.
So happy to put it down to weirdness for now.  I'll let you know if I see it happen again.

I just tried as well, using To Do for Mac. As far as I can see deleting something int To Do, deletes it from MS 365, so it should not be able to be retrieved. I'd do a cache clear (Cmd/Shift/R) in your browser. I do sometimes find I need to do that to get sensors to show properly even after a restart. As you can imagine in Dev I'm restarting very often....


fix: temporarily avoiding error instrumentation

For some reason with recent dep updates , when error instrumentation is enabled on server run function
it goes crazy
https://docs.rs/tracing/latest/tracing/attr.instrument.html

I've made some other attempts with the macro, adding derive display and debug on the server struct but without success...

I think the "fix" is probably to add the #![recursion_limit = "256"] attribute to trustd/src/main.rs as it appears the latest opentelemetry requires more than the default limit of 128.
But I continue to question why we need to depend on a pre-release of opentelemetry. If we don't, then I'd prefer we continue using the latest stable version.

closing to reduce the discussion related to revert and limit only :+1:


Request: Option to disable line highlighting in the gutter.

I don't use line numbers or line highlighting so the light gutter current line highlight really sticks out. While I can manually edit the theme to remove this small highlight, I would really appreciate it if I only had to do it by adding an option to Settings. Is this something that can be done? Thanks for the awesome theme by the way.

Sorry, Sublime doesn't let you do that.


teuthology/beanstalk: workaround yaml load deprication

There is a deprecation error when beanstalk parser called:
  YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe

Since beanstalkc3 does not want to apply a fix for that
we can override yaml parser to suppress the error message
from the log.
Fixes: https://tracker.ceph.com/issues/44225
Signed-off-by: Kyr Shatskyy<EMAIL_ADDRESS>

s/deprication/deprecation/


修复blockhash生成问题

joke

The following steps will be help for you to fix the error in DCO check.
https://github.com/hyperledger/blockchain-explorer/pull/136/checks?check_run_id=856621937


AdaptiveLayout delegate animating primaryNavigation sequentially instead of in parallel

Steps to Reproduce

Execute  flutter run -d chrome lib/adaptive_layout_demo.dart in the flutter_adaptive_scaffold project
As the app is sized between medium and small breakpoints, the primary nav bar animates in and out of the screen

Expected results:
The primary navigation bar animates in nicely. The icons slide in with the background area from off screen to on screen.
When the navigation bar animates out, I would expect the animation to reverse and show the icons sliding away with its container off the screen. The bottom nav bar animates like this.
Actual results:
During the primary nav bar's "out" animation, the icons disappear in a flash, then the slot animates off the screen.
I think the intent is for the primaryNavigation outAnimation to control the SlotLayout and its child. This is how the bottomNavigation is configured in the demo. Because primaryNavigation has only an inAnimation specified, the NavigationRailBar is just disappearing at the beginning of the animation.
However, there appears to be a bug in the layout delegate. It is not animating the SlotLayout and its child together, it is animating them sequentially. For example, if you place the outAnimation on the primaryNavigation, you can see the effect.
Breakpoints.medium: SlotLayout.from(
  inAnimation: AdaptiveScaffold.leftOutIn,
  outAnimation: AdaptiveScaffold.leftInOut,   // <-- added this
  key: const Key('Primary Navigation Medium'),
  builder: (_) => AdaptiveScaffold.standardNavigationRail(
    leading: const Icon(Icons.menu),
    destinations: destinations
        .map((_) => AdaptiveScaffold.toRailDestination(_))
        .toList(),
  ),
),

The out animation for the primaryNavigation executes the outAnimation for my SlotLayout, and then sequentially executes the animation for the primary navigation's container, causing a snap shut effect.
https://user-images.githubusercontent.com/297712/195400524-6b7ef6fa-a1b1-4162-bad0-be9e6f856039.mov

@oravecz Thanks for filing the issue. This issue is reproducible on the latest stable and master channels with provided Steps to reproduce.
The easiest way to recognize the issue is to compare primaryNavigation animation with the bottomNavigation animation when resizing the window.
Sample code: flutter_adaptive_scaffold/example

flutter doctor -v (beta, master)
[✓] Flutter (Channel master, 3.5.0-6.0.pre.29, on macOS 12.6 21G115 darwin-x64, locale en-VN)
    • Flutter version 3.5.0-6.0.pre.29 on channel master at /Users/huynq/Documents/GitHub/flutter_master
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision c738c8aa96 (6 hours ago), 2022-10-12 23:49:12 -0400
    • Engine revision 7638a1463b
    • Dart version 2.19.0 (build 2.19.0-307.0.dev)
    • DevTools version 2.18.0

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/huynq/Library/Android/sdk
    • Platform android-33, build-tools 31.0.0
    • ANDROID_HOME = /Users/huynq/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.0.1)
    • Xcode at /Applications/Xcode14.0.1.app/Contents/Developer
    • Build 14A400
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)

[✓] IntelliJ IDEA Community Edition (version 2022.2.2)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 70.0.5
    • Dart plugin version 222.4167.21

[✓] IntelliJ IDEA Community Edition (version 2022.1.1)
    • IntelliJ at /Users/huynq/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/221.5591.52/IntelliJ IDEA CE.app
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart

[✓] VS Code (version 1.71.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.50.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-x64     • macOS 12.6 21G115 darwin-x64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 106.0.5249.119

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

[✓] Flutter (Channel beta, 3.4.0-34.1.pre, on macOS 12.6 21G115 darwin-x64, locale en-VN)
    • Flutter version 3.4.0-34.1.pre on channel beta at /Users/huynq/Documents/GitHub/flutter_beta
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 71520442d4 (8 days ago), 2022-10-05 16:38:28 -0500
    • Engine revision db0cbb2145
    • Dart version 2.19.0 (build 2.19.0-255.2.beta)
    • DevTools version 2.18.0

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/huynq/Library/Android/sdk
    • Platform android-33, build-tools 31.0.0
    • ANDROID_HOME = /Users/huynq/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.0.1)
    • Xcode at /Applications/Xcode14.0.1.app/Contents/Developer
    • Build 14A400
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.13+0-b1751.21-8125866)

[✓] IntelliJ IDEA Community Edition (version 2022.2.2)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 70.0.5
    • Dart plugin version 222.4167.21

[✓] IntelliJ IDEA Community Edition (version 2022.1.1)
    • IntelliJ at /Users/huynq/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/221.5591.52/IntelliJ IDEA CE.app
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart

[✓] VS Code (version 1.71.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.50.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-x64     • macOS 12.6 21G115 darwin-x64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 106.0.5249.119

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!


Make logging consumable ...

more dev-friendly logging in sgxconfig/core.yaml
- core.yaml vm->docker->attachStdout = true to get output in peer
- core.yaml chaincode->logging->level = debug
- core.yaml chaincode->logging->shim = info

peer add default definition (if not yet defined) of FABRIC_LOGGING_SPEC to a meaningful default, e.g., vscc,ltcc,tl-encalve=DEBUG:comm.grpc=ERROR:INFO

some reference to logging config in README

more long term:

replace printf in edl with log-function which has levels so we so C levels also in Go
separate in enclave shim log the namespace for user-chaincode log statements from log-statements by the FPC runtime (shim)

I also suggest that we set SGX_BUILD to DEBUG by default as this may simplify our life developing.


how to remote install

thanks at first.
I can't install after v2.4.2 via SocketPunch. https://github.com/Olmectron/SocketPunch/releases

Use the included servefiles.py script or any other tool that supports the new network installation method. The old method is no longer supported.

I can enter the installing interface by the python script now, but I the progress is still 0%, console has no output.
Probebly it is my own's question. I'll try again.


drivers: usb: udc: udc_mcux_ehci does not report UDC_EVT_SOF

Describe the bug
The USB device_next driver for the NXP EHCI does not report start of frame (UDC_EVT_SOF) events.
Expected behavior
All USB device controller drivers should report Start of Frame (SoF) events.
Impact
Unable to create a hardware-agnostic application making use of SoF events (described further in https://github.com/zephyrproject-rtos/zephyr/pull/76073).
Environment (please complete the following information):

OS: Any
Toolchain: Any
Commit SHA: v3.7.0-rc3

@MarkWangChinese can you please take a look, we would need it for v4.0.0. Would it require a HAL driver update?


Add notebook linting

Uses squeaky to lint notebooks.
While this has some minor benefits (removing empty cells etc.), it will become much more useful when we switch notebook outputs to SVG.

IMO we can ignore it.

I'd much rather that we allow-list it. I've been bitten in the past by merging on red CI. Once you get in the habit, it is hard to break and it's easy to not realize that there were new regressions you weren't aware of.

Please ensure that CI passes for all notebooks so we don't merge a failure into main.

Yes, I'll wait for #734 first which should fix CI

@Eric-Arellano I think the diff is the same as when you last approved but just want to double-check it's ok before merging


Postgres13-contrib package is needed in Habitat

User Story
As a Developer for Chef Automate,
I want to Postgres13-contrib in habitat stable channel so that i can use the pg_upgrade utility
Implementation Details

Raise a ticket to the habitat team

Acceptance Criteria

Postgres13-contrib package should be available in habitat

Definition of Done

Postgres13-contrib package should be available in habitat

Not needed now.


docs: Fix relative links

Fixes #2111
Signed-off-by: Helder Correia

Duplicated with #2125

Pr opened to detect broken links: #2131

Duplicated with #2125 + #2092

Yes, I just noticed that.


当构建库时使用 rollupOptions.output.banner 会导致打包出错误的 umd

Describe the bug
also see #8163.
I determined that this was caused by #7948 and has not been fixed in #8110.
I currently use version 2.9.5 to avoid this problem.
I also tried v3.0.0-alpha 7. It has not been fixed at present.

我也遇到了 #8163 这个问题。
我确定这是由 #7948 引入的错误的正则替换导致的，并且并未在 #8110 中得到修复。
我目前使用 2.9.5 版本来避免这个问题。
我也尝试使用了v3.0.0-alpha.7，目前并未得到修复。
Reproduction
https://github.com/ddosakura/a-bug-for-vite/blob/master/dist/mylib.umd.js
System Info
Binaries:
    Node: 16.14.2 - ~/.nvm/versions/node/v16.14.2/bin/node
    Yarn: 1.22.15 - ~/.nvm/versions/node/v16.14.2/bin/yarn
    npm: 8.5.0 - ~/.nvm/versions/node/v16.14.2/bin/npm
  npmPackages:
    vite: ^2.9.9 => 2.9.9

or

  Binaries:
    Node: 16.14.2 - ~/.nvm/versions/node/v16.14.2/bin/node
    Yarn: 1.22.15 - ~/.nvm/versions/node/v16.14.2/bin/yarn
    npm: 8.5.0 - ~/.nvm/versions/node/v16.14.2/bin/npm
  npmPackages:
    vite: ^3.0.0-alpha.7 => 3.0.0-alpha.7

Used Package Manager
pnpm
Logs
No response
Validations

[X] Follow our Code of Conduct
[X] Read the Contributing Guidelines.
[X] Read the docs.
[X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
[X] Make sure this is a Vite issue and not a framework-specific issue. For example, if it's a Vue SFC related bug, it should likely be reported to https://github.com/vuejs/core instead.
[X] Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
[X] The provided reproduction is a minimal reproducible example of the bug.

像这样的插件可以用来解决它。
const bannerPlugin = {
  name: 'banner',
  enforce: 'post',
  generateBundle(options, bundle) {
    const banner = '/*! banner  */'
    const footer = ''

    for (const module of Object.values(bundle)) {
      if (module.type === 'chunk') {
        module.code = banner + module.code + footer
        // should change source map if needed
      }
    }
  }
}

I found that the key to the bug was not rollupOptions.output.banner, but \n, see #8414 .

That PR will work for comments but it won't work with something like var someValueInjected = Object.assign({}, { value: 'by rollup.banner' });.
That said that PR will fix a bug when build.minify is false.

Reopening as it is not completely fixed.
https://github.com/vitejs/vite/pull/8414#pullrequestreview-991785346

I adjusted the workaround plugin slightly to keep using build.rollupOptions.output.banner/.footer in my vite.config.js
// rollup-banner-plugin.js
const RollupBannerPlugin = {
  name: 'banner',
  enforce: 'post',
  generateBundle(options, bundle) {
    const banner = options.banner() || ''
    const footer = options.footer() || ''

    for (const module of Object.values(bundle)) {
      if (module.type === 'chunk') {
        module.code = banner + module.code + footer
        // should change source map if needed
      }
    }
  }
}

// vite.config.js
import RollupBannerPlugin from './rollup-banner-plugin.js'
export default defineConfig({
  build: {
  ...
    rollupOptions: {
      output: {
        banner: '/** Here goes my banner */\n\n',
        footer: '\n\n/** and here some footer notes. */',
      },
      plugins: [
        RollupBannerPlugin
      ]
    }
  }
})

The workaround works, but I think it should work from the box, when a person uses Vite in the library mode.

slightly modified version to keep shebang when your have some.
const RollupBannerPlugin = {
  name: 'banner',
  enforce: 'post',
  generateBundle(options, bundle) {
    const banner = options.banner() || ''
    const footer = options.footer() || ''

    for (const module of Object.values(bundle)) {
      if (module.type === 'chunk') {
        const shebang = module.code.match(/^#![^\n]*\n/)
        if (shebang) {
          module.code = shebang[0] + banner + module.code.slice(shebang[0].length) + footer
        } else {
          module.code = banner + module.code + footer
        }
        // should change source map if needed
      }
    }
  }
}```


binary_sensor → assist_satellite (deprecation)

according to the repair notification i home assistant 2024.10, the binary_sensor.m5stack_atom_echo_8a1d90_assist_in_progress is deprecated and replaced by assist_satellite.
I belive the relevant section is here.
exact text from the repair notification is:

Repair issue
Warning ⸱ Reported by ESPHome
⚠ This stops working in version 2025.4. Please address before upgrading.
The ESPHome in progress binary sensor binary_sensor.m5stack_atom_echo_8a1d90_assist_in_progress is deprecated.
Migrate your configuration to use the corresponding assist_satellite entity and then click SUBMIT to disable the in progress binary sensor and fix this issue.

Please use the state of the Assist satellite entity instead going forward.

I have this same message (except binary_sensor.esp32_s3_box_3_«...»_assist_in_progress).

I belive the relevant section is here.

I found this message confusing for a while too. I don't think it is related to this binary sensor.
I think what we need to do (and what I have done) is check that we have no automations etc referencing binary_sensor.*_assist_in_progress and then it is safe to submit to disable the entry. The sensor will disappear eventually in 2025.4.
IOW I think the message is telling us to stop consuming the entity, not that we need to do something to stop our esphome devices from providing it. I think it is/was actually provided by the wyoming component within HA.
The PR which added this warning was https://github.com/home-assistant/core/pull/125805 which led me to https://github.com/home-assistant/core/pull/125806 which is the one which actually disabled the sensor.


CBOR Encoding + more tests

Add encoding of CBOR, including python script changes, a new library, and new tests.
Add a new test for decoding.
Make lots of changes to accommodate encoding, and also to fix corner case bugs found by the new tests.
General improvements

I'll try to take a look this week but I am a bit short on time; but I'm happy that this is getting encoding support!

When I wanted to test some encoders I noticed following problems:
Command
python3 ./scripts/cddl_gen.py -i ./tests/cbor_encode/test1_suit/manifest3.cddl -e -t SUIT_Manifest --oc a.c --oh a.h

gives infinite recursion:
...
  File "./scripts/cddl_gen.py", line 1268, in xcoders
    for xcoder in child.xcoders():
  File "./scripts/cddl_gen.py", line 1277, in xcoders
    for xcoder in my_types[self.value].xcoders():
  File "./scripts/cddl_gen.py", line 1268, in xcoders
    for xcoder in child.xcoders():
  File "./scripts/cddl_gen.py", line 1277, in xcoders
    for xcoder in my_types[self.value].xcoders():
  File "./scripts/cddl_gen.py", line 1283, in xcoders
    xcode_body = self.xcode()
  File "./scripts/cddl_gen.py", line 1260, in xcode
    return self.full_xcode()
  File "./scripts/cddl_gen.py", line 1256, in full_xcode
    return self.repeated_xcode()
  File "./scripts/cddl_gen.py", line 1230, in repeated_xcode
    }[self.type]()
  File "./scripts/cddl_gen.py", line 1193, in xcode_union
    for child in self.value]
  File "./scripts/cddl_gen.py", line 1193, in <listcomp>
    for child in self.value]
  File "./scripts/cddl_gen.py", line 1256, in full_xcode
    return self.repeated_xcode()
  File "./scripts/cddl_gen.py", line 1230, in repeated_xcode
    }[self.type]()
  File "./scripts/cddl_gen.py", line 1132, in xcode_single_func_prim
    return xcode_statement(*self.single_func_prim())
  File "./scripts/cddl_gen.py", line 1058, in single_func_prim
    }[self.type]()
  File "./scripts/cddl_gen.py", line 1057, in <lambda>
    "OTHER": lambda: list_replace_if_not_null(my_types[self.value].single_func(), 1, self.val_access()),
  File "./scripts/cddl_gen.py", line 1081, in single_func
    if self.single_func_impl_condition():
  File "./scripts/cddl_gen.py", line 1070, in single_func_impl_condition
    self.type_def_condition() or (self.type in ["LIST", "MAP"] and len(self.value) != 0)
  File "./scripts/cddl_gen.py", line 1005, in type_def_condition
    if self in my_types.values() and self.multi_member() and not self.is_unambiguous():
  File "./scripts/cddl_gen.py", line 882, in multi_member
    return self.multi_var_condition() or self.repeated_multi_var_condition()
  File "./scripts/cddl_gen.py", line 828, in multi_var_condition
    return self.present_var_condition() or self.count_var_condition()
RecursionError: maximum recursion depth exceeded

So I decided to check test2_simple with following command:
python3 ./scripts/cddl_gen.py -i ./tests/cbor_encode/test2_simple/pet.cddl -e -t Pet --oc a.c --oh a.h

And I get following declaration in header file:
bool cbor_encode_Pet(const uint8_t * p_payload, size_t payload_len, Pet_t * p_result, size_t *p_payload_len_out);

It should be encoder (as name suggests), but the parameters are odd: Pet_t is a result? In my opinion it should be the input for this function. Byte buffer is const? It should be output, so not a const.

Command
python3 ./scripts/cddl_gen.py -i ./tests/cbor_encode/test1_suit/manifest3.cddl -e -t SUIT_Manifest --oc a.c --oh a.h

gives infinite recursion:

Yes, it's because the CDDL description is self-referencing (SUIT_Command_Sequence -> suit-directive-run-sequence -> SUIT_Command_Sequence). The way to solve it is to specify SUIT_Command_Sequence as an entry type. This works because SUIT_Command_Sequence is contained in a bstr (bstr .cbor SUIT_Command_Sequence), and the script will ignore the .cbor part if it is specified as an entry type.
You can run the tests like regular Zephyr tests, and it will take care of all of this:
cd tests/cbor_encode/test1_suit
mkdir build
cd build
cmake -GNinja -DBOARD=native-posix ..
ninja run

There are also test.sh scripts to run all tests. I will add some explanation to the README.

the parameters are odd: Pet_t is a result? In my opinion it should be the input for this function.

You're right, I haven't changed it since adding encoding. It still functions as an input, it's just the name that is weird.

Byte buffer is const? It should be output, so not a const.

Will remove const.


This is already built into the game?

It's not built into vanilla minecraft but its already in optifine which makes this mod pointless.

"When rain is OFF the splahes and rain sounds are still active". This mod disables the rain/thunder COMPLETELY from the game's pov
Optifine is an absolute shithole to inject into from other mods, even with its source freely available you basically can't use mixins and have to use some assembly modifier, so some specialized mods (eg my superchargedchunkloading) aren't really compatible with it (or at least GREATLY limited)

Still, why is this even a feature in the first place?


guidata-test3 for python3 version ?

Hello,
I am preparing the Debina package and I would like to know what is the best way to deal with the python2 and python3 version of the guidata-tests (scripts)
to my opinion it would be nice to rename it as guidata-tests3 like ipython did with ipython3.
What is your opinion ?

Inded It would be nice to have the same for guiqwt-tests :)

I propose to rename them this way:
guidata-tests-py2 and guidata-tests-py3, respectively for Python 2 and Python 3

Ok, I guess that you would have to patch setup.py when building the debian package?
Because I don't know how to (and if it's even possible to) build a single source package containing both scripts (guidata-tests-py2 and guidata-tests-py3) and install the script that match target Python version. As far as I know, the only way to do that would be to build specific source packages (one for Python 2, one for Python 3).

In spyder I think that the trick is implented
in the setup.py you have
Check for Python 3
PY3 = sys.version_info[0] == 3
NOTE: the '[...]_win_post_install.py' script is installed even on non-Windows
platforms due to a bug in pip installation process (see Issue 1158)
SCRIPTS = ['%s_win_post_install.py' % NAME]
if PY3 and sys.platform.startswith('linux'):
SCRIPTS.append('spyder3')
else:
SCRIPTS.append('spyder')
Is it what you need ?

Nevermind... I was tired and somehow forgot about the distinction between MANIFEST.in and setup.py: by including all the scripts (linux, Windows, Python 2, Python 3) in MANIFEST.in, files will be included in source package even if setup.py does not include them (because setup.py will include only the files corresponding to the Python version used to build the package).


MQTT Lens looks like the page is zoomed in 500%

I don't know what happened, but when I launch MQTTLens, I get this:
https://www.dropbox.com/s/9s7br32vd5fij8p/_mqttlens.jpg?dl=0
The usual browser zoom settings have no effect.

I am having the same issue

Same problem!

hey guys, please check my comment here :
https://github.com/sandro-k/mqtt-lens/issues/2
welcome to 2018!!

Same issue here. Chrome 63.0.3239.132 (Build oficial) (64 bits) Windows 10

I will look how to fix this. Haven’t got any notifications about this.

It looks like that we probably can use shadyDom in Chrome and simulate the deprecated /deep/ selector. Trying to make a release soon.

An update is available in the chrome web store. There are no changes nessecary to MQTTLens. I just made some changes to webcomponent.js to use shadydom rather than native shadow dom. It might be ne

Looks good to me! Thanks for your work!

look solved

Woop woop nice work @sandro-k  :+


UI - Entire response is not presented to the user when the tool call response is very large.

gptscript version v0.0.0-dev-498381d1-dirty
Steps to reproduce the problem:

Launch ui with following script

Name: test1
Context: github.com/gptscript-ai/clio/context
Chat: true

You are a good assistant. Wait for user to ask you a question.

Try to read a file that is large. In my case I read a json file
Message response that gets dispalyed has only a very small portion of the original file that was read and also I dont see a summary of the json files content like I see when executing the same script using TUI.

-rw-r--r--@ 1 sangeethahariharan  staff  177170 Jul 30 18:09 mytest.json --> File that was read
-rw-r--r--  1 sangeethahariharan  staff   18748 Jul 30 18:12 response.json --> Content that was dispayed in UI as response.

Also When the same script was executed from TUI , after the tool call response is received I also see a summary provided like
  ### Summary of  myjson.json :

  The JSON file contains a list of applications with their respective details. Here are the key details for each application:

  1. App Name: test2
    • Namespace: acorn
    • Image: sangeetha/myfirstacorn:v0.0.1
    • Status: Running
    • Endpoints: http://mywebnew-test2-3d1222da.local.oss-acorn.io
....
....

Does this mean that in this case LLM has not processed the tool call output ?

I cannot make any sense of this issue. plase rewrite it with clearer steps to reproduce (including the large file in question) and clear expected behavior.

When I follow the same steps using Tildy i am seeing a out of memory error which is tracked in -https://github.com/gptscript-ai/desktop/issues/265.
Closing this issue.

I am able to reproduce the same behavior mentioned in the bug when testing with electron build (production) - bf86f18e1c
Electron build - bf86f18e1
Steps to reproduce the problem:

Chat with Tildy
Go to "Manage workspace" and add this file myjson.json
In chat message ask to read this file.
Wait for the response message to be streamed fully.
Notice that only some parts of the file is present in the output.

I checked it by using "Copy Message" option and creating the file locally:
 % ls -ltr res.out
-rw-r--r--  1 sangeethahariharan  staff  18728 Aug 22 16:36 res.

Original file that was uploaded:
% ls -ltr myjson.json
-rw-rw-r--@ 1 sangeethahariharan  staff  177170 Mar  7 17:04 myjson.json

Im not sure that theres a bug here or if its jsut the LLM and LLM and choosing not to display the whole file.


Add maximum number of notification shown

It is good to have option that
<NotificationSystem max=3 ref="notificationSystem" />

My current simulation of it is
     if (this._notificationSystem.state.notifications.length > 3) {
        let allUIds = this._notificationSystem.state.notifications.map(
          notification => notification.uid
        );

        let keepUIds = this._notificationSystem.state.notifications
          .slice(3)
          .map(notification => notification.uid);
        _.difference(allUIds, keepUIds).map(uid =>
          this._notificationSystem.removeNotification(uid)
        );
      }

@chungchi300 While this is a good idea, few thing are to be considered.
Setting an upper notification limit is fine.
However if the limit is hit there are few ways to handle this:

don't add new notifications,
replace least recent notification with new one.

Perhaps we can consider which one is the best approach to support and what are the use cases (yours is one of them).

I am also looking for something similar although my ideal approach would be to collapse all notifications into a notification carousel container.
If there are arguments against using this pattern I'd be interested in hearing them.


Link Button pressed does not register with iOS

I think this is closely related to #151, which is now closed.
We have the issue where the link button on the bridge is pressed, i can see it makes its way to the "log" but the event it not server to iOS or TvOS, and hence no reaction from homekit...
This along with some very erratic button works, button doesn't work on my dimmer switches has only started happening in the past couple of days.
Any advise or guidance appreciated, this plugin has been rock solid for me until now, really enjoying your hard work!!
Cheers!

Scratch that, just realised you've released an update - all fixed! Thanks again!!


Better instructions for getting Navgauge up and running

@patuty : you mentioned that you would like to get Navgauge up and running with your instruments. Could you describe what you have so far working:

do you have gpsd / gpspipe functioning?
can you start Navgauge with one of the sample data files?
have you tried starting navgauge from the command line?

Could the setup instructions include setting up ngrok to tunnel navgauge off boat. Have managed to tunnel the graphics but failed to receive the boat data via the Primus websocket.

@CasparvdBroek ngrok works for me like this:
export PORT=8999
bin/cassiopeia

ngrok 8999

Thank you for replying Teppo,
Started ngrok with:
export PORT=8080
./ngrok http 8080
On ngrok console
HTTP Requests
GET /primus/
GET /primus/
GET /primus/
GET /favicon.ico        404 Not Found
GET /d3.v3/d3.v3.js   200 Ok
GET the rest all 200 Ok
When looked in chrome  developers console
Websocket connection to 'ws://a2235e7f.ngrok.io/primus/?gaugedata=true'
failed : Websocket is closed before the connection is established.
Navgauge works great locally off the wifi hotspot, problem only occurs when
accessing via 3G.
Using ngrok version 2.0.17
Caspar
On 12/05/2015 8:58 PM, "Teppo Kurki"<EMAIL_ADDRESS>wrote:

@CasparvdBroek https://github.com/CasparvdBroek ngrok works for me like
this:
export PORT=8999
bin/cassiopeia
ngrok 8999
—
Reply to this email directly or view it on GitHub
https://github.com/tkurki/navgauge/issues/6#issuecomment-101200688.

Try without the http parameter. Maybe it excludes ws.

Problem solved - changed mobile provider. Vodafone seems to be interfering
with websocket.
Thankyou - Caspar
On 14/05/2015 9:42 PM, "Teppo Kurki"<EMAIL_ADDRESS>wrote:

Try without the http parameter. Maybe it excludes ws.
—
Reply to this email directly or view it on GitHub
https://github.com/tkurki/navgauge/issues/6#issuecomment-101986769.


Will Huawei_LiteOS开发包 be open source or public?

I found in HuaweiLiteOSKernelEnv.chm have provide a Huawei_LiteOS开发包,
which including Linux compile environment.
will this develop package be open source or public?
thanks.

it's now opened


The connection pool size decreases from 20 (maximum pool size) to zero [Azure SQL Managed Instance]

Hi
we are experiencing issues similar to #1474 where the total connections gradually decrease from the maximum pool size, 20, down to zero, see evidence from the debug log info:
2024-09-17 09:14:38.000 DEBUG 603 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Pool stats (total=19, active=0, idle=19, waiting=0)
…
2024-09-17 09:15:08.000 DEBUG 603 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Pool stats (total=18, active=0, idle=18, waiting=0)
…
2024-09-17 09:43:38.092 DEBUG 603 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Pool stats (total=0, active=0, idle=0, waiting=1)

When the total connections reach 0, all requests to the connection pool fail due to connection not available and the following exception is thrown:
org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30002ms.

Here's the details for our application:

DB is Azure SQL Managed Instance, with Proxy connection policy
Hikari connection pool version is 4.0.3 we only set max pool size. all others settings are left to default
JDBC driver is MS SQL 12.4.0

We reached Microsoft support, who confirmed that Azure SQL Managed Instance (SQL MI) utilizes an idle connection timeout mechanism, where connections that remain idle for approximately 30 minutes are automatically closed. This behavior is managed by the SQL MI proxy layer to free up resources and maintain optimal performance. To prevent connections from timing out, they recommend to implement a keep-alive mechanism or send periodic queries to keep the connection active.
However, they suggested opening a ticket on GitHub to HikariCP since they don’t have enough expertise or a dedicated team to provide specific settings.
Can you advice on what to do to resolve?

is there any known bug with a fix version?
or should we try with any specific settings e.g. maxLifeTime and keepAliveTime settings as below?

MaxLifetime: Setting this to 15 minutes (or 900,000 milliseconds) ensures that the lifetime of connections in the pool is shorter than the database or infrastructure-imposed connection timeout, such as the 30-minute idle timeout for Azure SQL Managed Instance. This helps avoid situations where the database closes idle connections unexpectedly.
KeepaliveTime: Setting this to 5 minutes (or 300,000 milliseconds) is a good approach to ensure that HikariCP sends periodic keep-alive queries. This should be less than the maxLifetime to avoid conflicts and ensure idle connections stay active.

I think you should set idleTimeout less than 30 minutes.

Hi @quaff,
thank you for your reply.
I have already set the idleTimeout, but I am still experiencing the issue. Would you suggest setting maxLifetime and/or keepaliveTime as well as I mentioned in my issue description?

Great article on this issue: https://medium.com/@eremeykin/how-to-deal-with-hikaricp-connection-leaks-part-1-1eddc135b464
I am unsure if this solves your issue, but it may help you debug the issue and find which code is causing the problem.

Hi @nitin-vavdiya, thank you for your feedback, we have checked the scenarios described in the link you shared and we aren't in any of them. As from the initial statement, our scenario is very similar to the one reported in many other linked, e.g.
https://github.com/brettwooldridge/HikariCP/issues/1474#issuecomment-2258003684, with the only difference that we use Azure SQL Managed Instance. As many report the same issue in different context, with different DBs, this clearly indicates a bug into Hikari. Just for your info, we have been running other applications with Tomcat connection pool with SQL Managed Instance, and we haven't found the same issue.

Hi, we are taking decision to move away from Hikari in favor of Tomcat connection pool, however I just found this article
https://www.theguardian.com/info/2019/dec/02/faster-postgresql-connection-recovery referenced in one comment to a very similar issue  https://github.com/brettwooldridge/HikariCP/issues/2161#issuecomment-2249194223 in which it is stated that "HikariCP recommends that the driver-level socket timeout be set to (at least) 2-3x the longest running SQL transaction, or 30 seconds, whichever is longer". @brettwooldridge, if this is confirmed, we can try setting socketTimeout at the level of MS-SQL JDBC driver.

Socket-level timeout and TCP keepalive are essential for reliability. Regardless of pool. See the new “Important” note added at the top of the main repo page.
So far in all of the reports of this issue that have included stacktrace analysis, all have pointed to TCP layer issues and none have indicated any failure in the pool itself.


Unable to call jQuery(document).ready() from Lua

Hello,
First of all, let me tell you that this project is super exciting! I am working on server-side Lua proramming (LSP), but being able to write client-side scripting in Lua without any pre-compilation (unlike the Moonshine project) is a big plus! Please keep maintaining and improving this project. It has a tremendous amount of potential, as porting Lua to essentially all web browsers opens up a world of possibilities!
I was testing whether I could re-use jQuery without having to re-write it in Lua completely. Using the $ variable doesn't work, probably because this is an invalid variable name in Lua. Luckily, jQuery provides a global variable called jQuery, so simple things like js.global.jQuery("#divid").html("This is JQuery from Lua!!!") work fine.  However, js.global.jQuery(js.global.document).ready(function() ... end) doesn't work, giving a cryptic "SyntaxError" error on lua.vm.js:6624.
I suspect this maybe because I'm trying to pass a Lua function object to a JavaScript function that expects a JS function object, and this conversion may not be supported. Any thoughts?
Regards,
Gabriel Mongefranco
Software Developer
http://gabriel.mongefranco.com

Is it possible to call from NodeJS?
Certain with a different approach from window.jQuery.


Add avro to well-known encodings

Add avro as a well-known schema encoding and message encoding. When using the "avro" message encoding, mcap writers indicate the messages on a channel are encoded using the avro binary serialization format. When using "avro" schema encoding, the schema format is a valid avro schema declaration as a JSON string.
A few notes/discussion points:

In the avro spec avro schema declarations can be one of an avro type, a single object, or an array. However, in the proposed mcap spec I have changed the allowed schema declaration and how they are interpreted. The mcap spec will only allow a single object or an array. The array form is not treated as a union and instead the "name" from the schema record references which record declaration from the array is the schema for the messages on channels using the schema. This is different to avro files typically treating this kind of schema declaration as a union type. This is because avro files do not have the concept of channels whereas mcap files do and writers typically write separate schemas on separate channels and topics.
Avro has two encoding formats: binary and json. I've opted to have "avro" message encoding refer to the binary format. If we wanted to support both we would need to consider how to disambiguate.

This change also adds a rust example that creates an mcap file with avro.
Related studio PR: https://github.com/foxglove/studio/pull/7008

I think we should support all valid avro values in an MCAP message unless we have a really good reason not to.
This means accepting all 3 possible toplevel schemas:

A Schema is represented in JSON by one of:

A JSON string, naming a defined type.
A JSON object, of the form:
{"type": "typeName" ...attributes...}
where typeName is either a primitive or derived type name, as defined below. Attributes not defined in this document are permitted as metadata, but must not affect the format of serialized data.
A JSON array, representing a union of embedded types.

I propose for names:

json type
mcap schema name

string
Starting from an empty set of definitions, the only defined types are the primitive types, so one of null, boolean,int, long, float, double,bytes, string

record
The full type name as you've laid out in your PR

array
a comma-separated list of names for each type in the union in the same order. I'd also accept a JSON array of strings. Note that unions may not contain unions per the avro spec, so we don't need to support nesting.

My reason for pushing back on this is that MCAP channels are logical channels representing a stream of data, and requiring writers to separate their unions into separate channels may remove some information they'd otherwise want to keep. My go-to example here is: messages in one channel in a recording are generally understood to have been sent in that order and arrive in that order. Messages in separate channels arrived at the recorder in log time order, but may have arrived at other consumers in a different order, and may have been sent in a different order.
I also think it's powerful to be able to project any field of a message into a new MCAP data stream. If only certain Avro types can be toplevel message types, that rules that out for Avro encoding at least.
I know we support other encodings that don't support this - for example, you can't have a ros1msg string in an MCAP message, you need to wrap it in a std_msgs/msg/String struct first. However, for those ecosystems there are well-known struct wrappers for primitive types, for Avro that's not the way.

Closing this for now. Good feedback and learnings but the primary customer for this is ok with their current setup and does not need anything urgent here. Until we get an avro user to review and provide feedback I am more comfortable shelving this.


Create CONTRIBUTING.md

This PR addresses issue #9  @kaxada Please give this a review.
Let me know if there is any detail missing.

@Anita-ihuman please make this PR to https://github.com/badging/BadgingAPI. we are archiving this repo

an I


ol.format.GeoJSON dataProjection and featureProjection seem unefficient

Dear all,
I am facing problems with GeoJSON format and the ability of transforming read features from a source file using a 'dataProjection' to an ol.source.Vector which is supposed to use a 'featureProjection'.
However, whichever the projection code used to define the parameters 'dataProjection' or 'featureProjection' while using the readFeatures() method of ol.format.GeoJSON, the result is still the same, without any transformation.
Am i misunderstanding something or is there a bug ?
Best regards,
Remi.

While I am not able to explain how I solved my problem, the readFeatures() is actually as expected.
Sorry for this bad issue request...
Anyway, many thanks for the job done.
Remi.

mark


chore: bdd-ghfjxy-import-1584445306 to 0.0.1

chore: Promote bdd-ghfjxy-import-1584445306 to version 0.0.1

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approvers:
If they are not already assigned, you can assign the PR to them by writing /assign  in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment