OCIO config environment variables distribution

Is your feature request related to a problem? Please describe.
At the moment we are having working colorspace distribution with OCIO support, but we are still missing a part where EP, SEQ, SHOT environment variables occasionally used by production are set before a host application is started.
Describe the solution you'd like
Pre-lauch hooks woflow should be used which would distill mentioned environment variables from the hierarchy of context and set them, so any OCIO config which is using such env vars will be able to use it. Idea here is to fill those variables if the any of parent above shot is sequence or episode assetType.
Additional context
related PR to https://github.com/ynput/OpenPype/pull/4195
[cuID:OP-4724]

Could you clarify slightly further?
Does this mean the OCIO config would be pointed to using for example: /path/to/ocio/{EP}/{SHOT}?
Does this mean that - with such a template - that ALL shots must have it like that?
Or is it in reverse that the EP or SQ can have a custom OCIO env var config?
Or are you referring to it in another way of 'filling those variables'?

Im currently using the prehook to load OCIO setups in clarisse if there are overrides on the folder structure level.
Setting up either global or per task level overrides works nice.

I have this function
def get_hierarchy_env(project_doc, asset_doc, skip_empty=True):
    """Returns an environment dictionary based on the hierarchy of an asset in a project

    The environment dictionary contains keys representing the different levels of the
    visual hierarchy (e.g. "SHOW", "SEASON", "EPISODE", etc.) and their corresponding
    values, if available.

    Args:
        project_doc (dict): A dictionary containing metadata about the project.
        asset_doc (dict): A dictionary containing metadata about the asset.
        skip_empty (bool): Whether to skip env entries that we don't have a value for.

    Returns:
        dict: An environment dictionary with keys "SHOW", "SEASON", "EPISODE", "SEQ",
            "SHOT", and "ASSET_TYPE". The values of the keys are the names of the
            corresponding entities in the hierarchy. If an entity is not present in the
            hierarchy, its corresponding key will not be present or have a value of None
            if 'skip_empty' is set to False.

    """
    visual_hierarchy = [asset_doc]
    current_doc = asset_doc
    project_name = project_doc["name"]
    while True:
        visual_parent_id = current_doc["data"]["visualParent"]
        visual_parent = None
        if visual_parent_id:
            visual_parent = get_asset_by_id(project_name, visual_parent_id)

        if not visual_parent:
            break

        visual_hierarchy.append(visual_parent)
        current_doc = visual_parent

    # Dictionary that maps the SG entity names from SG-leecher to their corresponding
    # environment variables
    sg_to_env_map = {
        "Project": "SHOW",
        "Season": "SEASON",
        "Episode": "EPISODE",
        "Sequence": "SEQ",
        "Shot": "SHOT",
        "Asset": "ASSET_TYPE",
    }

    # We create a default env with None values so when we switch context, we can remove
    # the environment variables that aren't defined
    env = {
        "SHOW": project_doc["data"]["code"],
        "SEASON": None,
        "EPISODE": None,
        "SEQ": None,
        "SHOT": None,
        "SHOTNUM": None,
        "ASSET_TYPE": None,
    }

    # For each entity on the hierarchy, we set its environment variable
    for parent in visual_hierarchy:
        sg_entity_type = parent["data"].get("sgEntityType")
        env_key = sg_to_env_map.get(sg_entity_type)
        if env_key:
            env[env_key] = parent["name"]

    # Fill up SHOTNUM assuming it's the last token part of the SHOT env
    # variable
    if env.get("SHOT"):
        env["SHOTNUM"] = env["SHOT"].split("_")[-1]

    # Remove empty values from env if 'skip_empty' is set to True
    if skip_empty:
        env = {key: value for key, value in env.items() if value is not None}

    return env

that I added on context_tools.py:change_current_context:
def change_current_context(asset_doc, task_name, template_key=None):
    """Update active Session to a new task work area.

    This updates the live Session to a different task under asset.

    Args:
        asset_doc (Dict[str, Any]): The asset document to set.
        task_name (str): The task to set under asset.
        template_key (Union[str, None]): Prepared template key to be used for
            workfile template in Anatomy.

    Returns:
        Dict[str, str]: The changed key, values in the current Session.
    """

    changes = compute_session_changes(
        legacy_io.Session,
        asset_doc,
        task_name,
        template_key=template_key
    )

    # Update the Session and environments. Pop from environments all keys with
    # value set to None.
    for key, value in changes.items():
        legacy_io.Session[key] = value
        if value is None:
            os.environ.pop(key, None)
        else:
            os.environ[key] = value

    ### Starts Alkemy-X Override ###
    # Calculate the hierarchy environment and update
    project_doc = get_project(legacy_io.Session["AVALON_PROJECT"])
    hierarchy_env = get_hierarchy_env(project_doc, asset_doc, skip_empty=False)
    for key, value in hierarchy_env.items():
        if value is None:
            os.environ.pop(key, None)
        else:
            os.environ[key] = value
    ### Ends Alkemy-X Override ###

    data = changes.copy()
    # Convert env keys to human readable keys
    data["project_name"] = legacy_io.Session["AVALON_PROJECT"]
    data["asset_name"] = legacy_io.Session["AVALON_ASSET"]
    data["task_name"] = legacy_io.Session["AVALON_TASK"]

    # Emit session change
    emit_event("taskChanged", data)

    return changes

This works perfectly thanks to our customization of the SG leecher that adds the sgEntityType on the assets since without that OP is not really aware of what entity is what. This should be possible to change now with Ayon

Thanks, @fabiaserra, for the solid solution. To implement it in Ayon, we need to address situations where a context change through the workfile tool is triggered. This workflow ties into active environment variables.
Another point to consider: We're not just limited to SHOT, SQ, EP as key names. We can use any of the environment variables. Currently, we're using AYON_FOLDER_PATH, AYON_PROJECT_NAME, AYON_WORKDIR, AYON_HOST_NAME.
At least that is how I understand it from here

These contexts are usually based on environment variables, but also allows on-the-fly context switching in applications that operate on multiple shots (such as playback tools)

Thanks, @fabiaserra, for the solid solution. To implement it in Ayon, we need to address situations where a context change through the workfile tool is triggered. This workflow ties into active environment variables.

My solution already addresses that too, might be because I also call this function here?
def prepare_context_environments(data, env_group=None, modules_manager=None):
    """Modify launch environments with context data for launched host.

    Args:
        data (EnvironmentPrepData): Dictionary where result and intermediate
            result will be stored.
    """

    from openpype.pipeline.template_data import get_template_data
    from openpype.pipeline.context_tools import get_hierarchy_env

    # Context environments
    log = data["log"]

    project_doc = data["project_doc"]
    asset_doc = data["asset_doc"]
    task_name = data["task_name"]
    if not project_doc:
        log.info(
            "Skipping context environments preparation."
            " Launch context does not contain required data."
        )
        return

    # Load project specific environments
    project_name = project_doc["name"]
    project_settings = get_project_settings(project_name)
    system_settings = get_system_settings()
    data["project_settings"] = project_settings
    data["system_settings"] = system_settings

    app = data["app"]
    context_env = {
        "AVALON_PROJECT": project_doc["name"],
        "AVALON_APP_NAME": app.full_name
    }
    if asset_doc:
        context_env["AVALON_ASSET"] = asset_doc["name"]
        if task_name:
            context_env["AVALON_TASK"] = task_name

    ### Starts Alkemy-X Override ###
    # Get hierarchy environment variables (i.e., SEASON, SHOW, SEQ...)
    context_env.update(get_hierarchy_env(project_doc, asset_doc))
    ### Ends Alkemy-X Override ###

Another point to consider: We're not just limited to SHOT, SQ, EP as key names. We can use any of the environment variables. Currently, we're using AYON_PROJECT_ROOT_WORK, AYON_FOLDER_PATH, AYON_PROJECT_NAME, AYON_WORKDIR, AYON_HOST_NAME.

That's okay, but I think it's still important to have those env var keys as it's very useful to know at all times the specific folder types and being able to combine them (I have added them on template system too so I can use tokens like {shotnum} or {SEQ} to capitalize the sequence) to fit multiple workflows that require direct access to parent keys by type.

But since we are not having variable alternative for AYON_FOLDER_NAME we will need to have some sort of global prelaunch hook which will set it on demand. We might also need to get path only to a folder parent, perhaps for sequential luts so AYON_FOLDER_PARENT_PATH and AYON_FOLDER_PARENT_NAME keys might come useful.

I personally find that over-complicated and much harder to read than being explicit on using $SHOW, $SHOT, $EP, $SEQ...

This means we could have our own environment declaration as such, and use them accordingly:
environment:
  AYON_FOLDER_NAME: $AYON_FOLDER_NAME
  AYON_FOLDER_PARENT_PATH: $AYON_FOLDER_PARENT_PATH
  AYON_FOLDER_PARENT_NAME: $AYON_FOLDER_PARENT_NAME
  AYON_FOLDER_PATH: $AYON_FOLDER_PATH
  AYON_PROJECT_NAME: $AYON_PROJECT_NAME
  AYON_WORKDIR: $AYON_WORKDIR
  AYON_HOST_NAME: shell
  AYON_PROJECT_ROOT_WORK: $AYON_PROJECT_ROOT_WORK

The only one you are remapping is AYON_HOST_NAME, there's not much point on redeclaring the ones that point to the same env var that already exists?

This will allow us to use search paths following way:
search_path: |
  $AYON_PROJECT_ROOT_WORK/$AYON_FOLDER_PATH/colorspace/$AYON_HOST_NAME/luts:
  $AYON_PROJECT_ROOT_WORK/$AYON_FOLDER_PARENT_PATH/colorspace/luts:
  $AYON_PROJECT_ROOT_WORK/$AYON_PROJECT_NAME/colorspace/luts:
  luts:

And of course even resolve shot related .cc which are stored on project level:
- !<ColorSpace>
    name: srgb8
    family: srgb
    bitdepth: 8ui
    isdata: false
    from_reference: !<GroupTransform>
      children:
        - !<FileTransform> {src: ${AYON_FOLDER_PARENT_NAME}_${AYON_FOLDER_NAME}.cc}
        - !<ColorSpaceTransform> {src: lnh, dst: lg10}
        - !<FileTransform> {src: film_emulation.spi3d, interpolation: linear}

That's cool but as I said I think we'd still prefer to be explicit in our config with the $EP, $SEQ, $SHOT hierarchies.

That's cool but as I said I think we'd still prefer to be explicit in our config with the $EP, $SEQ, $SHOT hierarchies.

The issue with $EP, $SEQ, $SHOT environment variables is that they require a lot of guessing in Ayon. The folder path and parent might work even it it doesn't follow OCIO documentation.
Our clients' experiences suggest that our approach would work for 95% of projects, which typically involve a sequence or shot hierarchy. However, for projects with seasons, episodes, sequences, and shots, we'd need to lay down some more groundwork. It's unclear if the effort is justified for the remaining 5%. It's not clear if these projects use looks from one OCIO config for the whole season or episode. They might use separate configs for each season or episode. If that's the case, this idea could work too.


Intra-Org Spoofing - Could be Classified as SPM and SPOOF?

Is it accurate in the table in the section "Understanding changes in how spoofed emails are treated" that intra-org spoofing is always classified as SPM? I've been doing testing, and I've had the service classify such spoofing as both SPM and SPOOF. In the case of SPM, the compauth reason code was one of the 4xx codes reflecting. It seems this might need some more precision.
Overall, the complexity of anti-spoofing protection has increased significantly, and it seems hard to fully master. A lot of good material in this article, but if it isn't accurate such as noted here then it does make things harder. Thank you.

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

ID: e130b60f-b97b-cfb1-4857-a08e79fdfd59
Version Independent ID: 19e405c4-a6c0-7c75-b925-ff9637f1889e
Content: Anti-spoofing protection in Office 365 - Office 365
Content Source: microsoft-365/security/office-365-security/anti-spoofing-protection.md
Service: o365-seccomp
GitHub Login: @chrisda
Microsoft Alias: chrisda

Hello @chrisda Chris, I am having difficulties trying to repro this to see if we have to impact the documentation, can you help me finding out if something has changed from Exchange Online side? thanks

Can you elaborate? SPM is a verdict we give and SPOOF is a category that could lead to something being marked as NSPM, SPM, HSPM, or PHSH.

@jreinhardtiv4 did you see @andypunt comments? Thanks

@andypunt -- Thank you for your review. What I'm saying is that per the document, as it was posted, seemed to suggest that any intra-org spoof would be given the CAT:SPM type. What I found is that in some cases I was seeing CAT:SPM.
As it stands now, though, the article has been changed to indicate that if compauth fails, then an intra-org spoof would have the CAT:SPOOF. This does make more sense to me as long as it is accurate. Given the current wording, is it true that if an intra-org spoof had a compauth of success, then it would never be given CAT:SPOOF but could still be given the CAT:SPM by the content filter? I hope that makes sense. The updates from last week do seem to help a little bit.

Yes, we updated the article and it should be as you stated now.

@jreinhardtiv4 I hope the change in documentation clarifies it better.
@chrisda @andypunt thanks for your participation in this issue.
@mypil This can be closed now.
Thanks all


Page refreshes: Use pathname instead of href to detect if locations are equal

Before this commit, URLs had to be exactly the same for the possibility of a refresh with morphing.
Now, it only checks that the paths are equal, regardless of whether they have different search params.
From my perspective, search params don't determine whether it is a refresh or not. The most representative example that comes to mind is the same case as a Rails controller. A show action could have different search params, but in essence, it remains the same action and the same page.
Additionally, sometimes when clicking a link on social media, for example, tracking parameters are injected. If these parameters exist and a form is submitted, Turbo would not detect that it is a refresh.
These are just small examples of use cases, but obviously there are many more.

@jorgemanrubia or @brunoprietog In my application I have multiple cases where I want the Page Refresh morph action to be used, but the routes differ in a more significant way than simply search params. But currently, the page will only morph when it redirects back to the same route.
I think that I have good reason for my routes to be different, but then it falls back to Turbo Drive's full body replacement. I find myself contorting my code in order to redirect back to the same route just so I can get the Page Refresh morph to work.
Should we also add a way for morph to be explicitly triggered by including data-turbo-action="morph" in a form or in a link_to? I think the automatic default is very reasonable, but it doesn't feel right that the automatic default is the only way.
(Maybe it's not right to have this discussion on this pull request but this seems to be the most recent place that the question of route matching / page refresh was being considered.)

Yes, I've also seen the need to do so. My most representative case is a page with several tabs, in which to maintain order, I have each tab in its own controller. I had to unify them in one and differentiate them using the tab parameter, but it's certainly not the most comfortable.
The argument for not doing it is that since morphing is an expensive operation, it shouldn't need to be done when the current page doesn't look like the new page. But as we have seen, this is not always the case. Just because the path isn't the same, doesn't mean that the pages don't look similar enough to want to morph. Over time, I feel this will incentivize the use of fat controllers with parameters that differentiate the different use cases, just to be able to take advantage of morphing.
I also understand that it's a cost to introduce a new element to the Turbo API, and that is also a valid point.
I would also love to be able to make Turbo frames navigation with morphing for accessibility reasons. I'm currently doing it but using Idiomorph separately.

@brunoprietog Thanks for the quick reply. I'm glad I'm not crazy. :) I too have started to create fat controllers with parameters that differentiate the use-cases in order to solve for this.
@jorgemanrubia I tee'd up a PR that adds this functionality. It's my first time contributing to rails/hotwired/stimulus so I hope I followed the guidelines correctly: #1145 .  I welcome any guidance on how I implemented it.


[Webmail][modify]CSS

Coverage decreased (-0.2%) to 80.072% when pulling 68c073bdcc411d99209dd15772a9e2a8575b7492 on MasakiInaya:gws into d8969678761a1327f66278adbb7eb3dbdf9105a3 on shirasagi:dev/gws.


Add custom JSON serializer for psycopg

Fixes WAREHOUSE-PRODUCTION-1PG, where the underlying issue is that we're trying to include a Caveat in the additional field (JSONB) of a UserEvent, and it can't be serialized to JSON.
I tried a few things here, including:

manually updating all calls to record_event to manually serialize Caveats;
setting/enforcing a custom JSON-serializable type on record_event, to ensure we don't backslide;
various subclassings of Caveat to trick psycopg into serializing it automatically (was maybe possible with psycopg2, doesn't seem to be possible with psycopg3).

...but the cleanest and most durable thing seems to be just letting us continue passing things like Caveats as part of other objects that can already be serialized, by setting a custom serializer.
One thing I'm unsure about: would it be faster/better to first try to universally json.dumps(obj) and catch the TypeError and then do the custom serialization, or is this fine? Does it even matter?

I guess the other thing we could do here is make a custom serializer that's less generic, and only knows how to serialize Caveats + everything else json.dumps can serialize, and not every dict-like thing.
That would also resolve my other concern with this, which is that we could accidentally serialize a field of a dict-like thing that we didn't mean to, and leak data as a result.

Yea, being explicit about what we want to serialize makes sense to me.
I guess one thing to note is that we could use a Pyramid renderer to do the serialization. The main thing that gets us is the Pyramid JSON renderer has functionality to allow you to define how you serialize non primitive objects without having to write a giant if else statement.
Objects can add a __json__ method, or we can register specific serialization functions for specific objects using pyramid.renderers.JSON.add_adapter.
I don't think that's a requirement for this PR or anything, just a thought that popped into my head. The downside is it wouldn't let us differentiate between stuff we want serialize for the database and stuff we want to serialize for public consumption... but I'm not sure that that is something we care about?

Docs: https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/renderers.html#serializing-custom-objects

Docs: https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/renderers.html#serializing-custom-objects

I did this, it's a little weird to initialize but works great.

This serialization format loses the "type" of the originating dataclass. We can usually infer it from the values (like normalized_names pretty likely came from a ProjectName object, but that's not strictly true. It'd be great to preserve that link if we can somehow.

I took a look at this but I'm not really sure how to preserve the type without adding another serialization format on top of JSON?

Did you look at dataclasses-json as a potential solution? I haven't used it in anger in a while, but last time I did for API purposes, it did a decent job (and yes, it also loses the dataclass type)

I didn't.

There's also pydantic's recommended solution - did you look at that, and did it not work out? (and yes, it also loses the dataclass type)

I'm not sure why, but our Caveat subclasses don't have the model_dump_json attribute/function.

Considering that in the specific case we have today - dump whatever caveats we have to an additional jsonb field for recording purposes - do you see a more generalized need for caveat serialization and deseralization to json?

Probably not deserialization, although I don't see why that wouldn't be possible with what we've currently got here.

This serialization format loses the "type" of the originating dataclass. We can usually infer it from the values (like normalized_names pretty likely came from a ProjectName object, but that's not strictly true. It'd be great to preserve that link if we can somehow.

I took a look at this but I'm not really sure how to preserve the type without adding another serialization format on top of JSON?

I think this might be what Donald was alluding to? We have a serialize() function today that governs the format, and includes the "type" as an integer (the tag), so that satisfies "what caveat type is this?" question.
If we can use that function to create the thing we stuff into the database, then at least we're using the same format.

Did you look at dataclasses-json as a potential solution? I haven't used it in anger in a while, but last time I did for API purposes, it did a decent job (and yes, it also loses the dataclass type)

I didn't.

No problemo - I don't know if iot would have helped with pg-specifics anyhow.

There's also pydantic's recommended solution - did you look at that, and did it not work out? (and yes, it also loses the dataclass type)

I'm not sure why, but our Caveat subclasses don't have the model_dump_json attribute/function.

That's because we're using dataclasses, and there's a guide for how we'd have to use the RootModel with the type as a prefix to using model_dumps_json, something like:
RootModel[RequestUser](RequestUser(user_id='42')).model_dump_json()

which isn't super intuitive to me, so am happy there's other ideas here.

My biggest hesitation is around psycopg.types.json.set_json_dumps(serialize_as_json) - for some odd reason it feels too low level to me. There's something about this being the new default json renderer for the library that feels a bit heavy-handed, so if there's a better way to guard the serialization to only apply to objects that we've set custom __json__ properties for, I think it'd make me feel safer.

My biggest hesitation is around psycopg.types.json.set_json_dumps(serialize_as_json) - for some odd reason it feels too low level to me. There's something about this being the new default json renderer for the library that feels a bit heavy-handed, so if there's a better way to guard the serialization to only apply to objects that we've set custom __json__ properties for, I think it'd make me feel safer.

The issue is that the renderer/serializer doesn't get an object with custom __json__, it gets a dict or list and the object is buried inside that datastructure -- so we can't just put an if/else in our serialize_as_json function. The psycopg3 driver doesn't let extend the default serializer to handle custom cases (this was the thing I mentioned that was maybe possible with psycopg2, but doesn't seem to be possible with psycopg3).
Is the concern that the Pyramid JSON renderer is somehow wrong or would produce invalid JSON?

The psycopg3 driver doesn't let extend the default serializer to handle custom cases (this was the thing I mentioned that was maybe possible with psycopg2, but doesn't seem to be possible with psycopg3).

I must have missed that. I guess if this is how psycopg3 expects us to handle custom serialization, then so be it!

Is the concern that the Pyramid JSON renderer is somehow wrong or would produce invalid JSON?

We already override the Pyramid JSON renderer once, here:
https://github.com/pypi/warehouse/blob/52fdd6728a70736816c09a55af12be34201b5ef0/warehouse/config.py#L615-L623
Having this be a slightly different json serializer probably won't matter in the long run, since we're storing in the DB as jsonb (already compact, and sorting shouldn't matter), but I wanted to make sure it's noted.
Thanks for changing to the serialize() - if you're happy with the json serializer override, then let's go.


fix: version compatibility

Description
Uses the default (LATEST-EAP-SNAPSHOT) for version, since we probably want to build on latest.
Also changes updateSinceUntilBuild to false from it's default true. I believe this is good to address issues where the plugin isn't available for EAP and other JetBrains IDEs.
See https://github.com/JetBrains/gradle-intellij-plugin#building-properties.
Similar to Prettier's plugin: https://github.com/JetBrains/intellij-plugins/blob/master/prettierJS/build.gradle.kts

Here is a demo of one of my plugins (release pull request) for verification:

vs not having it:

Feel free to change the sinceBuild to like 193 or something.
Source: https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html#intellij-platform-based-products-of-pre-20162-ide-versions
I forget when this was first released, but I believe it was 193.

@JavierSegoviaCordoba - you tried something similar, right?

Yeah, the problem I got is the plugin doesn't compile with LATEST-EAP-SNAPSHOT, I have to update some methods that have changed in order to use the plugin in 2021.1

@jef can you verify you can build and install the plugin?

Sorry, I was under the assumption that the CI did that, but I'm realizing now that it is for the rest of the project.
That being said, I couldn't get it to run without getting a few lines of these:
CodeStyleManagerDecorator.java:92: error: name clash: reformatText(PsiFile,Collection<TextRange>) in CodeStyleManagerDecorator and reformatText(PsiFile,Collection<? extends TextRange>) in CodeStyleManager have the same erasure, yet neither overrides the other
  public void reformatText(PsiFile file, Collection<TextRange> ranges)

I believe the same thing that @JavierSegoviaCordoba ran into.

Building on 2020.3 worked though and the key part here is updateSinceUntilBuild.
I thought it would be good to add workflows for building the plugin as well. Not necessary, but could be useful if we decide to pull that in. Let me know otherwise.

I think the only way to allow users to get the new version, is merging the PR I created which generate and upload the plugin as a zip in GitHub Actions.
Steps:

Create a permanent branch called, for example, latest-eap-snapshot.

Update it continuously so latest eap compiles.

Launch the workflow from GitHub GUI to generate a zip which can be downloaded.

I think the only way to allow users to get the new version, is merging the PR I created which generate and upload the plugin as a zip in GitHub Actions.

I don't believe that's entirely true. I have a workflow that pushes to the marketplace directly
https://github.com/jef/forest-night-jetbrains/blob/main/.github/workflows/release.yaml

That being said, it can still be done manually and this PR ensures that we also don't need to publish a version without any code change.

But ktfmt should not be published with latest eap until it is stable, sample:
ktfmt 0.20 is published to marketplace with 2021.1 compatibility.
ktfmt 0.21 is released, you have to rollback the 2021.1 changes to 2020.3 and publish it because if you publish the plugin with 0.21, it will not work on 2020.3
Maybe the plugin from the latest eap branch can be published to a different channel to avoid downloading the plugin as zip from actions, I can transform the workflow I created to do this.
What do you think @cgrushko?


Refactor dockerfile: don't need to activate mono_repo

Closes #27

This should speed up builds quite a bit!

Running only dart pub get for test/hello definitely shaves time off running mono_repo pub get for the full repo (~15s), but unfortunately it's running the build_runner in the dockerfile that's takes the lion share of the time (nearly 70s)! But every bit helps! :D

We could try copying over the .dart_tool directory, too – then the build
cache is reused.
On Wed, Nov 25, 2020 at 10:29 PM Tony Pujals<EMAIL_ADDRESS>wrote:

Running only dart pub get for test/hello definitely shaves time off
running mono_repo pub get for the full repo (~15s), but unfortunately
it's running the build_runner in the dockerfile that's takes the lion share
of the time (nearly 70s)! But every bit helps! :D
—
You are receiving this because your review was requested.
Reply to this email directly, view it on GitHub
https://github.com/GoogleCloudPlatform/functions-framework-dart/pull/28#issuecomment-734102139,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAAEFCSG24V44MULEWVLDO3SRXYTFANCNFSM4UDGASEQ
.


TDR-2628 Feature block http4s

This pr will enable us to run the consignment application using Http4s or Akka http. This is so that we can test http4s. If all goes well. We will decommission Akka.

The other thing I can think of is that it's not logging the requests to the routes. You can add some basic logging of the routes by doing something like:
val loggingWrapper: HttpApp[IO] = httpApp[IO](true, false)(corsWrapper)
Then in the server, call that instead of corsWrapper
    .withPort(port"8080")
    .withHttpApp(loggingWrapper)
    .build

It might help a little bit and it might not be good enough when you're using this exclusively but it might be worth it?


check that Byron can increment its adopted protocol version

I'm not sure if this should be considered to fully address #1514, but it's good first step.
It's currently blocked on #1161: the votes are replicated and fill up the blocks, making the test quite expensive. Good news, though: I do see the protocol version has increased at the end.
The remaining TODOs primarily focus on predicting when the protocol should have increased and confirming that it has: I've so far only confirmed the behavior via a trivial TestConfig and manual inspection of the final ledger state via a tabulate.
I'm opening this as Draft so you can see the shape of the changes and the pretty-good-so-far comments.

This PR is in Draft status because it currently includes the latest tip of @intricate's PR #1749 -- without that PR's contents, this PR's contents creates disruptively large blocks because of Issue 1161.

The single large commit contains two minor aspects that are tangentially related to the PR's focus.

I introduce data TestNodeInitialization blk, to clarify the ThreadNet interface, especially the rekeying part.
I essentially cut-and-paste mkProtocolRealPBFT out into its own module to so that the new code can also be located in a separate module.

I've requested review. The PR is in Draft just because it's currently rebased onto Luke's "intelligent" transactions PR. I expect an automatic rebase onto master once his is merged.

Luke's PR is merged! I rebased onto master and marked this PR Ready for Review.

bors r+


Basic auth doesn't work correctly with passwords containing colon

Simple Web Server v1.2.8 win portable
If basic authentication is used and the password contains :, then it's impossible to pass authentication successfully with the valid credentials - error 401 occurs.
The root of the problem must be the call split(':') here:
https://github.com/terreng/simple-web-server/blob/f65003ac6381a12482b431a5927757105844c50f/WSC/handlers.js#L174-L183
It is intended to separate the username from the password by splitting the credentials at :. But because the password itself contains :, the latter gets truncated.
A possible solution would be to use indexOf(':') to find the first occurrence of : and split credentials at that position.

Oops. Thanks for catching this and for pinpointing the cause of the issue. It'll be fixed in the next release. (1.2.9)

Landed in 1.2.9.


hand annotation problems

Dear authors,
Thanks for your awesome work and the dataset!
After learning about your work, I have some problems about hand annotation files and hope you can help me. Thanks a lot!
The file hand_param.pkl has fields hand_pose, hand_shape, hand_tsl and obj_transf. Can you please explain what hand_tsl and obj_transf stand for? What's more, if I want to use annotations from other datasets, how can I get the hand_tsl and obj_transf parameters, given joints coordinates, camera parameters, hand poses and hand shapes?
Looking forward to your reply!
Thank you!

Hi,
Thank you for acknowledging our work!.
The field: hand_tsl represents a 3x1 vector that translate the root-relative hand joints to the camera coordinates system.
Usually, the hand vertices and joints yielded from ManoLayer is represented in a root-relative system, see ManoLayer here. Hence if you want to use hand vertices in camera space, you need this hand_tsl.
The field: obj_transf represets a 4x4 matrix of SE(3) transformation (including both rotation and translation) of object. Similarly, the object vertices loaded from disk is represented in its canonical space. we need to use the obj_transf to transform it to camera space.
If you want to use other dataset for hand-object interactions. You need to parse their annotations to seek a consistent representation in 3D space.
Here, I can share my data loaders for F-PHAB, HO3D and DexYCB datasets.

F-PHAB: https://github.com/lixiny/ArtiBoost/blob/main/anakin/datasets/fhb.py
HO3D: https://github.com/lixiny/ArtiBoost/blob/main/anakin/datasets/ho3d.py
DexYCB: https://github.com/lixiny/ArtiBoost/blob/main/anakin/datasets/dexycb.py

Hope these help!
Lixin

Hi,
Sincerely thanks for your reply a lot and these do help!

Hi, I have a follow up question about using other datasets in Tink.
Now if I want to use other datasets like DexYCB to visualize hand-object interactions with Tink, is it workable to load the dataset using only the above data loaders? I noticed that in Tink, there was a pkl file called "raw_grasp", which contained four parameters: hand_pose(1X64), hand_shape(1X10), hand_tsl(1X3), obj_transf(4X4). I also noticed that in your data loader for DexYCB there was a function for getting obj_transf. So I wonder if I can get the corresponding four parameters using above data loader. I felt so confused about coordinates translation between Tink and other datasets like DexYCB, as I never got the right visualization results using the parameters in the DexYCB dataset. I thought it was due to the coordinate system.
Thanks for your help!

Also I found that in the 'cal_contact_info.py' of Tink there was a function named "get_hand_parameter", which aimed to process the hand data in the dataset. I want to know whether the mano parameters of hand in other datasets also need to be processed by this function before hand, as I couldn't get reasonable results using DexYCB data when visualizing with Tink.
Sorry to have so many questions and thanks for your kindness!

The coordinate systems used by DexYCB dataset and used by Tink are different.
For the image-based DexYCB and OakInk-Image datasets, we aimed to acquire hand pose (16 x 3), hand translation: (through get_joints_3d[center_idx, :]) (3 x 1), and object transform (4 x 4) in the camera's coordinate system, in which we can project the hand and object vertices back to image plane using intrinsic K.
For Tink, we aimed to represent the hand mesh in the object's canonical coordinate system.
However, the raw data (raw_grasp）used by Tink is also represented in camera system.
Hence, in the function:  get_hand_param, we transform the hand pose and hand translation from  camera space to the object canonical system.
Hope this helps!
Lixin


After the Spark version is modified and the Spark script is executed in the workflow, the engine spark-2.4.3 is still found

Search before asking

[X] I searched the issues and found no similar issues.

Linkis Component
linkis-commons
What happened + What you expected to happen
自定义的版本是spark2.4.8，linkis配置文件以及数据库中修改适配该版本后，可以正常执行cli和Scripts中的spark脚本，但是运行工作流中的spark脚本报错

The customized version is Spark2.4.8. After the linkis configuration file and database modification are adapted to this version, the SPARK script in cli and Scripts can be executed normally. However, an error occurs when the Spark script in workflow is run
Relevent platform
nothing
Reproduction script
nothing
Anything else
This question comes from the QA documentation of the Linkis community
QA Doc Link：https://docs.qq.com/doc/DSGZhdnpMV3lTUUxq
Are you willing to submit a PR?

[x] Yes I am willing to submit a PR!

solution：
linkis/conf/linkis.properties
dss/conf/dss.properties (This place is easy to overlook.)
Add configuration to wds.linkis.spark.engine.version=2.4.8


Add specific filters in search requests

@narve As discussed during the last meeting, could you create another PR to add a filter based on the time period, and another PR for generic filters (hints, ...)


alvr_server Add-ons blocked

Description

General Troubleshooting

[x] I carefully followed the instructions in the README and successfully completed the setup wizard
[x] I read the ALVR Wikis here and here

Environment
Hardware
https://linux-hardware.org/?probe=d1da7498da
Installation
ALVR Version: v17.0.0 ~ 20.0.0 nightly + last commit https://github.com/alvr-org/ALVR/commit/e2a19c3d1f11783c633f995fb3aac276808dc4ea
SteamVR Version: 1.24, 1.25.3 (beta), 1.14 (linux beta)
Install Type:

[x] Packaged (exe, deb, rpm, etc)
[x] Portable (zip)
[x] Source

OS Name and Version: Ubuntu 22.04, Ubuntu 22.04.1, Kubuntu 22.04.1, Kubuntu 22.10, Lubuntu 22.04, Lubuntu 22.04.1
What I tried to solve this problem...

Reinstall SteamVR, Steam
Change ALVR Version
Self compile (many options) and compile Pull requests
Ubuntu 22.04.1 reinstall
Kubuntu 22.10 install (But it makes https://github.com/alvr-org/ALVR/issues/1423)
Install amdgpu-pro driver + Place amdgpu missing firmware

Dumps files
alvr_dumps.tar.gz

I found what's caused
amdgpu-pro Driver make ALVR crash.

Hi @Kieaer, I got similar problem. Do you have any idea how to fix it?

I have this same issue, except I'm using Debian 11.

I have this same issue, except I'm using Debian 11. The fix provided above did not solve the issue for me.

have you tried rm ~/.config/alvr/session.json?

I have this same issue, except I'm using Debian 11. The fix provided above did not solve the issue for me.

have you tried rm ~/.config/alvr/session.json?

Just tried this, all I got was this error: cannot remove '/home/user/.config/alvr/session.json': No such file or directory

what version of alvr? will also need your ~/.steam/steam/logs/vrserver.txt

I'm using version 19.1.0
vrserver.txt

i can see the crash in the logs but not exactly clear on the why.
are you also getting the same with the latest nightly?

i can see the crash in the logs but not exactly clear on the why. are you also getting the same with the latest nightly?

Hmm, let me check

i can see the crash in the logs but not exactly clear on the why. are you also getting the same with the latest nightly?

I'm still getting the same results as before, but now I'm also getting this

try this (will need to install gdb):

get into sudo -i so that you won't be prompted the password, and unblock addons in steamvr before closing steamvr
for vrp in vrdashboard vrcompositor vrserver vrmonitor vrwebhelper vrstartup X11Overlay; do pkill -f -9 $vrp; done to clear up any lingering steamvr processes
prepare gdb --pid $(pidof vrserver) in your prompt
start alvr and then run the gdb command 1-2 seconds after
type continue in gdb
give it a few seconds, you'll get some kind of SIGxxx message most likely.
type bt and it should give you the backtrace. paste it here

try this (will need to install gdb):
* get into `sudo -i` so that you won't be prompted the password, and unblock addons in steamvr before closing steamvr

* `for vrp in vrdashboard vrcompositor vrserver vrmonitor vrwebhelper vrstartup X11Overlay; do pkill -f -9 $vrp; done` to clear up any lingering steamvr processes

* prepare `gdb --pid $(pidof vrserver)` in your prompt

* start alvr and then run the gdb command 1-2 seconds after

* type `continue` in gdb

* give it a few seconds, you'll get some kind of SIGxxx message most likely.

* type `bt` and it should give you the backtrace. paste it here

* once, done, ctrl-d in gdb to detach

Should I do this with the regular version of ALVR or nightly?

whichever you have installed is fine.

After typing bt all I got was this: No stack.

did you get any messages before typing bt?

did you get any messages before typing bt?

[Thread 0x7fc2a41fd6c0 (LWP 55806) exited]
[Thread 0x7fc298dfb6c0 (LWP 55807) exited]
[Thread 0x7fc299dfd6c0 (LWP 55805) exited]
[Thread 0x7fc29adff6c0 (LWP 55799) exited]
[Thread 0x7fc29a5fe6c0 (LWP 55800) exited]
[Thread 0x7fc2a4ffe6c0 (LWP 55798) exited]
[Thread 0x7fc2a57ff6c0 (LWP 55797) exited]
[Thread 0x7fc2ad1536c0 (LWP 55792) exited]
[Thread 0x7fc2acd036c0 (LWP 55796) exited]
[Inferior 1 (process 55791) exited normally]

what if you don't type continue after starting gdb but just wait for 10 seconds and then bt?

what if you don't type continue after starting gdb but just wait for 10 seconds and then bt?

I get this:
#0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
Backtrace stopped: Cannot access memory at address 0x7ffe038e3468

After uninstalling a graphics card driver that was not meant to be used with my graphics card, ALVR launched without issues.


Code suggestion issue

I am using the plugin in PHPStorm, where I have a project written on TypeScript.
Enabling TabNine plugin braces code suggestion.
E.g.
Pressing Ctrl+Space with TabNine disabled:

and enabled:

Ctrl+Space action is Code -> Completion -> Basic
PHPStorm version 2019.2
TabNine version: 0.1.2

I also get this issue on Ubuntu Linux with Webstorm version 2019.2.3 - TabNine version 0.1.3.

Same issue here with Webstorm 2019.2.3 and TabNine 0.1.3.

After many hours of playing around with the code I may have found a possible solution!
I tracked the root of the issue down to src/main/java/TabNineCompletionContributor.java. If TabNine returns no completion results the plugin decides that no results should be shown period. This means that invoking autocomplete at the start of a line will always yield "No Suggestions."
The code below hands controls back over to Webstorm's autocomplete when TabNine comes back with nothing.
       TabNineProcess.AutocompleteResponse completions = this.retrieveCompletions(parameters, baseMaxCompletions);
       PrefixMatcher originalMatcher = result.getPrefixMatcher();
       if (completions != null) {
+            if (completions.results.length == 0) {
+                super.fillCompletionVariants(parameters, result);
+                return;
+            }
           result = result.withPrefixMatcher(new TabNinePrefixMatcher(originalMatcher.cloneWithPrefix(completions.old_prefix)));
           result = result.withRelevanceSorter(CompletionSorter.defaultSorter(parameters, originalMatcher).weigh(new TabNineWeigher()));
           result.restartCompletionOnAnyPrefixChange();

I'm not a Java developer and this solution was found by hours of trial and error. If anyone can provide guidance on whether this is an acceptable solution that would be appreciated! @zxqfl?

@cconcise this seems like a good fix to me. Maybe submit a PR and @zxqfl can review? Would be nice to get this resolved for the new Webstorm version release today.

Yea does look like this version of the plugin gets less attention. However, it was interesting to see that Jetbrains have outlined in their WS 2020 roadmap to implement machine learning based completions

We’ve started experimenting with code completion powered by machine learning for JavaScript and TypeScript. This will allow WebStorm to deliver more accurate completion suggestions and thus make it easier for you to write quality code faster.

This from their roadmap blogpost: https://blog.jetbrains.com/webstorm/2019/12/webstorm-2020-1-roadmap/
I wonder if they'll use TabNine under the hood for it or make their own?

Hey, we'd love to know whether that buggy behaviour still exists or was it fixed? Thanks!

@boaz-codota hey, I just today reinstalled the plugin and it has been fixed :+1:
thank you


dask.dataframe.join

DataFrame joins can take on a few forms based on how much we know about the left and right sides

dask-pandas and pandas-dask: This is a trivial map_blocks operation
dask-dask along index with known partitions:  In this case we can compute joins very efficiently by cross referencing the partitions and only joining those blocks where we know that there is some intersection
dask-dask without known partitions:  When we join along a non-index column or when we don't know partitions, then we resort to a hash-join, probably using the shuffle mechanisms and partd

I plan to take this on (unless someone else feels adventurous.)

It'd be interesting to compare the second case with a join in postgres on indexed columns.

That would indeed be very interesting.  I'd also be interested in comparing against kdb partitioned tables.

You might be waiting a while on that one. You can't do inner joins with on-disk tables.
q).Q.qp[trade] // 1b means partitioned
1b
q).Q.ind[trade; til 3]
date       sym  time         price size stop cond ex
----------------------------------------------------
2013.05.01 AAPL 09:31:05.272 84.06 38   0    E    N
2013.05.01 AAPL 09:32:24.432 84.08 65   0    L    N
2013.05.01 AAPL 09:34:47.338 84.11 73   0    A    N
q).Q.qp[mas] // 0 means in memory
0
q)3 # mas
sym  name
------------------------------
AMD  "ADVANCED MICRO DEVICES"
AIG  "AMERICAN INTL GROUP INC"
AAPL "APPLE INC COM STK"
q)ej[`sym; trade; mas] // ej is inner join, first arg is column to join on
k){x,:();y[&#:'i],'(x_z)(!0),/i:(=x#z:0!z)x#y:0!y}
'splay
@
(+(,`sym)!,`sym$`AMD`AIG`AAPL`DELL`DOW`GOOG`HPQ`INTC`IBM`MSFT`ORCL`PEP`PRU`SB..
+(,`sym)!`trade
q.q))

That gobbledegook at the bottom is an error message

Fixed by https://github.com/ContinuumIO/dask/pull/360


Switch between scheduled conferences

I think a different readmodel (just the list of all conferences) would be benefitial for this

closed by https://github.com/rommsen/ConfPlanner/pull/29


Remove the filename from the failed upload alert

There was a small risk of rendering unsanitized input and having the filename in the alert wasn't a huge benefit as the user will know which file they have just tried to upload.

:heart:


Tabline says dirty after undolevels = 0

Vim help:
It is then possible to exit Vim with ":q" instead of ":q!".
Note that this is relative to the last write of the file.  Typing "u" after
":w" actually changes the buffer, compared to what was written, so the buffer
is considered changed then.

So you can change the buffer, but the tab icon is still dirty.
I'm not sure what we need to detect in order to update the tab state, I can do some research on this.

Nice catch... I've seen a bit of flakiness around the dirty indicator so perhaps this is related.
I think right now we are using the 'b:changedtick' variable - perhaps we need to switch to use '&modified'?

right because b:changedtick will change even if you type and then undo like wise undo redo (assuming you saved after a change)
so checking &modified should give us the correct answer each time, I just test and it and seems correct

b:changedtick	The total number of changes to the current buffer.  It is
		incremented for each change.  An undo command is also a change
		in this case.  This can be used to perform an action only when
		the buffer has changed.

so checking &modified should give us the correct answer each time, I just tested it and it and seems correct

Cool, that does seem what we want!
To implement this, right now, the UI.Actions.bufferUpdate takes a version parameter. Seems like we'd want to replace that with an isDirty flag. We'd have to modify it in a couple places (action creator, action, reducer, state).
In addition, we don't send up the &modified flag. We might want to add that to the context we send up from neovim -> Oni. If we have that, then we can pass that easily to the bufferUpdate redux action.

Just tried out the latest changes - works great! The behavior of the dirty flag is working as I'd expect it now 😄 Thanks!

Since this is closed now, @cyansprite , you should be able to submit the solution @ bountysource. https://www.bountysource.com/issues/48329508-tabline-says-dirty-after-undolevels-0


Host and Seed model torrents using Torf and Transmission

Currently transmission client webui can be accessed through - http://<IP_ADDRESS>:9091 (has auth), which's currently hosting and seeding.
Webseed url can be accessed through - http://<IP_ADDRESS>:8989/ (public)
Takes care of

premai-io/CodeLlama-34b-Instruct-hf
petals-team/StableBeluga2

Note: Need to support tiiuae/falcon-180B-chat later, as currently not supporting due to memory constraints.
closes #1

LGTM


Unable to pass data

I am running the newest version of iOS & XCODE
I know how to pass data from one VC to the next using performSegue, however this situation is a little different.
CalendarVC - Holds the Data
transfers to calendarDetailsVC when a date is selected from the calendar
CalendarDetailsVC - Holds XLPagerTabStrip
CalendarDetailsBSVC - Needs to display variables form CalendarVC
When I try: (in CalendarVC since it has the data)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let destination = segue.destination as! CalendarDetailsBSVC
    let test = "SDFDSFDSF"

    destination.test = test
}

I have a "var test: String?" variable in my CalendarDetailsBSVC but the program crashes with:
Could not cast value of type 'appName.CalendarDetailsVC' (0x10152e648) to 'appName.CalendarDetailsBSVC' (0x10152eba8).
I have also tried accessing the variable directly from CalendarDetailBSVC, but no luck since the variable lives inside another class' function and thus I can't access it (it needs to be modified there)
How can I accomplish transferring this data?
Thank you

Hi @IronCoderXYZ
The problem is that the destination view controller in the segue is the CalendarDetailsVC actually, not the CalendarDetailsBSVC. The CalendarDetailsBSVC will be one of the tabs in the container view controller.
In order to pass data to one of the tabs, you should pass it first to the container view controller, in this case, to the CalendarDetailsVC. Afterwards, when you implement the method func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] in the CalendarDetailsVC, you should create the CalendarDetailsBSVC and set the mentioned data to it.
This solution makes the assumption that the CalendarDetailsVC is the PagerTabStripDataSource of the PagerTabStripViewController. If you are using a ButtonBarPagerTabStripViewController for example, this is done out of the box.
Hope it helps! Let us know if this solves the problem.
Best regards,

How should I do using ButtonBarPagerTabStripViewController?
ViewController A sends a string X to ViewController B (ButtonBarPagerTabStripViewController).
ViewController B has child_1 and child_2.
I need to use the string X in both children.
Now I can't receive string X in child_1 or child_2.

Hi @rodtaborda
As it was mentioned, in ViewController B you have to implement the method func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController], which is the method that tells returns the child view controllers.
Inside the implementation of this method is where you create both child_1  and child_2. When you create both of them, you can set the controller the string X as a property of each of them.
Hope it helps! Regards,

I have a case exactly like that one above and it works but, the UIStoryBoard scene have a navigation controller that the segue points to and this causes data not to be transferred to the base controller.
ViewController A sends a string X to ViewController B (ButtonBarPagerTabStripViewController).
ViewController B has child_1 and child_2.
I need to use the string X in both children.
From the UIStoryBoard I also have navigation controller before ViewController B so when I set the segue to the navigation controller the String X is nil and also when I set the segue straight to ViewController B's Scene the String is good but there is no navigation Bar. How can I do this?

So From the screenshot the segues pointing directly to the base are fine but the one pointing to the navigation controller is nil but shows the view correctly while the other ones only shows tabs


Check typos in CI

Thank you so much @tssujt 😄

Spellcheck is great!
Since we use pre-commit as a linter to check all codes, so maybe it would be better to move this part to pre-commit, what do you think?


Typescript definitions file

Can you please provide a definitions file for typescript? http://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html
Here is a great repo: https://github.com/DefinitelyTyped/DefinitelyTyped

Check this

@thewasta This issue should be reported to the DefinitelyTyped repo


resourceapply: log changes when objects are modified

This change will cause logging all changes to resources that we apply updates to. We already log diffs with CR's but we don't see why we changing things like pods/role bindings/etc.
I think this will improve our ability to debug changes done by operators and identify changes that are not desired which is worth the extra DeepCopy() ?
Test bump: https://github.com/openshift/cluster-kube-controller-manager-operator/pull/160

/cc @deads2k
/cc @sttts

/hold
will add more changes

/hold cancel
Change the status controller to spit json patch diff instead of object diff (it reads better and it is more compact).

/lgtm


Cyphers/constant

Disable constant_fold for Constant
Add evaluate for Constant
Add attribute visitor for Constant
Reduce need for layout in Tensor since it isn't set up until storage is allocated

TESTNOW_DLDT_E2E


Update Composer dependencies (2023-11-23-00-15)

Visual regression test passed!
View the visual regression test report


F# - Too many namespaces opened by default

I'm looking over the source for the F# kernel and I notice that FSharpPocketViewTags is opened by default, e.g. through this list in UseDefaultFormatting.  This brings into scope a swathe of HTML tags like a and area.
We should not be doing this in the default programming model and it won't create a programming experience that will last the test of time, even if it marginally improves demos.  People won't know where these values are coming from or what they are for, and they might very easily collide with other programming models.
In any case, F# basically already has its own point of view on default-opened namespaces for a programming model.  It's ok to add FSharpKernelHelpers to this but I would expect pretty much everything else to be explicitly opened.
For C# I think you should discuss with the C# designers - this is an issue for the basic concept of the C# scripting programming model and the defaults really impact on the reusability of script-like assets across different settings.
Here is the current list of explicit opens:
// From UseDefaultNamespaces
open System
open System.Text
open System.Threading.Tasks
open System.Linq

// From UseKernelHelpers
open Microsoft.DotNet.Interactive.FSharp.FSharpKernelHelpers

// From UseDefaultFormatting
open Microsoft.AspNetCore.Html
open Microsoft.DotNet.Interactive.FSharp.FSharpPocketViewTags
open XPlot.Plotly
open Microsoft.DotNet.Interactive.Formatting

Of these, I feel they categorise as follows:
Definitely not:
open Microsoft.AspNetCore.Html
open Microsoft.DotNet.Interactive.FSharp.FSharpPocketViewTags
open XPlot.Plotly
open Microsoft.DotNet.Interactive.Formatting

Probably not (for F# code)
open System.Threading.Tasks
open System.Linq

Probably ok (for F# code)
open System
open System.IO
open System.Text

Definitely ok:
open Microsoft.DotNet.Interactive.FSharp.FSharpKernelHelpers

People won't know where these values are coming from or what they are for, and they might very easily collide with other programming models.

I can confirm. I've been confused about where the list of names I keep seeing in autocomplete come from.

Don has already fixed this,
For F# the default namespaces are:
System
System.IO
System.Text
Microsoft.DotNet.Interactive.Formatting

For C# the default namespaces are:
System
System.IO
System.Text
Microsoft.DotNet.Interactive.Formatting


add tenant information

Docs Build status updates of commit d38de19:
:warning: Validation status: warnings

File
Status
Preview URL
Details

docs-ref-conceptual/manage-azure-subscriptions-azure-cli.md
:warning:Warning
View
Details

docs-ref-conceptual/manage-azure-subscriptions-azure-cli.md

Line 65, Column 133: [Warning: file-not-found - See documentation] Invalid file link: 'authenticate-azure-cli'.

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
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.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel

Docs Build status updates of commit d8015f6:
:warning: Validation status: warnings

File
Status
Preview URL
Details

docs-ref-conceptual/manage-azure-subscriptions-azure-cli.md
:warning:Warning
View
Details

docs-ref-conceptual/manage-azure-subscriptions-azure-cli.md

Line 65, Column 133: [Warning: file-not-found - See documentation] Invalid file link: 'authenticate-azure-cli'.

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
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.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel

Docs Build status updates of commit 45c6672:
:warning: Validation status: warnings

File
Status
Preview URL
Details

docs-ref-conceptual/manage-azure-subscriptions-azure-cli.md
:warning:Warning
View
Details

docs-ref-conceptual/manage-azure-subscriptions-azure-cli.md

Line 70, Column 133: [Warning: file-not-found - See documentation] Invalid file link: 'authenticate-azure-cli'.

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
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.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel

Docs Build status updates of commit 4d9dd30:
:warning: Validation status: warnings

File
Status
Preview URL
Details

docs-ref-conceptual/authenticate-azure-cli.md
:warning:Warning
View
Details

docs-ref-conceptual/manage-azure-subscriptions-azure-cli.md
:warning:Warning
View
Details

docs-ref-conceptual/authenticate-azure-cli.md

Line 125, Column 3: [Warning: file-not-found - See documentation] Invalid file link: 'azure/azure-cli-learn-bash.md'.

docs-ref-conceptual/manage-azure-subscriptions-azure-cli.md

Line 70, Column 133: [Warning: file-not-found - See documentation] Invalid file link: 'authenticate-azure-cli'.

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
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.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel

Docs Build status updates of commit a5a032f:
:warning: Validation status: warnings

File
Status
Preview URL
Details

docs-ref-conceptual/authenticate-azure-cli.md
:warning:Warning
View
Details

docs-ref-conceptual/manage-azure-subscriptions-azure-cli.md
:warning:Warning
View
Details

docs-ref-conceptual/authenticate-azure-cli.md

Line 125, Column 3: [Warning: file-not-found - See documentation] Invalid file link: 'azure/azure-cli-learn-bash.md'.

docs-ref-conceptual/manage-azure-subscriptions-azure-cli.md

Line 70, Column 133: [Warning: file-not-found - See documentation] Invalid file link: 'authenticate-azure-cli'.

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
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.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel

Docs Build status updates of commit 901087d:
:warning: Validation status: warnings

File
Status
Preview URL
Details

docs-ref-conceptual/authenticate-azure-cli.md
:warning:Warning
View
Details

docs-ref-conceptual/manage-azure-subscriptions-azure-cli.md
:white_check_mark:Succeeded
View

docs-ref-conceptual/authenticate-azure-cli.md

Line 126, Column 3: [Warning: file-not-found - See documentation] Invalid file link: 'azure/azure-cli-learn-bash.md'.

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
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.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel

Docs Build status updates of commit 8c6b7c0:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs-ref-conceptual/authenticate-azure-cli.md
:white_check_mark:Succeeded
View

docs-ref-conceptual/manage-azure-subscriptions-azure-cli.md
:white_check_mark:Succeeded
View

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

Docs Build status updates of commit a6f7898:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs-ref-conceptual/authenticate-azure-cli.md
:white_check_mark:Succeeded
View

docs-ref-conceptual/manage-azure-subscriptions-azure-cli.md
:white_check_mark:Succeeded
View

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

Docs Build status updates of commit eb9b508:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs-ref-conceptual/authenticate-azure-cli.md
:white_check_mark:Succeeded
View

docs-ref-conceptual/manage-azure-subscriptions-azure-cli.md
:white_check_mark:Succeeded
View

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


Quick Action suggestions should be refined

The Quick Actions for import lines are a mix of useful and odd suggestions.  We should be filtering these to only be the best actions.

We're closing old issues with no recent activity. If this is still important, please open a new issue.


Clarify config options and transitively included features

Current Config (as I understand it)

skip_feature_sets: A set of sets. Any feature set from the matrix that is a superset of any members will be dropped.
skip_optional_dependencies: Doesn't include optional dependencies when building the matrix.
extra_features: a set of features that will be included in every set in the matrix.
allowlist: If present, the matrix will only be built using these features. Other features may be transitively included.
denylist: If present these features will not be used to build the matrix but others may be transitively enabled.

Possible Sources of Confusion

Perhaps skip_feature_sets can be renamed conflicts or conflicting for clarity.
Default value for skip_optional_dependencies is false but the example in the README shows it as true and says in a comment that skipping them can improve performance.
Perhaps allowlist should be renamed as it implies that any feature set that (directly or transitively) includes a feature that's not in the list will be dropped from the matrix. I'm not sure what a good name would be. The best I could come up with is seed because these values are the seeds from which the matrix is build.
Perhaps denylist should be renamed to the opposite of whatever allowlist gets named for the same reason.
Features that start with __ are skipped but this is not documented and there is no way to disable it.

Transitively Enabled Features
Currently, transitively enabled features are not taken into consideration when building the matrix. I think that they should be taken into account for a few reasons:
Smaller Matrix
More feature sets can be excluded from the matrix as duplicates, This would help with combinatorial explosion. Currently a crate with 10 features/optional-deps would have 1024 feature sets in its matrix. If some of those features enabled other features we can significantly cut down on testing time.
Better Restrictions

We can allow users to deny transitively enabled features or optional dependencies. This would allow things like having a __nightly feature that is enabled by any other feature that uses nightly features and denying __nightly.
If conflicting features get transitively enabled, they can be dropped from the matrix.

I agree, that transitively features should be enabled. I am working on a PR for this.
Regarding the naming of settings perhaps a new issue should be open to keep the topics separate, however, I find allowlist and denylist acceptable names and skip_optional_dependencies could be clarified in the docs.


Immidiate Feedback on ON/OFF

I am controlling the integration via physical KNX devices. It would be nice if it would be possible to receive immediate feedback when switching the stove on or off because this would allow for the state change to be send back to the KNX Bus to visualize the device has turned on or off correctly.
At the moment this can take up to 30 seconds waiting for a polling interval to complete. Would it not be possible to always poll the device state information shortly after an event (switching on or off) was initiated?
Benjamin

Hi, @benjamishirley,
I'm aware of this.
Unfortunately, this is not something we can resolve at the integration side.
Polling the cloud faster is not an option, since changes only reflect in the MCZ database after 30secs of time.
Even if we polled the cloud every second, the change should still only reflect after 30sec.
Kind Regards,
Robbe

The only workaround I can think of, is to put an "assumed state" in your automations, where you simply assume the action has taken place after command execution, after 30 sec you can then check if this was true.

The only workaround I can think of, is to put an "assumed state" in your automations, where you simply assume the action has taken place after command execution, after 30 sec you can then check if this was true.

I implemented something similar as a workaround right now. I tell my KNX devices to consider the button press as a temporary state that immediately reflects on the devices.
Thanks for the hint, I wish nice holidays.
Benjamin


fix(repo): Use patched yalc with support for catalog:

Description
Current version of yalc does not support the catalog: protocol. Switching to use a patched version of yalc in the monorepo which supports this new functionality.

Checklist

[ ] pnpm test runs as expected.
[ ] pnpm build runs as expected.
[ ] (If applicable) JSDoc comments have been added or updated for any package exports
[ ] (If applicable) Documentation has been updated

Type of change

[ ] 🐛 Bug fix
[ ] 🌟 New feature
[ ] 🔨 Breaking change
[ ] 📖 Refactoring / dependency upgrade / documentation
[ ] other:

To play devil's advocate here: If we want to dogfood and use https://github.com/clerk/javascript/tree/main/packages/dev-cli more we could also just remove yalc altogether

To play devil's advocate here: If we want to dogfood and use main/packages/dev-cli more we could also just remove yalc altogether

@LekoArts I am definitely on board with moving away from yalc. We can put that on our backlog.
I am just trying to address the immediate issue with yalc now that doesn't work properly


Update README.md

🗣 Description
Fixed the spelling of Administrator

💭 Motivation and Context
Just updated the readme to fix a quick error

🧪 Testing
Made sure text was corrected

📷 Screenshots (if appropriate)

✅ Checklist

[✅ ] This PR has an informative and human-readable title.
[✅ ] Changes are limited to a single goal - eschew scope creep!
[ ✅] All future TODOs are captured in issues, which are referenced
in code comments.
[✅] All relevant type-of-change labels have been added.
[✅] I have read the CONTRIBUTING document.
[✅] These code changes follow cisagov code standards.
[ ✅] All relevant repo and/or project documentation has been updated
to reflect the changes in this PR.
[✅] Tests have been added and/or modified to cover the changes in this PR.
[✅] All new and existing tests pass.

Thank you for the pull!


[ci] Updates for CI in integrated_dev branch

Merging to unblock CI.

@a-will does this change look OK to you?

It looks probably OK to me. I'm not seeing any differences in approach to it vs. earlgrey_es, and that appears to have worked fine. In general, bitstreams_workspace.py is supposed to be able to choose a bitstream that is only part of the current branch's git history (except for the latest key, which makes it generally ill-advised to use anyway).
In the future, this branch likely could use some of the changes I made to master to better handle missing bitstreams in cache entries. My attempts on the integrated repo produced bitstreams_or() and such, and those were too high-maintenance.


[RFC] OpenSearch Dashboards: Extension Installation

Background
The OpenSearch project is introducing the OpenSearch and OpenSearch Dashboards SDKs. These SDKs provide a number of tools to make it easy to build, test, manage, install, and share feature enhancements. Additionally, the new framework results in an easier experience for administrators to add on to their OpenSearch and OpenSearch Dashboards deployments and maintain reliability.
In this document we are proposing different approaches to solve Extension installation into OpenSearch Dashboards.
Problem
Extension installation
Today, cluster admins have to completely stop OpenSearch Dashboards, download plugins and its dependencies that are compatible with their version of the application, and then restart the application when adding extra functionality with plugins. Customers need a way to easily find and install plugins and dependencies, that reduces the manual effort of ensuring OpenSearch and OpenSearch Dashboards has the required dependencies, and minimal interruption of services.
With this the first step is to decide on where extensions js bundle will live, how will the installation of new js bundle works with existing OpenSearch Dashboard core application. This decision will impact the way security authentication is done on extensions and how we can solve granting granular level access to extensions and if it is even required, which will be discussed as follow-up.
Scope:
In this doc, we are focused on Extensions being able to register itself within OpenSearch Dashboards without manual steps and render in the browser with minimum/no server downtime.
Out of scope for this doc:
Managing the dependencies
Extensions can install with configurations
Can extensions be configured with API?
How to manage extension dependencies and any other backend OpenSearch extension dependencies during installation process.
Working Backwards:
Who are the actors in the community:
a. Extension developer
b. End user and cluster admin
What would the customer like to see/use:
a. Not worry about updating Extension for every patch version of OpenSearch Dashboards.
b. Extension is not broken when OpenSearch Dashboards minor version is upgraded.
c. Install/Update/Remove an extension with/without restarting OpenSearch Dashboards ?
d. Not worry about manually restarting the OpenSearch Dashboards server to register the extension when it is installed.
e .Not worry about OpenSearch Dashboards going down due to an extension misbehaving.
f. Run a 3rd party extension and not worry about a 3rd party accessing data and configurations on the cluster to which it should not have permissions.
g. Ability to support granular access control of cluster resources for an extension, e.g. CPU, Memory, etc.
h. Ability to write an extension in any language of choice.
i. Want to be able to call the APIs provided by OpenSearch if available.
Possible solutions

Run extensions as part of OpenSearch Dashboard’s process which is similar to current plugin architecture which involves extension discovery, setup dependencies, establish routes for all the bundles, bootstrapping, loading it to the browser and rendering it. (Recommended)

This will be enhancement to the current state where installing extension will require auto-restart of the OpenSearch Dashboard server.
In this approach extensions are hosted on the same server where OpenSearch dashboard is running.
There will be a server downtime and can impact user experience in the browser .
If extension JS bundle is hosted alongside OpenSearch Dashboards, then we will automate extensions installation on multi nodes within cluster as well. Installation script will take care of iterating through all the nodes in the domain and installing extensions on each one of them. The list of nodes will need to be discovered and provided to the API/CLI script as input param.

Micro Frontend approach - In this approach, OpenSearch Dashboards core will be host application (shell) managing interfaces, contracts with backend and other performance improvement architecture work and extensions will be micro frontends focusing on feature extension, independent deployment, decoupled versions. (Recommended)

Extension JS bundle is hosted in remote node, fetched through http request and integrates bundle with OpenSearch Dashboards core using main thread execution during runtime of the application.
More isolated and can also be scaled between different machines/nodes
Multiple javascript extension bundles to render the final application instead of one monolithic javascript bundle.
Extensions can deploy independently from OSD.
Core OSD decouple from extension project, benefits version decoupling.
Gives extension developers flexibility to develop in their desirable technology.
Extension can be lazy loaded as required.
Pros:

Technology agnostic - Extensions need not follow same technology stack as OSD core does.
More isolated than current plugin architecture.
Better manageability of deployments and versioning.

Cons:

Risk of taking down the OSD application when extension micro-frontend has some issues and can cause run-time errors.
Complex architecture compared to monolithic repo model.

With this approach we are not running Extensions on a separate child thread within same container/process, but only using the event loop thread to discover, setup dependencies and establish routes to the extension bundle and call back bootstrap to give updated bundle chunks and re-render UI on the DOM mounted by main thread.

Independent process/sandboxing of extension - Spinning separate thread to run extensions in the different node process than OSD process is running

Anti-pattern?
Locking issues, race conditions, memory/resource sharing issues basically not a thread safe
Scalability issue when multiple extensions spawns multiple child processes.

No changes - Extension is same as plugins today.

Pros

No developmental effort required.
Continue to extend OpenSearch dashboards functionality with plugin’s current architecture.
Access to cluster internal APIs

Cons

Extensions continue to tightly couple with OSD core.
Slow developmental timeline due to cohesive framework.
Lack of ability to install/update/uninstall plugins without cluster restart.
No dynamic integration of features to dashboards.
Lack of dependency management and constant maintenance effort to be in sync with OpenSearch and OpenSearch dashboards versions.
No independent communication between extensions and between extension and OpenSearch.
No granular control access for extensions.

I want to propose installing extensions with first two approaches here because with the first approach we are going to quickly improve the current state of art for plugin installation by automating all the manual steps involved though it will not solve release problems, versioning for extensions due to its tight coupling with OpenSearch Dashboard. Here server restarts when registering extension which impacts user experience. This option will allow extension developers to not worry about hosting their extensions outside of OpenSearch Dashboards if they don't want to and maintains current plugin registration behavior except no manual steps involved.
With the second micro-frontend approach, we are making the architectural improvements to the bootstrapping technique to provide more scalable solution for extensions along with providing a layer of isolation for extensions as they are hosted in a remote node and integrated during runtime by avoiding server restart.

Related Hosting https://github.com/opensearch-project/opensearch-dashboards-sdk-js/issues/40

How about "Run extensions as part of OpenSearch Dashboard’s process" but without the downtime during install and uninstall? Instead of plugins calling PluginsService.setup, OSD will call PluginsService.setup for them.
If we find that sharing memory among OSD and plugins is a problem, we could go with discreet micro-applications which are executed as child processes of OSD and communication happens over IPC.

Run extensions as part of OpenSearch Dashboard’s process which is similar to current plugin architecture which involves extension discovery, setup dependencies, establish routes for all the bundles, bootstrapping, loading it to the browser and rendering it. (Recommended)

Trying to understand, for this approach would it mean when the extension goes down it takes down OSD with it, since its running on the same process?
This wouldn't really help if we would like to run tons of extensions without impacting the core functionality.

Track latency
Optimization on global shared dep (use major)


KInputSwitch: change event emitted twice when clicking

Seems to be that the underlying input fires an event for change and input, meaning KInputSwitch@change gets emitted twice.
https://github.com/Kong/kongponents/blob/00c25c83e37c13035837898f58162b8e22c23f6b/src/components/KInputSwitch/KInputSwitch.vue#L48-L49
Not sure why the input listener/handler is required?

This was fixed in https://github.com/Kong/kongponents/pull/1956/files


ID hknnr

rejected:B1
It looks like you are trying to submit B1, however it seems like the following submission criteria are problematic:

Logs are missing
We’ve thus marked B1 as rejected, however if this is a mistake, please upload the log summary and we can re-review.

confirmed:ID1
account1:3GpNaJoacQjTntnbVi25iKjzVNbGfSoUZowqphrakBrftS1Nvv
account2:4sF8ndLcMVk5jbrGoDax9cQAusTG54wKRKSUotVVp3srEQXxQq

confirmed:ID2
account1:3AnSuw1wjZWAnwMPhvLFAr6ZmCkGcKaJvevYvNaGYBsJw5mvCr
account2:3GpNaJoacQjTntnbVi25iKjzVNbGfSoUZowqphrakBrftS1Nvv
PublicDataAttributes:Verified
DeviceMake&Model:Verified

confirmed:ID2
account1:3AnSuw1wjZWAnwMPhvLFAr6ZmCkGcKaJvevYvNaGYBsJw5mvCr
account2:3GpNaJoacQjTntnbVi25iKjzVNbGfSoUZowqphrakBrftS1Nvv
PublicDataAttributes:Verified
DeviceMake&Model:Verified

confirmed:ID3
DocumentType:verified
Nationality:verified
DeviceDetails:verified
Experience:verified
Screenshot:missing

confirmed:ID3
DocumentType:verified
Nationality:verified
DeviceDetails:verified
Experience:verified
Screenshot:missing

confirmed:ID4
AccountAddress:3AnSuw1wjZWAnwMPhvLFAr6ZmCkGcKaJvevYvNaGYBsJw5mvCr
DeviceDetails:verified

confirmed:ID4
AccountAddress:3AnSuw1wjZWAnwMPhvLFAr6ZmCkGcKaJvevYvNaGYBsJw5mvCr
DeviceDetails:verified

confirmed:B4
address:3AnSuw1wjZWAnwMPhvLFAr6ZmCkGcKaJvevYvNaGYBsJw5mvCr
baker:291

confirmed:B4
address:3AnSuw1wjZWAnwMPhvLFAr6ZmCkGcKaJvevYvNaGYBsJw5mvCr
baker:291

rejected:B5
address:3AnSuw1wjZWAnwMPhvLFAr6ZmCkGcKaJvevYvNaGYBsJw5mvCr
reason: no 'update baker account' or 'update baker key' transactions found on-chain


Infra failure on flutter-frontend-try

I'm seeing infra failures with my flag flip CL for null safety that I don't really know how to debug.  See here for log.
@athomas who's the right person to look into this?

Thanks, that's an infra issue. The script is in https://github.com/flutter/buildroot/blob/master/tools/dart/create_updated_flutter_deps.py (in Flutter's buildroot which isn't checked-out by the flutter-frontend builder).

https://dart-review.googlesource.com/c/sdk/+/167806 should fix it.

I'm still seeing an infra failure with the fix above included, is it getting farther and failing somewhere else, or does this need to roll somewhere?

The test runner exits with exit code 1, this may be an issue with the CL so I've asked @jensjoha to take a look. I don't see an obvious infrastructure reason for this.

It crashes when it tries to verify. It does so because, as it loads, it finds an inconsistency in the NNBD settings, (one crash) as an example:

SDK is in weak mode
async-2.5.0-nullsafety.1 is compiled with nnbd disabled
(and other ones)
Then it tries to load flutter_test which is compiled with nndd strong => it tries to combined disabled and strong and boom.

Obviously it should have complained when trying to compile it as well.
And also, probably the sdk should have been compiled as agnostic (test setup I think)
I'll look into these points.
(There's also sort of an infra bug because it doesn't show the logs.json file which contains a stacktrace which would have been usefull I guess.)

https://dart-review.googlesource.com/c/sdk/+/168482 will fix at least some of this.

Thanks @jensjoha . @jakemac53 FYI.

I'm still seeing this bot as purple.

I believe this is an infra failure again. I'll try to reproduce locally and restarted the tryjob. I suspect this happens while there are DEPS changes on master or the CL that haven't rolled to flutter, yet. The DEPS change probably has rolled since. The script doesn't create a full triple headed checkout, and there is still something missing.

Isn't it just the same thing again? Because my CL hadn't landed yet (12 hours ago)...

Could be, but there's also an issue with DEPS upgrade script visible in the logs. Though we might want to remove this completely, because flutter-frontend doesn't even gclient sync.

This try bot is green with my CL so closing this out.  Feel free to re-open if you think there's more to be done here.  Thanks all!


unknow error after update latest version 1.0.37

after updating for the "hacs comfort cloud unexpected error occurred creatina device" to latest version 1.0.37 integration does not work anymore.
after login, unknown error occurs.
login and password work ok with confort cloud app and new amazon skill.
tks!

Yep same issue.
custom_components.panasonic_cc.pcomfortcloud.session.ResponseError: Invalid response, status code: 400 - Data: {"code":"4000"，"message":"Missing required header parameter or bad request for header"}

Try to reinstall the integration, this should work.

Tried thi procedure but unsuccesfully:
disabled Cc integration
removed Cc integration
rebooted ha
verified from fs side if everything ok
reinstalled integration
any suggestion is welcome!
thx!

Same for me no possibility to log in any more.

Hmm, hard to troubleshot without any logs...
Activate debug logging for the integration and post the logs here... I don't remember if it includes username and password, so make sure you remove any sensitive data before posting.

Will this help?
Logger: homeassistant.components.websocket_api.http.connection
Source: custom_components/panasonic_cc/pcomfortcloud/session.py:426
Integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 10:15:49 AM (2 occurrences)
Last logged: 10:15:58 AM

[139857528338752] Invalid response, status code: 403 - Data: {"code":4300,"message":"Have no authority to the request"}
Traceback (most recent call last):
  File "/config/custom_components/panasonic_cc/panasonic.py", line 21, in wrapper_call
    func(*args, **kwargs)
  File "/config/custom_components/panasonic_cc/panasonic.py", line 353, in set_device
    self._api.set_device(
  File "/config/custom_components/panasonic_cc/pcomfortcloud/session.py", line 426, in set_device
    raise ResponseError(response.status_code, response.text)
custom_components.panasonic_cc.pcomfortcloud.session.ResponseError: Invalid response, status code: 403 - Data: {"code":4300,"message":"Have no authority to the request"}

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 227, in handle_call_service
    await hass.services.async_call(
  File "/usr/src/homeassistant/homeassistant/core.py", line 1969, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2006, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 235, in handle_service
    return await service.entity_service_call(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 870, in entity_service_call
    response_data = await _handle_entity_call(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 942, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/config/custom_components/panasonic_cc/climate.py", line 129, in async_set_hvac_mode
    await self._api.set_hvac_mode(hvac_mode)
  File "/config/custom_components/panasonic_cc/panasonic.py", line 294, in set_hvac_mode
    await self.hass.async_add_executor_job(
  File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/panasonic_cc/panasonic.py", line 24, in wrapper_call
    func(*args, **kwargs)
  File "/config/custom_components/panasonic_cc/panasonic.py", line 353, in set_device
    self._api.set_device(
  File "/config/custom_components/panasonic_cc/pcomfortcloud/session.py", line 426, in set_device
    raise ResponseError(response.status_code, response.text)
custom_components.panasonic_cc.pcomfortcloud.session.ResponseError: Invalid response, status code: 403 - Data: {"code":4300,"message":"Have no authority to the request"}

I also get this one:
Logger: homeassistant.components.sensor
Source: custom_components/panasonic_cc/sensor.py:142
Integration: Sensor (documentation, issues)
First occurred: 10:30:38 AM (2 occurrences)
Last logged: 10:30:38 AM

Error adding entities for domain sensor with platform panasonic_cc
Error while setting up panasonic_cc platform for sensor
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 507, in async_add_entities
    await asyncio.gather(*tasks)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 752, in _async_add_entity
    await entity.add_to_platform_finish()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1002, in add_to_platform_finish
    self.async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 730, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 830, in _async_write_ha_state
    state, attr = self._async_generate_attributes()
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 771, in _async_generate_attributes
    state = self._stringify_state(available)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 736, in _stringify_state
    if (state := self.state) is None:
                 ^^^^^^^^^^
  File "/config/custom_components/panasonic_cc/sensor.py", line 142, in state
    return round(self._api.daily_energy,2)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: type NoneType doesn't define __round__ method

@qbnr7 The error indicates that the user you have authenticated with doesn't have modify rights on your HVAC.
If you log in to Comfort Cloud with this user, can you change any settings?

Have the same issue. Removing and readding integration lead to this error message:

Traceback (most recent call last):   File "/config/custom_components/panasonic_cc/config_flow.py", line 60, in _create_device     devices = await self.hass.async_add_executor_job(api.get_devices)               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run     result = self.fn(*self.args, **self.kwargs)              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   File "/config/custom_components/panasonic_cc/pcomfortcloud/session.py", line 201, in get_devices     self.login()   File "/config/custom_components/panasonic_cc/pcomfortcloud/session.py", line 105, in login     self._create_token()   File "/config/custom_components/panasonic_cc/pcomfortcloud/session.py", line 158, in _create_token     raise ResponseError(response.status_code, response.text) custom_components.panasonic_cc.pcomfortcloud.session.ResponseError: Invalid response, status code: 400 - Data: {"code":"4000"，"message":"Missing required header parameter or bad request for header"}

@qbnr7 The error indicates that the user you have authenticated with doesn't have modify rights on your HVAC. If you log in to Comfort Cloud with this user, can you change any settings?

I can log into the app, but my heat pump is connected through AQUAREA (but with the same credentials). And that is where I can control it.

Same problem here. Stopped working after upgrade....
Logginformation (FEL)
Felet härrör från en anpassad integration.
Logger: homeassistant.config_entries
Source: custom_components/panasonic_cc/pcomfortcloud/session.py:158
Integration: Panasonic Comfort Cloud (documentation)
First occurred: 11:49:45 (5 occurrences)
Last logged: 13:33:36
Error setting up entry for panasonic_cc
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 387, in async_setup
result = await component.async_setup_entry(hass, self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/panasonic_cc/init.py", line 79, in async_setup_entry
devices = await hass.async_add_executor_job(api.get_devices)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/config/custom_components/panasonic_cc/pcomfortcloud/session.py", line 201, in get_devices
self.login()
File "/config/custom_components/panasonic_cc/pcomfortcloud/session.py", line 105, in login
self._create_token()
File "/config/custom_components/panasonic_cc/pcomfortcloud/session.py", line 158, in _create_token
raise ResponseError(response.status_code, response.text)
custom_components.panasonic_cc.pcomfortcloud.session.ResponseError: Invalid response, status code: 400 - Data: {"code":"4000"，"message":"Missing required header parameter or bad request for header"}

Unable to connect to one of my indoor units after the update, not sure if it`s related to this post though.
2023-09-18 20:52:29.660 DEBUG (MainThread) [custom_components.panasonic_cc.panasonic] Error trying to get device 70c3825cd050a28c7n56c1e5d256ff77 state, probably expired token, trying to update it...
2023-09-18 20:52:30.946 DEBUG (MainThread) [custom_components.panasonic_cc.panasonic] Failed to renew token for device 70c3825cd050a28c7n56c1e5d256ff77, giving up for now

@willysagefalk You are not running v1.0.37, the error you are getting is the missing headers Panasonic added as a new requirement.

@qbnr7 Ok, so the issue is probably because Home Assistant is trying to set the hvac mode through the Panasonic Comfort cloud, and they added a 403 Have no authority to the request response in the latest update.
Could you pull the information before? And were you able to change any values from HA?

I am not sure it worked before either, but I was looking into and saw I was on a very old version.
I can load the plugin and login the Panasonic cloud. But I have not control over the heat pump.

I am also control it through the AQUAREA integration. But I was hoping to use your integration as it has more entities.

This issue has been inactive for a while, so we’re closing it for now. If you believe this issue is still relevant, please feel free to reopen it or create a new one.