InstallationError exception (Expected end or semicolon) using requirements with markers

Issue description
We have a set of mutually-exclusive requirements in our Pipfile to facilitate Arm-based Mac
Ever since the release of date when pipenv-2024.1.0 was released our pipenv install command is failing.
tensorflow-cpu = {"version"="~=2.13.0", markers="platform_machine != 'arm64'"}
tensorflow = {"version"="~=2.13.0", markers="platform_machine == 'arm64'"}
Expected result
Describe what you expected.
Actual result
When possible, provide the verbose output (--verbose), especially for locking and dependencies resolving issues.
Steps to replicate
2024-10-07T17:52:56.9855786Z Updated Pipfile.lock (acf54f59e98de30824501c4502bac36b3200da5011fbfda911e506fe2b611b50)!
2024-10-07T17:52:56.9863105Z To activate this project's virtualenv, run pipenv shell.
2024-10-07T17:52:56.9864686Z Alternatively, run a command inside the virtualenv with pipenv run.
2024-10-07T17:52:57.0046901Z To activate this project's virtualenv, run pipenv shell.
2024-10-07T17:52:57.0048278Z Alternatively, run a command inside the virtualenv with pipenv run.
2024-10-07T17:52:57.0064980Z Installing dependencies from Pipfile.lock (611b50)...
2024-10-07T17:52:57.0215267Z Traceback (most recent call last):
2024-10-07T17:52:57.0231165Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/packaging/requirements.py", line 36, in init
2024-10-07T17:52:57.0254406Z     parsed = _parse_requirement(requirement_string)
2024-10-07T17:52:57.0256364Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 62, in parse_requirement
2024-10-07T17:52:57.0257930Z     return _parse_requirement(Tokenizer(source, rules=DEFAULT_RULES))
2024-10-07T17:52:57.0260001Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 80, in _parse_requirement
2024-10-07T17:52:57.0261541Z     url, specifier, marker = _parse_requirement_details(tokenizer)
2024-10-07T17:52:57.0263583Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 124, in _parse_requirement_details
2024-10-07T17:52:57.0265005Z     marker = _parse_requirement_marker(
2024-10-07T17:52:57.0266610Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 145, in _parse_requirement_marker
2024-10-07T17:52:57.0268333Z     tokenizer.raise_syntax_error(
2024-10-07T17:52:57.0269918Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/packaging/_tokenizer.py", line 167, in raise_syntax_error
2024-10-07T17:52:57.0271294Z     raise ParserSyntaxError(
2024-10-07T17:52:57.0272643Z pipenv.patched.pip._vendor.packaging._tokenizer.ParserSyntaxError: Expected end or semicolon (after name and no valid version specifier)
2024-10-07T17:52:57.0273799Z     tensorflow==~=2.13.0
2024-10-07T17:52:57.0274175Z               ^
2024-10-07T17:52:57.0274378Z
2024-10-07T17:52:57.0274975Z The above exception was the direct cause of the following exception:
2024-10-07T17:52:57.0275535Z
2024-10-07T17:52:57.0275695Z Traceback (most recent call last):
2024-10-07T17:52:57.0278061Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_internal/req/constructors.py", line 362, in _parse_req_string
2024-10-07T17:52:57.0279464Z     return get_requirement(req_as_string)
2024-10-07T17:52:57.0281022Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_internal/utils/packaging.py", line 45, in get_requirement
2024-10-07T17:52:57.0282532Z     return Requirement(req_string)
2024-10-07T17:52:57.0284016Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/packaging/requirements.py", line 38, in init
2024-10-07T17:52:57.0285429Z     raise InvalidRequirement(str(e)) from e
2024-10-07T17:52:57.0286672Z pipenv.patched.pip._vendor.packaging.requirements.InvalidRequirement: Expected end or semicolon (after name and no valid version specifier)
2024-10-07T17:52:57.0287888Z     tensorflow==~=2.13.0
2024-10-07T17:52:57.0288280Z               ^
2024-10-07T17:52:57.0288484Z
2024-10-07T17:52:57.0288833Z During handling of the above exception, another exception occurred:
2024-10-07T17:52:57.0289366Z
2024-10-07T17:52:57.0289538Z Traceback (most recent call last):
2024-10-07T17:52:57.0290321Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/bin/pipenv", line 8, in
2024-10-07T17:52:57.0291063Z     sys.exit(cli())
2024-10-07T17:52:57.0292472Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/vendor/click/core.py", line 1157, in call
2024-10-07T17:52:57.0293608Z     return self.main(*args, **kwargs)
2024-10-07T17:52:57.0294793Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/cli/options.py", line 52, in main
2024-10-07T17:52:57.0296010Z     return super().main(*args, **kwargs, windows_expand_args=False)
2024-10-07T17:52:57.0297446Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/vendor/click/core.py", line 1078, in main
2024-10-07T17:52:57.0298524Z     rv = self.invoke(ctx)
2024-10-07T17:52:57.0299739Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/vendor/click/core.py", line 1688, in invoke
2024-10-07T17:52:57.0300961Z     return _process_result(sub_ctx.command.invoke(sub_ctx))
2024-10-07T17:52:57.0302525Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/vendor/click/core.py", line 1434, in invoke
2024-10-07T17:52:57.0303704Z     return ctx.invoke(self.callback, **ctx.params)
2024-10-07T17:52:57.0305023Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/vendor/click/core.py", line 783, in invoke
2024-10-07T17:52:57.0306118Z     return __callback(*args, **kwargs)
2024-10-07T17:52:57.0307449Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/vendor/click/decorators.py", line 92, in new_func
2024-10-07T17:52:57.0308655Z     return ctx.invoke(f, obj, *args, **kwargs)
2024-10-07T17:52:57.0309957Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/vendor/click/core.py", line 783, in invoke
2024-10-07T17:52:57.0311069Z     return __callback(*args, **kwargs)
2024-10-07T17:52:57.0312613Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/cli/command.py", line 207, in install
2024-10-07T17:52:57.0313676Z     do_install(
2024-10-07T17:52:57.0314845Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/routines/install.py", line 234, in do_install
2024-10-07T17:52:57.0315959Z     raise e
2024-10-07T17:52:57.0317112Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/routines/install.py", line 220, in do_install
2024-10-07T17:52:57.0318225Z     do_install_dependencies(
2024-10-07T17:52:57.0319574Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/routines/install.py", line 388, in do_install_dependencies
2024-10-07T17:52:57.0320959Z     deps_list = list(
2024-10-07T17:52:57.0322331Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/utils/locking.py", line 467, in get_requirements
2024-10-07T17:52:57.0323625Z     install_req, _ = expansive_install_req_from_line(pip_line)
2024-10-07T17:52:57.0325261Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/utils/dependencies.py", line 1034, in expansive_install_req_from_line
2024-10-07T17:52:57.0326772Z     parts = parse_req_from_line(pip_line, line_source)
2024-10-07T17:52:57.0328384Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_internal/req/constructors.py", line 379, in parse_req_from_line
2024-10-07T17:52:57.0329914Z     req: Optional[Requirement] = _parse_req_string(req_as_string)
2024-10-07T17:52:57.0331586Z   File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_internal/req/constructors.py", line 376, in _parse_req_string
2024-10-07T17:52:57.0333126Z     raise InstallationError(msg)
2024-10-07T17:52:57.0334653Z pipenv.patched.pip._internal.exceptions.InstallationError: Invalid requirement: 'tensorflow==~=2.13.0': Expected end or semicolon (after name and no valid version specifier)
2024-10-07T17:52:57.0336051Z     tensorflow==~=2.13.0
2024-10-07T17:52:57.0336459Z               ^

Analysis for Issue #6273:
Analysis of Pipenv Issue #6273
1. Problem Summary:
The issue reports that Pipenv (specifically, version 2024.1.0) throws an InstallationError with the message "Expected end or semicolon" when encountering requirement lines that include both a version specifier and a PEP 508 environment marker. The user provides an example with a Pipfile containing:
tensorflow-cpu = {"version"="~=2.13.0", markers="platform_machine != 'arm64'"}
tensorflow = {"version"="~=2.13.0", markers="platform_machine == 'arm64'"}

This issue seems to stem from a change in the way Pipenv handles dependency resolution in version 2024.1.0. It appears the underlying packaging library, used for parsing requirement strings, now expects a stricter syntax where semicolons are mandatory for separating version specifiers and markers.
2. Comment Discussion Analysis:
The issue currently has no comments.  Without further input from the user or maintainers, it's difficult to assess the specific cause and potential solutions without delving into the codebase changes introduced in Pipenv 2024.1.0.
3. Proposed Resolution:
The problem arises because Pipenv is generating invalid requirement lines when passing them to the resolver. The requirement lines are missing a semicolon (;) between the version specifier and the marker.
Here is a breakdown of the necessary steps and code changes:
3.1. Modify dependency_as_pip_install_line function:

Inside the utils/dependencies.py file, locate the dependency_as_pip_install_line function.
Currently, the function doesn't add a semicolon before appending the markers to the requirement line.
Add a semicolon before appending the markers in the relevant section of the function.

3.2. Code Snippet:
def dependency_as_pip_install_line(
    dep_name: str,
    dep: Union[str, Mapping],
    include_hashes: bool,
    include_markers: bool,
    include_index: bool,
    indexes: list,
    constraint: bool = False,
):
    # existing code ...

            if include_markers and dep.get("markers"):
                line[-1] = f'{line[-1]}; {dep["markers"]}'

    # ... remaining code

4. Additional Steps/Investigations:

Verify the root cause: Thoroughly investigate the changes introduced in Pipenv 2024.1.0 to confirm this is the only scenario generating invalid requirement lines.
Unit tests: Create comprehensive unit tests to ensure the fix addresses the issue and prevents regressions.
Documentation: Update the Pipenv documentation to reflect the change in requirement line syntax if necessary.

5. Potential impact on Pipenv:

Backwards compatibility: The fix shouldn't introduce breaking changes as it only enforces the correct syntax for requirement lines.
Code readability/maintainability:  The change is minimal and improves the clarity of the generated requirement lines.

Note: This is a preliminary assessment based on the information provided. Further investigation and testing are recommended to confirm the proposed solution's effectiveness.
==================================================

The AI was wrong on this -- the code does have a semicolon there and is already exactly what is proposed.

@fredcohen-aa Could you test this against:  https://github.com/pypa/pipenv/pull/6276/files

This is also broken in the latest release 2024.2.0. I am seeing the error for a similar scenario. My Pipfile contains the following entry:
pyjwt = {'extras' = ['crypto'], 'version' = '2.9.0'}

Installation fails with the following error:

pipenv.patched.pip._internal.exceptions.InstallationError: Invalid requirement: "pyjwt=={'extras': ['crypto'], 'version': '2.9.0'}": Expected end or semicolon (after name and no valid version specifier)
pyjwt=={'extras': ['crypto'], 'version': '2.9.0'}
^ (from line 3 of /var/folders/ts/ypl0gvnn55z1y7gydrghpdxc0000gn/T/pipenv-2i21qme2-requirements/pipenv-9juzfuxh-constraints.txt)
✘ Locking Failed!

@boonware yes I think the specifier may be more strict than it used to be.
matte@matteius-proart MINGW64 ~/projects/pipenv-triage
$ pipenv --version
pipenv, version 2024.1.0

matte@matteius-proart MINGW64 ~/projects/pipenv-triage
$ pip uninstall pipenv --yes
Found existing installation: pipenv 2024.1.0
Uninstalling pipenv-2024.1.0:
  Successfully uninstalled pipenv-2024.1.0
WARNING: Failed to remove contents in a temporary directory 'C:\Users\matte\AppData\Local\Temp\pip-uninstall-aci0zgi0'.
You can safely remove it manually.

matte@matteius-proart MINGW64 ~/projects/pipenv-triage
$ pip install pipenv
Collecting pipenv
  Downloading pipenv-2024.2.0-py3-none-any.whl.metadata (19 kB)
Requirement already satisfied: certifi in c:\users\matte\appdata\local\programs\python\python313\lib\site-packages (from pipenv) (2024.8.30)
Requirement already satisfied: packaging>=22 in c:\users\matte\appdata\local\programs\python\python313\lib\site-packages (from pipenv) (24.1)
Requirement already satisfied: setuptools>=67 in c:\users\matte\appdata\local\programs\python\python313\lib\site-packages (from pipenv) (75.2.0)
Requirement already satisfied: virtualenv>=20.24.2 in c:\users\matte\appdata\local\programs\python\python313\lib\site-packages (from pipenv) (20.27.0)
Requirement already satisfied: distlib<1,>=0.3.7 in c:\users\matte\appdata\local\programs\python\python313\lib\site-packages (from virtualenv>=20.24.2->pipenv) (0.3.9)
Requirement already satisfied: filelock<4,>=3.12.2 in c:\users\matte\appdata\local\programs\python\python313\lib\site-packages (from virtualenv>=20.24.2->pipenv) (3.16.1)
Requirement already satisfied: platformdirs<5,>=3.9.1 in c:\users\matte\appdata\local\programs\python\python313\lib\site-packages (from virtualenv>=20.24.2->pipenv) (4.3.6)
Downloading pipenv-2024.2.0-py3-none-any.whl (3.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/3.0 MB 17.0 MB/s eta 0:00:00
Installing collected packages: pipenv
Successfully installed pipenv-2024.2.0

matte@matteius-proart MINGW64 ~/projects/pipenv-triage
$ vim Pipfile

matte@matteius-proart MINGW64 ~/projects/pipenv-triage
$ pipenv install pyjwt['crypto']==2.9.0
Creating a virtualenv for this project
Pipfile: C:\Users\matte\projects\pipenv-triage\Pipfile
Using default python from C:\Users\matte\AppData\Local\Programs\Python\Python313\python.exe3.13.0 to create virtualenv...
[    ] Creating virtual environment...created virtual environment CPython3.13.0.final.0-64 in 290ms
  creator CPython3Windows(dest=C:\Users\matte\.virtualenvs\pipenv-triage-_a7sV3l8, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, via=copy, app_data_dir=C:\Users\matte\AppData\Local\pypa\virtualenv)
    added seed packages: pip==24.2
  activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

Successfully created virtual environment!
Virtualenv location: C:\Users\matte\.virtualenvs\pipenv-triage-_a7sV3l8
Creating a Pipfile for this project...
Pipfile.lock not found, creating...
Locking [packages] dependencies...
Locking [dev-packages] dependencies...
Updated Pipfile.lock (494d5b4f482f0ef471f49afe28f00ec1a2ff75da2ce65060d8cabaeb3da2f100)!
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
Installing pyjwt==2.9.0...
Installation Succeeded
Building requirements...
Resolving dependencies...
Success!
Building requirements...
Resolving dependencies...
Success!
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
Installing dependencies from Pipfile.lock (c8f7d6)...
All dependencies are now up-to-date!
Installing dependencies from Pipfile.lock (c8f7d6)...

matte@matteius-proart MINGW64 ~/projects/pipenv-triage
$ cat Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
pyjwt = {extras = ["crypto"], version = "==2.9.0"}

[dev-packages]

[requires]
python_version = "3.13"

matte@matteius-proart MINGW64 ~/projects/pipenv-triage
$ cat Pipfile.lock
{
    "_meta": {
        "hash": {
            "sha256": "d65c73f748c29ad53fcd60100ddd4570cb915e6e78fee9ba53ae85e4a6c8f7d6"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.13"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "cffi": {
            "hashes": [
                "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8",
                "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2",
                "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1",
                "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15",
                "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36",
                "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824",
                "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8",
                "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36",
                "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17",
                "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf",
                "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc",
                "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3",
                "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed",
                "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702",
                "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1",
                "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8",
                "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903",
                "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6",
                "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d",
                "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b",
                "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e",
                "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be",
                "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c",
                "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683",
                "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9",
                "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c",
                "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8",
                "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1",
                "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4",
                "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655",
                "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67",
                "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595",
                "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0",
                "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65",
                "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41",
                "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6",
                "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401",
                "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6",
                "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3",
                "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16",
                "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93",
                "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e",
                "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4",
                "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964",
                "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c",
                "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576",
                "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0",
                "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3",
                "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662",
                "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3",
                "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff",
                "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5",
                "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd",
                "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f",
                "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5",
                "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14",
                "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d",
                "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9",
                "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7",
                "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382",
                "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a",
                "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e",
                "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a",
                "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4",
                "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99",
                "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87",
                "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"
            ],
            "markers": "platform_python_implementation != 'PyPy'",
            "version": "==1.17.1"
        },
        "cryptography": {
            "hashes": [
                "sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362",
                "sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4",
                "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa",
                "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83",
                "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff",
                "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805",
                "sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6",
                "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664",
                "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08",
                "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e",
                "sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18",
                "sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f",
                "sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73",
                "sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5",
                "sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984",
                "sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd",
                "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3",
                "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e",
                "sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405",
                "sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2",
                "sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c",
                "sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995",
                "sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73",
                "sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16",
                "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7",
                "sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd",
                "sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7"
            ],
            "version": "==43.0.3"
        },
        "pycparser": {
            "hashes": [
                "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6",
                "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"
            ],
            "markers": "python_version >= '3.8'",
            "version": "==2.22"
        },
        "pyjwt": {
            "extras": [
                "crypto"
            ],
            "hashes": [
                "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850",
                "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"
            ],
            "markers": "python_version >= '3.8'",
            "version": "==2.9.0"
        }
    },
    "develop": {}
}

Same problem exists using newer pipenv release (2024.2.0)
  pip install pipenv==2024.2.0
  pipenv --python 3.10
  pipenv install --dev --pre
  shell: /usr/bin/bash -e {0}
    APP_VER:
    pythonLocation: /opt/hostedtoolcache/Python/3.10.15/x64
    LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.10.15/x64/lib
Requirement already satisfied: pip in /opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages (24.2)
Collecting pipenv==2024.2.0
  Downloading pipenv-2024.2.0-py3-none-any.whl.metadata (19 kB)
Collecting certifi (from pipenv==2024.2.0)
  Downloading certifi-2024.8.30-py3-none-any.whl.metadata (2.2 kB)
Collecting packaging>=22 (from pipenv==2024.2.0)
  Downloading packaging-24.1-py3-none-any.whl.metadata (3.2 kB)
Collecting setuptools>=67 (from pipenv==2024.2.0)
  Downloading setuptools-75.2.0-py3-none-any.whl.metadata (6.9 kB)
Collecting virtualenv>=20.24.2 (from pipenv==2024.2.0)
  Downloading virtualenv-20.27.0-py3-none-any.whl.metadata (4.5 kB)
Collecting distlib<1,>=0.3.7 (from virtualenv>=20.24.2->pipenv==2024.2.0)
  Downloading distlib-0.3.9-py2.py3-none-any.whl.metadata (5.2 kB)
Collecting filelock<4,>=3.12.2 (from virtualenv>=20.24.2->pipenv==2024.2.0)
  Downloading filelock-3.16.1-py3-none-any.whl.metadata (2.9 kB)
Collecting platformdirs<5,>=3.9.1 (from virtualenv>=20.24.2->pipenv==2024.2.0)
  Downloading platformdirs-4.3.6-py3-none-any.whl.metadata (11 kB)
Downloading pipenv-2024.2.0-py3-none-any.whl (3.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/3.0 MB 51.7 MB/s eta 0:00:00
Downloading packaging-24.1-py3-none-any.whl (53 kB)
Downloading setuptools-75.2.0-py3-none-any.whl (1.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 98.8 MB/s eta 0:00:00
Downloading virtualenv-20.27.0-py3-none-any.whl (3.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 135.3 MB/s eta 0:00:00
Downloading certifi-2024.8.30-py3-none-any.whl (167 kB)
Downloading distlib-0.3.9-py2.py3-none-any.whl (468 kB)
Downloading filelock-3.16.1-py3-none-any.whl (16 kB)
Downloading platformdirs-4.3.6-py3-none-any.whl (18 kB)
Installing collected packages: distlib, setuptools, platformdirs, packaging, filelock, certifi, virtualenv, pipenv
  Attempting uninstall: setuptools
    Found existing installation: setuptools 65.5.0
    Uninstalling setuptools-65.5.0:
      Successfully uninstalled setuptools-65.5.0
Successfully installed certifi-2024.8.30 distlib-0.3.9 filelock-3.16.1 packaging-24.1 pipenv-2024.2.0 platformdirs-4.3.6 setuptools-75.2.0 virtualenv-20.27.0
Creating a virtualenv for this project
Pipfile: /home/runner/work/herc-kronos/herc-kronos/Pipfile
Using /opt/hostedtoolcache/Python/3.10.15/x64/bin/python33.10.15 to create
virtualenv...
created virtual environment CPython3.10.15.final.0-64 in 916ms
  creator
CPython3Posix(dest=/home/runner/.local/share/virtualenvs/herc-kronos-tKdjcwX4,
clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle,
wheel=bundle, via=copy, app_data_dir=/home/runner/.local/share/virtualenv)
    added seed packages: pip==24.2, setuptools==75.2.0, wheel==0.44.0
  activators
BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator
,PythonActivator
Successfully created virtual environment!
Virtualenv location: /home/runner/.local/share/virtualenvs/herc-kronos-tKdjcwX4
Pipfile.lock not found, creating...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
Success!
Warning: Could not find a matching version of tensorflow~=2.13.0; platform_machine ==
"arm64" for your environment, its dependencies will be skipped.
Locking [dev-packages] dependencies...
Building requirements...
Resolving dependencies...
Success!
Updated Pipfile.lock (acf54f59e98de30824501c4502bac36b3200da5011fbfda911e506fe2b611b50)!
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
Installing dependencies from Pipfile.lock (611b50)...
Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/packaging/requirements.py", line 36, in __init__
    parsed = _parse_requirement(requirement_string)
  File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 62, in parse_requirement
    return _parse_requirement(Tokenizer(source, rules=DEFAULT_RULES))
  File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 80, in _parse_requirement
    url, specifier, marker = _parse_requirement_details(tokenizer)
  File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 124, in _parse_requirement_details
    marker = _parse_requirement_marker(
  File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 145, in _parse_requirement_marker
    tokenizer.raise_syntax_error(
  File "/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/pipenv/patched/pip/_vendor/packaging/_tokenizer.py", line 167, in raise_syntax_error
    raise ParserSyntaxError(
pipenv.patched.pip._vendor.packaging._tokenizer.ParserSyntaxError: Expected end or semicolon (after name and no valid version specifier)
    tensorflow==~=2.13.0
              ^

@fredcohen-aa It would be helpful to see your Pipfile entry for the tensorflow pacakge to further diagnose.

@fredcohen-aa It would be helpful to see your Pipfile entry for the tensorflow pacakge to further diagnose.
Here's a direct copy/paste from our Pipfile.

tensorflow-cpu = {"version"="~=2.13.0", markers="platform_machine != 'arm64'"}
tensorflow = {"version"="~=2.13.0", markers="platform_machine == 'arm64'"}

Adding verbose logs from reproducible error. This is running on a github default ubuntu runner.
0_lint-and-test (3.10).txt
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]

# Local Mac (arm64) doesn't have a tensorflow-cpu, so we use just tensorflow for that
tensorflow-cpu = {"version"="~=2.13.0", markers="platform_machine != 'arm64'"}
tensorflow = {"version"="~=2.13.0", markers="platform_machine == 'arm64'"}

[pipenv]
allow_prereleases = true

Same problem here, I'm using Linux, but trying to put pywin32 as dependency for use when my program run on Windows
$ pipenv --version
pipenv, version 2024.1.0

Pipfile

[packages]
pydantic = "*"
lxml = "*"
pydantic-xml = {extras = ["lxml"] }
httpx = "*"
pillow = "*"
cairosvg = "*"
python-barcode = "*"
qrcode = {extras = ["pil"] }
fastapi = {extras = ["standard"] }
uvicorn = "*"
pywin32 = {version = "*", markers = "sys_platform == 'win32'"}

Pipfile.lock
{
    "_meta": {
        "hash": {
            "sha256": "5918b4d09ffb09dfc71374c4ef4023a67d659a4d7043a2ffdac7c3dd2d04664f"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.12"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
       ....
        "pywin32": {
            "markers": "sys_platform == 'win32'"
        }
        ......
    },
    "develop": {
        ...
    }
}

 $ pipenv update
Courtesy Notice:
Pipenv found itself running within a virtual environment,  so it will automatically use that environment, instead of  creating its own for any project. You can set
PIPENV_IGNORE_VIRTUALENVS=1 to force pipenv to ignore that environment and create  its own instead.
You can set PIPENV_VERBOSITY=-1 to suppress this warning.
Running $ pipenv lock then $ pipenv sync.
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
⠇ Locking packages...Warning: Could not find a matching version of pywin32; sys_platform == "win32" for your environment, its dependencies will be skipped.
Locking [dev-packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Updated Pipfile.lock (5918b4d09ffb09dfc71374c4ef4023a67d659a4d7043a2ffdac7c3dd2d04664f)!
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
Installing dependencies from Pipfile.lock (04664f)...
Traceback (most recent call last):
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/patched/pip/_vendor/packaging/requirements.py", line 36, in __init__
    parsed = _parse_requirement(requirement_string)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 62, in parse_requirement
    return _parse_requirement(Tokenizer(source, rules=DEFAULT_RULES))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 80, in _parse_requirement
    url, specifier, marker = _parse_requirement_details(tokenizer)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 124, in _parse_requirement_details
    marker = _parse_requirement_marker(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 145, in _parse_requirement_marker
    tokenizer.raise_syntax_error(
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/patched/pip/_vendor/packaging/_tokenizer.py", line 167, in raise_syntax_error
    raise ParserSyntaxError(
pipenv.patched.pip._vendor.packaging._tokenizer.ParserSyntaxError: Expected end or semicolon (after name and no valid version specifier)
    pywin32==
           ^

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/patched/pip/_internal/req/constructors.py", line 362, in _parse_req_string
    return get_requirement(req_as_string)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/patched/pip/_internal/utils/packaging.py", line 45, in get_requirement
    return Requirement(req_string)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/patched/pip/_vendor/packaging/requirements.py", line 38, in __init__
    raise InvalidRequirement(str(e)) from e
pipenv.patched.pip._vendor.packaging.requirements.InvalidRequirement: Expected end or semicolon (after name and no valid version specifier)
    pywin32==
           ^

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/py-utils/bin/pipenv", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/vendor/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/cli/options.py", line 52, in main
    return super().main(*args, **kwargs, windows_expand_args=False)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/vendor/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/vendor/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/vendor/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/vendor/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/vendor/click/decorators.py", line 92, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/vendor/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/vendor/click/decorators.py", line 33, in new_func
    return f(get_current_context(), *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/cli/command.py", line 552, in update
    do_update(
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/routines/update.py", line 92, in do_update
    do_sync(
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/routines/sync.py", line 57, in do_sync
    do_install_dependencies(
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/routines/install.py", line 388, in do_install_dependencies
    deps_list = list(
                ^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/utils/locking.py", line 467, in get_requirements
    install_req, _ = expansive_install_req_from_line(pip_line)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/utils/dependencies.py", line 1034, in expansive_install_req_from_line
    parts = parse_req_from_line(pip_line, line_source)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/patched/pip/_internal/req/constructors.py", line 379, in parse_req_from_line
    req: Optional[Requirement] = _parse_req_string(req_as_string)
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/py-utils/venvs/pipenv/lib/python3.12/site-packages/pipenv/patched/pip/_internal/req/constructors.py", line 376, in _parse_req_string
    raise InstallationError(msg)
pipenv.patched.pip._internal.exceptions.InstallationError: Invalid requirement: 'pywin32==': Expected end or semicolon (after name and no valid version specifier)
    pywin32==
           ^

@GaNiziolek that version is outdated -- please try 2024.2.0 -- also we are working on another minor version release that solves more edge cases yet.

@GaNiziolek that version is outdated -- please try 2024.2.0 -- also we are working on another minor version release that solves more edge cases yet.

@matteius Thanks for the wuick reply, but the problem persists on the new version.
$ pipenv --version
pipenv, version 2024.2.0

$ pipenv update
Running $ pipenv lock then $ pipenv sync.
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
⠴ Locking packages...Warning: Could not find a matching version of pywin32; sys_platform == "win32" for your environment, its dependencies will be skipped.
Locking [dev-packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Updated Pipfile.lock (5918b4d09ffb09dfc71374c4ef4023a67d659a4d7043a2ffdac7c3dd2d04664f)!
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
Installing dependencies from Pipfile.lock (04664f)...
Traceback (most recent call last):
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/patched/pip/_vendor/packaging/requirements.py", line 36, in __init__
    parsed = _parse_requirement(requirement_string)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 62, in parse_requirement
    return _parse_requirement(Tokenizer(source, rules=DEFAULT_RULES))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 80, in _parse_requirement
    url, specifier, marker = _parse_requirement_details(tokenizer)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 124, in _parse_requirement_details
    marker = _parse_requirement_marker(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/patched/pip/_vendor/packaging/_parser.py", line 145, in _parse_requirement_marker
    tokenizer.raise_syntax_error(
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/patched/pip/_vendor/packaging/_tokenizer.py", line 167, in raise_syntax_error
    raise ParserSyntaxError(
pipenv.patched.pip._vendor.packaging._tokenizer.ParserSyntaxError: Expected end or semicolon (after name and no valid version specifier)
    pywin32==
           ^

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/patched/pip/_internal/req/constructors.py", line 362, in _parse_req_string
    return get_requirement(req_as_string)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/patched/pip/_internal/utils/packaging.py", line 45, in get_requirement
    return Requirement(req_string)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/patched/pip/_vendor/packaging/requirements.py", line 38, in __init__
    raise InvalidRequirement(str(e)) from e
pipenv.patched.pip._vendor.packaging.requirements.InvalidRequirement: Expected end or semicolon (after name and no valid version specifier)
    pywin32==
           ^

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/vscode/.local/bin/pipenv", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/vendor/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/cli/options.py", line 52, in main
    return super().main(*args, **kwargs, windows_expand_args=False)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/vendor/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/vendor/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/vendor/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/vendor/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/vendor/click/decorators.py", line 92, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/vendor/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/vendor/click/decorators.py", line 33, in new_func
    return f(get_current_context(), *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/cli/command.py", line 552, in update
    do_update(
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/routines/update.py", line 92, in do_update
    do_sync(
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/routines/sync.py", line 55, in do_sync
    do_install_dependencies(
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/routines/install.py", line 477, in do_install_dependencies
    deps_list = list(
                ^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/utils/locking.py", line 467, in get_requirements
    install_req, _ = expansive_install_req_from_line(pip_line)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/utils/dependencies.py", line 1035, in expansive_install_req_from_line
    parts = parse_req_from_line(pip_line, line_source)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/patched/pip/_internal/req/constructors.py", line 379, in parse_req_from_line
    req: Optional[Requirement] = _parse_req_string(req_as_string)
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vscode/.local/lib/python3.12/site-packages/pipenv/patched/pip/_internal/req/constructors.py", line 376, in _parse_req_string
    raise InstallationError(msg)
pipenv.patched.pip._internal.exceptions.InstallationError: Invalid requirement: 'pywin32==': Expected end or semicolon (after name and no valid version specifier)
    pywin32==
           ^

@GaNiziolek Would you be willing to try this branch:  https://github.com/pypa/pipenv/pull/6282
Right now the Pipfile entry you show looks fine, but the lockfile is elided some information.

I will try right now

@GaNiziolek Would you be willing to try this branch: #6282 Right now the Pipfile entry you show looks fine, but the lockfile is elided some information.

I will try right now

If it doesn't work still, I am exploring this other change related that might be the thing that is inserting the == after the requirements name, but the question would be why isn't there a valid version to put there 🤔

I just pushed a fix a well for the ~= specifier to that branch, that seems highly related to this markers issue -- you might want to reinstall it if your last test fails.

Hello, installing pipenv from the branch https://github.com/pypa/pipenv/tree/issue-6281, get the 395ae0e commit.
Now running pipenv update does nothing about the pywin32 package, which is the expected behavior on linux kkkk
$ pipenv update
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
Installing dependencies from Pipfile.lock (04664f)...
All dependencies are now up-to-date!
Nothing to upgrade!


Home-assistant postgres version mismatch

Details
This release changes the default postgresql image to 14.x.  This will fail to start for any existing installs due to incompatible database file format versions.
Helm chart name and version:
k8s-at-home/home-assistant      12.0.1
Container name and tag:
hass-postgresql
values.yaml: 14.1.0 (previously not specified)
Chart.yaml: 10.14.4 (previously 10.14.2)
What steps did you take and what happened:
helm upgrade a release using postgresql from before the values.yaml change to 12.0.1.  Postgresql will be unable to start, because a file format upgrade is required before postgres startup.
Relevant Helm values:
(from this repo values.yaml)
postgresql:
image:
repository: bitnami/postgresql
tag: 14.1.0
What did you expect to happen:
Postgresql would be able to start, either by automatic pg_upgrade, automatic dump/restore job, or a compatible version of the engine.

Hi! Sorry you ran in to issues with this.
This change was introduced in version 12.0.0. We intentionally made it a breaking upgrade, because we wanted to indicate that this would not be a "straight-forward" version bump.
Perhaps we could have included even more details about the upgrade steps that would potentially be required, but since we can not predict the database image version that people were using before (and therefore the exact steps required) we decided against that.
Automatic upgrades of databases are outside the scope of our charts, and would be better targeted at the Bitnami chart we use. Looking through their issues they currently have no plans to implement this, and refer to other documentationhttps://www.postgresql.org/docs/14/upgrading.html#UPGRADING-VIA-PGDUMPALL as well.


Inconsistent casing

Note: Merge master into this branch in order to see the real changes! I accidentally did them both at once
This should be a complete fix for the case-sensitivity issue, though it's not the prettiest. It seems to me that either VS Code or some other dependency in my team's environment also started using lowercase drive names when reporting the file path, even though the pathMapping specifies an uppercase one. Breakpoints aren't working on any of my sites anymore with the current release of this extension/VSCode, which makes it borderline unusable.

converting URIs to lowercase was not compensated for when finding the relative path between two URIs
after converting to lowercase, a lowercase serverFileUri was returned, resulting in failed tests I chose to fix that though if returning the lowercased serverFileUri is better, that can be undone and the test can instead be changed.

I hope this is helpful.

Could you rebase this to include only your change?

I'm just going to build a new PR from master

closed in favor of #245


Update workbench cypress tests for 2.0

Signed-off-by: Joshua Li<EMAIL_ADDRESS>Description
Update cypress tests for workbench to fix breaking changes from EUI and type removal
Issues Resolved
[List any issues this PR will resolve]
Check List

[x] Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Not able to reproduce the CI failure, rerunning

local run passed
~/Projects/os-2.0/opensearch-dashboards-functional-test fix-workbench ····················································································· ✘ INT 17m 9s
❯ yarn cypress:run-without-security --spec cypress/integration/plugins/query-workbench-dashboards/ui.spec.js
yarn run v1.22.17
$ env TZ=America/Los_Angeles NO_COLOR=1 cypress run --headless --env SECURITY_ENABLED=false --spec cypress/integration/plugins/query-workbench-dashboards/ui.spec.js
Couldn't determine Mocha version

====================================================================================================

  (Run Starting)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Cypress:      5.6.0                                                                            │
  │ Browser:      Electron 85 (headless)                                                           │
  │ Specs:        1 found (plugins/query-workbench-dashboards/ui.spec.js)                          │
  │ Searched:     cypress/integration/plugins/query-workbench-dashboards/ui.spec.js                │
  │ Experiments:  experimentalNetworkStubbing=true                                                 │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘

────────────────────────────────────────────────────────────────────────────────────────────────────

  Running:  plugins/query-workbench-dashboards/ui.spec.js                                   (1 of 1)
Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db

Why you should do it regularly:
https://github.com/browserslist/browserslist#browsers-data-updating
Couldn't determine Mocha version

  Dump test data
    ✓ Indexes test data for SQL and PPL (899ms)

  Test PPL UI
    ✓ Confirm results are empty (6074ms)
    ✓ Test Run button (5481ms)
    ✓ Test Clear button (7037ms)
    ✓ Test full screen view (6501ms)

  Test SQL UI
    ✓ Confirm results are empty (2939ms)
    ✓ Test Run button and field search (5795ms)
    ✓ Test Translate button (6276ms)
    ✓ Test Clear button (3243ms)
    ✓ Test full screen view (3643ms)

  Test and verify SQL downloads
    ✓ Download and verify JSON (49ms)
    ✓ Download and verify JDBC
    ✓ Download and verify CSV
    ✓ Download and verify Text

  Test table display
    ✓ Test GROUP BY (6162ms)
    ✓ Test GROUP BY with aliases and scalar function (6480ms)
    ✓ Test GROUP BY and HAVING (6606ms)
    ✓ Test ORDER BY (6445ms)
    ✓ Test JOIN (7515ms)
    ✓ Test nested fields display (7121ms)

  20 passing (1m)

  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        20                                                                               │
  │ Passing:      20                                                                               │
  │ Failing:      0                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  0                                                                                │
  │ Video:        true                                                                             │
  │ Duration:     1 minute, 28 seconds                                                             │
  │ Spec Ran:     plugins/query-workbench-dashboards/ui.spec.js                                    │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘

  (Video)

  -  Started processing:  Compressing to 32 CRF
  -  Finished processing: /Users/lijshu/Projects/os-2.0/opensearch-dashboards-functio    (9 seconds)
                          nal-test/cypress/videos/plugins/query-workbench-dashboards/
                          ui.spec.js.mp4

====================================================================================================

  (Run Finished)

       Spec                                              Tests  Passing  Failing  Pending  Skipped
  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ ✔  plugins/query-workbench-dashboards/      01:28       20       20        -        -        - │
  │    ui.spec.js                                                                                │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘
    ✔  All specs passed!                        01:28       20       20        -        -        -

✨  Done in 110.66s.

is this repo up to date? looks like github actions is using OpenSearch version 1.3.0?
https://github.com/opensearch-project/opensearch-dashboards-functional-test/blob/6f68a4e2b8b4aaed2aa37e28f8feeb1c9a1505a3/.github/workflows/query-workbench-release-e2e-workflow.yml#L10-L13

is this repo up to date? looks like github actions is using OpenSearch version 1.3.0?
https://github.com/opensearch-project/opensearch-dashboards-functional-test/blob/6f68a4e2b8b4aaed2aa37e28f8feeb1c9a1505a3/.github/workflows/query-workbench-release-e2e-workflow.yml#L10-L13

we can update in that in a subsequent PR i think once we have a stable version of 2.0 if @Tengda-He  is cool with that I believe @tianleh is OOO.

I am good then if the fix is just to switch to version 2.0

I am good then if the fix is just to switch to version 2.0

https://github.com/opensearch-project/opensearch-dashboards-functional-test/issues/189


[TypeScript][Skill] Fix undefined state issue

Purpose
What is the context of this pull request? Why is it being done?
Changes
Are there any changes that need to be called out as significant or particularly difficult to grasp? (Include illustrative screenshots for context if applicable.)
Tests
Is this covered by existing tests or new ones? If no, why not?
Feature Plan
Are there any remaining steps or dependencies before this issue can be fully resolved? If so, describe and link to any relevant pull requests or issues.
Checklist
General

[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have added or updated the appropriate tests
[ ] I have updated related documentation

Some comments to clarify these changes, I'll try to review the changes to initialize the SkillState

All the changes you are pointing out are needed to the Skill works successfully. If I'll give this branch to the user, this changes should be here, don't they?

Just to confirm that you won't add these changes to the 1.0, but only the initialization of the SkillState

No, this PR is not for 1.0 changes but only to user use right?

These changes should be in 1.0:

https://github.com/southworks/botframework-solutions/pull/419/files#diff-778fd5fad5e7b265da367245c4ce8193R84
https://github.com/southworks/botframework-solutions/pull/419/files#diff-96a4f8f9c84291a95ce5b7235e19bb65L86-R87

The rest, don't need to be in 1.0.
Another things, is it okay to be pointed to next? The branch that we already sent to the user was from master I guess

These changes should be in 1.0:

https://github.com/southworks/botframework-solutions/pull/419/files#diff-778fd5fad5e7b265da367245c4ce8193R84
https://github.com/southworks/botframework-solutions/pull/419/files#diff-96a4f8f9c84291a95ce5b7235e19bb65L86-R87

The rest, don't need to be in 1.0.
Another things, is it okay to be pointed to next? The branch that we already sent to the user was from master I guess

Yes, you are right, I will create another PR with the changes pointing to master and close this if there are no problem.


Added pingpong built-in function

This math function used in Unity(https://docs.unity3d.com/ScriptReference/Mathf.PingPong.html), Blender, and (perhaps) many other engines. The proposal is to give users the same capability to use it as in them. This implementation is a copy from Blender with just cosmetical changes(should work as a Unity version, except for negative length values(which are not supported in the Unity for this function anyway)). Added to GDScript / C# / VisualScript.

What are some practical use cases for this function? It's usually better to use sin() or cos() for smoothly changing pulsing lights. (Linear pulsing lights often look really bad.)

@Calinou I have no idea by myself since I'm not using it, maybe some former Unity users may say why they like it and whether they want it in the Godot.

@Chaosus We don't just add features "just because". This needs a proposal. If you aren't using it and don't know how it will be used, that is hardly a substantive use case. So I'm closing this as per the Godot proposal policy (since there is no use case here, one needs to be presented in a proposal before this can be considered).

All proposals must be linked to a substantive use-case. In justifying your proposal, it is not enough to say it would be "nice" or "helpful". Use the template to show how Godot is not currently meeting your needs and then explain how your proposal will meet a particular need.

Ok, I forgot about it a bit...

For the record, this has been implemented in https://github.com/godotengine/godot/pull/53819


Redfish(LDAP): RoleMapping Test

dev#232Redfish(LDAP):- Add the support for RoleMapping.

1 day for test and 1 day for automation

Manual testing .. completed


mew.org is down

Thank you for letting me know this.
I have restarted Mighty on mew.org and the web service is now available.
I need to investigate why this happen.

mew.org is down again

Uhhm. I restarted mighttpd again. No cue why this happens, sigh. Thank you for noticing.


add missing index options

for example if you have such an index:
t.index ["note"], name: "index_users_on_note", opclass: :gin_trgm_ops, using: :gin

it needs the opclass and using option to be successfully created

Didn't manage to get the specs running locally to add a spec for it yet, though.

sure, will do, got the specs running! Added a first one in #40, will add for the other ones too when I find some time

I just added an index that fails to be created without this patch. Do you think that is enough of an test?
My initial description is wrong, though, because the index that fails must be of such a form:
t.index "((uuid)::text || ' '::text || (name)::text) gin_trgm_ops", opclass: :gin_trgm_ops, using: :gin

I reworded the commit message and force pushed it, please have a look at it now.


A manually set configuredProvider can be lost for good.

The changes made in #445 means that a manually set configuredProvider can be lost for good if it ever returns null and it is registered in the ServiceLoader.

Fixed by https://github.com/eclipse-ee4j/cdi/pull/462

Fixed by https://github.com/eclipse-ee4j/cdi/pull/462


Update Composer dependencies (2020-09-15-00-03)

Visual regression test passed!
View the visual regression test report


rbd: use ImageID where possible, add ParentID to prevent confusion

librbd.OpenImageById() works if the image is in the trash, so it makes
it possible to get the parent of the image.
When a new volume is not created yet, the ImageID should not be set to
the ID of the snapshot.
In some places the ImageID is used as the ID of the parent. That is very
confusing and prone to errors. Instead, fetch the right ImageID where
possible, and set ParentID for referencing to parent images.

Show available bot commands
These commands are normally not required, but in case of issues, leave any of
the following bot commands in an otherwise empty comment in this PR:

/retest ci/centos/<job-name>: retest the <job-name> after unrelated
failure (please report the failure too!)

/test ci/centos/mini-e2e/k8s-1.28

/test ci/centos/mini-e2e/k8s-1.28

/test ci/centos/mini-e2e/k8s-1.28

/test ci/centos/mini-e2e/k8s-1.30

@nixpanic does this PR still needs to be included?


MM-12844/MM-13001 Add interactive dialogs

Summary
First two commits refactor components into two new widgets: TextSetting and AutocompleteSelector.
Ticket Link
https://mattermost.atlassian.net/browse/MM-12844
Checklist

[x] Ran make check-style to check for style errors (required for all pull requests)
[x] Ran make test to ensure unit and component tests passed
[x] Added or updated unit tests (required for all new features)
[x] Has server changes (https://github.com/mattermost/mattermost-server/pull/9816)
[x] Has redux changes (https://github.com/mattermost/mattermost-redux/pull/710)
[x] Has UI changes
[ ] Includes text changes and localization file (.../i18n/en.json) updates

Setup Test Server label detected. Spinmint test server created if build succeeds (checks pass and no conflicts with base branch).

Spinmint test server created at: https://i-088bde07fb0d5c9d5.test.spinmint.com
Test Admin Account: Username: sysadmin | Password: sysadmin
Test User Account: Username: user-1 | Password: user-1
Instance ID: i-088bde07fb0d5c9d5

Spinmint test server destroyed

Setup Test Server label detected. Spinmint test server created if build succeeds (checks pass and no conflicts with base branch).

Spinmint test server created at: https://i-02521b8879b61a52f.test.spinmint.com
Test Admin Account: Username: sysadmin | Password: sysadmin
Test User Account: Username: user-1 | Password: user-1
Instance ID: i-02521b8879b61a52f

Spinmint test server destroyed

Setup Test Server label detected. Spinmint test server created if build succeeds (checks pass and no conflicts with base branch).

Spinmint test server created at: https://i-035c919a66d23222b.test.spinmint.com
Test Admin Account: Username: sysadmin | Password: sysadmin
Test User Account: Username: user-1 | Password: user-1
Instance ID: i-035c919a66d23222b

Spinmint test server destroyed

Setup Test Server label detected. Spinmint test server created if build succeeds (checks pass and no conflicts with base branch).

Spinmint test server created at: https://i-01a290bee0e745fb5.test.spinmint.com
Test Admin Account: Username: sysadmin | Password: sysadmin
Test User Account: Username: user-1 | Password: user-1
Instance ID: i-01a290bee0e745fb5

@jasonblais should be ready for PM review. I've added slash commands /dialog that will open the dialog and both an interactive message button and menu that should do the same.
I'll need a bit of help from @asaadmahmood with some the UI bits but everything should be working functionally.
If we need new a test server let me know as I'll need to set up the integration again

@jwilander Can you help share (here or via DM) the JSON payload you used for this integration? I'll just use it as a reference for docs.

Thanks @jwilander @jasonblais

Noted that UI work still needs to be done by Asaad so will test UI separately once done.

Is there meant to be a Submitted confirmation to the right of Action button - "press me" (similar to Submitted to the right of Option menu)? (Although an ephemeral message is posted confirming "you pressed the button".)

Tested using the slash command /dialog and this works as expected from any channel, DM and GM, posting an ephemeral message to confirm your command (the same as using any other slash command would)

A question relating to 3) and using the /dialog slash command from any channel

From the example above, the You used a slash command is obviously configurable to give a more explanatory confirmation message (as displayed by /expand and dnd ephemeral messages (but it is posted in the channel before the dialog form is even submitted). I was just wondering if there is any kind of feedback to the user if submitting the correctly completed (i.e. no missing required data) dialog form fails?

From the spec, it seems I should be able to type 3000 characters in the Display Name Long Text Area but I can only type 100 before input is disabled.

The required fields, User Selector and Option Selector don't seem to validate data if I insert something that's not in the list and the dialog form is submitted without error.

Although Channel Selector is an optional field, data doesn't seem to be validated either if I insert something that's not in the list and the dialog form is submitted without error.

Also from the spec I'm not sure what "clicks away" means.  If the dialog form is open and I click just outside it, it closes (as if I'd clicked on the X or Cancel).  Is this expected or should the dialog stay open?

Tested
a. trying to submit the dialog with no data - returns correct error messages for required fields
b. tried an invalid email address - returns error message Must be a valid email address.
c. cancelling out of the dialog form - works as expected
d. dialog slash command in RHS - works as expected
e. action button and attachment text in RHS - works as expected

Thanks Lindy! This is great.
@jwilander Looks like points 6-8 are potential bugs.
I also tested on mobile browser and didn't find additional non-UI issues from what Lindy mentioned. The different mobile keyboard layouts based on the subtype of the field worked for me (tested email, text, number)
UX ticket is queued for Asaad to review UI: https://mattermost.atlassian.net/browse/MM-13089

@lindy65
2 - No, buttons don't currently have the Submitted label. I'm also discussing with Asaad if this label adds enough value, given the integration will likely respond back with an ephemeral message and there are a few issues that currently exist with that label.
4 - This will be handled by the integration itself - for instance, Joram could add a custom ephemeral message to his integration when the dialog was cancelled or when the info was submitted.
5 - I looked at the JSON output Joram shared with me and he used the following fields for Display Name Long Text Area:

"min_length":5,
"max_length":100,

These are optional fields that can be used - given the max length of 100, you're seeing the truncation at 100 characters.
6 /7 - Will defer to @jwilander
8 - The dialog should only close if the user clicks on 'X' or 'Cancel'. Clicking outside of the dialog (e.g. in the LHS) shouldn't close it, so this might be a bug @jwilander

6/7 - This is a bit hard to validate for users and channels (how do we know if what was typed is a user or not). @jasonblais maybe we can talk about this some more but we might want to think about forcing the user to select from the dropdown and clearing any text from the field if they do not
8 - Will fix

Thanks for the responses to 2) 4) and 5) @jasonblais :)
Apologies for missing to test on mobile browser!
@jwilander Agree with you on

forcing the user to select from the dropdown and clearing any text from the field if they do not

for 6) and 7)
and will wait for new test server to re-test 8)

6/7 - discussed with Joram and we agreed to go with the proposed solution where the text field is cleared if no option is selected. The same will be applied for interactive menus part of message attachments.

Updates made for 6/7/8, I'm going to wait to update the spinmint until the UX changes are ready so I don't have to set up the integration again twice (let me know if you want to test it before though, I can update it sooner)

@jwilander That sounds good. Testing 6 - 8 should be pretty quick so we can do that after UX changes are done.

I'll re-up the server once the build completes

Spinmint test server destroyed

Setup Test Server label detected. Spinmint test server created if build succeeds (checks pass and no conflicts with base branch).

Spinmint test server created at: https://i-02257fc6b06ed7233.test.spinmint.com
Test Admin Account: Username: sysadmin | Password: sysadmin
Test User Account: Username: user-1 | Password: user-1
Instance ID: i-02257fc6b06ed7233

@jasonblais integration all set up and ready to go

@jwilander Have tested 6 - 8, these are fixed.
Tested on Mac/Chrome in desktop and mobile view, as well as on iOS/Safari. Will test RN app next.
Observations:
1 - The message menu didn't trigger a dialog - is that a mistake when setting up the integration, or an issue on the PR?
2 - @asaadmahmood On mobile view, two things

the header bleeds into the text fields. This also reproduces on webapp, but it's more noticeable on mobile view. Should we add a separator between the header and the body?
I'm unable to scroll all the way to the bottom of the dialog because of the Cancel/Submit buttons

1 - Sorry that was a bug in the test integration, should be fixed now @jasonblais

@jasonblais Pushed.

For the first image (webapp view), does the header bleed into the text areas if you scroll down like in the attached below? Or does the separator also appear in webapp view?

@jwilander I think Asaad is out for the day. This last remaining UI question isn't a blocker so let's merge this. I'll follow up with Asaad separately next week.

Spinmint test server destroyed


ENH: stats.dpareto_lognorm: add double Pareto lognormal distribution

Reference issue
Closes gh-10364
What does this implement/fix?
This adds the double Pareto lognormal distribution as requested in gh-10364.
Additional information

Name intended to be consistent with other double distributions (prepend d), pareto distribution, and lognorm distribution.
Argument s consistent with that of lognorm; a and b are consistent with $\alpha$ and $\beta$ in (all) references.
I've left u as an argument for $\mu$ to make it easier to compare against the reference, but it is redundant with scale.

stats.dpareto_lognorm.pdf(x, u, s, a, b) == stats.dpareto_lognorm.pdf(x, 0, s, a, b, scale=np.exp(u))

In the meantime, I've skipped fit tests, assuming they will have trouble with the redundancy. After initial review, I can remove m (if desired), or we can document the redundancy. I know we have tried to avoid redundancy in the past, but we can rethink that, especially since this is going to be accessible via the new interface (gh-21707). We often have to document the relationship between the loc/scale parameters and the usual parameterization, and we often have to remind users not to fit things they know... why not use the natural parameterization and document that?

@dschmitz89 just wanted to check in since you had indicated interest in a PR for this distribution.

Will make some time so this makes it into the next release.

Thanks as ever @mdhaber !


[AutoPR network/resource-manager] change appgw custom error status code enum and fix a typo of customErrorConfigurations

Created to sync https://github.com/Azure/azure-rest-api-specs/pull/4050

(message created by the CI based on PR content)


Add track2KBA

Insert URLs to the project here:
https://github.com/BirdLifeInternational/track2kba

[x] The projects is active, documented, open source licensed, shows usage from external parties and is directly targeting environmental sustainability. Find more details in the Contribution Guide.

All issues labeled as 'Good First Issue' of the project listed on OpenSustain.tech will be visible on ClimateTriage.com. This is a great way to welcome new community members to your project.

@MartinBeal @steffenoppel


Clarified a piece of code, by adding comments

Clarified a piece of code, by adding comments

@smdaziz have you signed the CLA?


Fix for lancedb index creation issue by adding config

This PR fixes issue #52 by adding to provide configuration options for index creation while creating the sink. Looking forward for review.

Thanks for sharing the changes.
Curious id it would be bettee to have the configs be directly fields in the object (LanceDBSink) to make the options better discoverable.
Otherwise configuration looks 🔥🔥🔥

Curious id it would be bettee to have the configs be directly fields in the object (LanceDBSink) to make the options better discoverable.

Yeah, that would be better i guess, makes it more informative, thanks, made the necessary changes.


cleanup valueset definition and fix a Rad code display

close #7
close #2
close #12

committee review:

corrected pull request to remove an addition change in the history
approve for ci-build
does not seem to be enough of a change to call for a publication revision.


Air temperature and precipitation displays aren't animated

On Firefox 56.0.2 Mac OS 10.12.6. The precipitation and temperature displays don't animate. They will update when I go to another display and go back, but they are static.

Fix is out. I was coincidentally working on temperature recently, so there's some other features released.

Congratulations, it looks to be fixed.

On Nov 11, 2017, at 3:49 PM, Carl Davidson<EMAIL_ADDRESS>wrote:
Fix is out. I was coincidentally working on temperature recently, so there's some other features released.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or mute the thread.

Thanks Collin!


Replace print output with real logging

Right now, the dspace.py library prints errors, messages, and other output with simple print()s.
This should be replaced with a proper configurable logger and the messages all given log levels.

Related to #12

Resolved at version 0.1.9
PyPI (https://pypi.org/project/dspace-rest-client/0.1.9/)
Git tag here: https://github.com/the-library-code/dspace-rest-python/tree/dspace-rest-client-0.1.9


Error when installing

When I try to install python setup.py develop I get the error
running develop
running egg_info
creating viewer3d.egg-info
writing viewer3d.egg-info/PKG-INFO
writing dependency_links to viewer3d.egg-info/dependency_links.txt
writing top-level names to viewer3d.egg-info/top_level.txt
writing manifest file 'viewer3d.egg-info/SOURCES.txt'
error: package directory 'ipywidgets>=7/5/1' does not exist

Not sure where this is coming from

I'm not sure where the slashes are coming from? The setup.py package dependencies are:
    packages=[
        "attrs>=18.2.0",
        "ipywidgets>=7.5.1",
        "jupyter>=1.0.0",
        "numpy>=1.18.1",
        "py3Dmol>=1.8.0",
        "pyrosetta>=2022.21",
    ],

(note the .s instead of /s)

Thanks, yes, I did take a look. Not sure where the slashes are coming from either. Will test again today.

Strange, I'm still getting the same error

The error is demonstrated in this colab notebook
https://colab.research.google.com/drive/16sMs25Oh2ESZfISK5iw0NOOU1mwCjvBT?usp=sharing#scrollTo=V6AyHiZUpfxO

Should be fixed by https://github.com/RosettaCommons/pyrosetta_viewer3d/pull/6


how to [overload] function

Hi,  I have a problem to declare the overload function.
jscomments:
/**
 * @function
 * @name f
 * @return {number[]}
 */
/**
 * @function
 * @name f
 * @param {string} key
 * @return {number}
 */

the result:
/**
 * @function
 * @name f
 * @return {number[]}
 */
declare function f(): number;

expect:
declare function f(): number[];
declare function f(key:string): number;

The JSDOC default template can build both functions

f() → {Array.}
f(key) → {number}

it there any way to do like this?

Ah I think this is because I use the FQN of a function as the key for storing it; so currently there can only be one. Good catch.

hi, look here https://github.com/englercj/tsd-jsdoc/blob/master/src/Emitter.ts#L177-L179
I remove those 3 lines and using the @variation  it weill work correctly
/**
 * @function
 * @name f
 * @variation 1
 * @return {number[]}
 */
/**
 * @function
 * @name f
 * @variation 2
 * @param {string} key
 * @return {number}
 */

it will  parse as f(1) and f(2)
But I'm not sure whether there is any side effects

hi, @englercj
I think it should be filtered by the longname rather than the name , if filter is needed here.
please fix it, thanks~

So there are two issues here.
Firstly, JSDoc will not have 2 declarations for two symbols that have the same longname. In your example, both f functions have the same longname and are therefore combines. Simply adding @variation <something> fixes that.
Secondly, two functions that share the same name in a class or namespace will get deduped by tsd-jsdoc even if they have different longnames. The only way to truly support this is to check if their longnames are different or they take different params. This isn't as easy as it sounds, and I've started work on it, but it will take some time.


Improve readme

Hi - Thank you for that. Readme hadn't been updated in a while. From a quick glance, I agree with some changes and some I don't. I will add some comments tomorrow.


Support commit a part of file?

We can commit a part of file instead of all the changes in a file by jetbrains IDEs like pycharm.

But, for now, we can not do this in vscode, we can only commit the whole file or do not add it. So, will vscode support this feature?

This feature request is now a candidate for our backlog. The community has 60 days to upvote the issue. If it receives 20 upvotes we will move it to our backlog. If not, we will close it. To learn more about how we handle feature requests, please see our documentation.
Happy Coding!

:slightly_smiling_face: This feature request received a sufficient number of community upvotes and we moved it to our backlog. To learn more about how we handle feature requests, please see our documentation.
Happy Coding!

This scenario is already supported and can be done both from a normal code editor and the diff editor.
Text editor:

Open the file that contains the changes that you want to commit
Select the changes that you want to commit and invoke the "Stage Selected Ranges" command from the command palette
Enter a commit message and commit the changes

Diff editor

Open the file that contains the changes that you want to commit in the diff editor
Use the "Stage Block" action available in the gutter between the two editor
Enter a commit message and commit the changes


[SPARK-45509][SQL] Fix df column reference behavior for Spark Connect

What changes were proposed in this pull request?

This PR fixes a few problems of column resolution for Spark Connect, to make the behavior closer to classic Spark SQL (unfortunately we still have some behavior differences in corner cases).

resolve df column references in both resolveExpressionByPlanChildren and resolveExpressionByPlanOutput. Previously it's only in resolveExpressionByPlanChildren.
when the plan id has multiple matches, fail with AMBIGUOUS_COLUMN_REFERENCE

Why are the changes needed?

fix behavior differences between spark connect and classic spark sql
Does this PR introduce any user-facing change?

Yes, for spark connect scala client
How was this patch tested?

new tests
Was this patch authored or co-authored using generative AI tooling?

no

cc @zhengruifeng @hvanhovell @HyukjinKwon
I think the Spark Connect behavior is very reasonable now. We should move Classic Spark SQL to this behavior as well in the future.

thanks for the reviews, merging to master/3.5!

The 3.5 backport PR: https://github.com/apache/spark/pull/43699


"-d database" vs "--repo repo"

Different commands use different command flags for specification of a repo. Most notably, aur-sync has --repo repo and aur vercmp has -d database. Other affected scripts are aur-rfilter and aur-build, which both use -d. (At least according to the man pages, which where the simples to scan.)
It would be nice if this was unified.

@FichteFoll what short option would you use for the recursive flag of aur-fetch? Right now it's also -d.

Is aur-fetch's -d inspired by something?
I'd try looking at what pacman does. I remember -Rs with S specifically chosen so it is synchronous to a sync action (not sure about the exact wording as I'm on mobile). Is -r taken already? That's also used frequently, like in rm, cp, rsync.

I was looking at cower -d, but -r sounds good - thanks

:+1:
Need to update man pages still, but other than that this seems to be done. Will leave open until it's documented.

Updated the man pages.


Validation for OpSampledImage instruction.

This change implements the validation for usages of OpSampledImage
instruction as described in the Data Rules section of the Universal
Validation Rules of the SPIR-V Spec.
All OpSampledImage instructions must be in the same block in which their Result  are consumed. Result  from OpSampledImage instructions must not appear as operands to OpPhi instructions or OpSelect instructions, or any instructions other than the image lookup and query instructions specified to take an operand whose type is OpTypeSampledImage.

Validator passed VKCTS

I'll wait for the bots to come back green before squashing and pushing into master.

Squashed and pushed into master as f72189c249b


Cosigning server: append also existing signatures

Be nice, on the happy case.

I think we could just append existing signatures to the PSBT, and generate the missing ones. If they try to fool us the signatures will be invalid anyways

Actually, this is a footgun. If they are just making a mistake this would burn their single chance, better to error in this case.

ACK cefd1ba


sched/backtrace: Dump the complete stack regardless the depth

Summary

libs/dumpstack: add support for print symbol name
libc: Prefix the address with 0 to the specified width in sched_dumpstack
sched/backtrace: Dump the complete stack regardless the depth

Impact
New functionality
Testing
Pass CI

LGTM


Node.js compatibility

Hi all,
i run my app to Node 8.12.0 ..which release for pass js is compatible?
Thanks in Advance!

Node 8.x is EOF for couple of years already. No, this library is not compatible.


aliasify does not work correctly when sql ends with ;

check aliasify.ts and aliasify.test.ts
add a test that includes ; at the end

can't reproduce anymore


Where are meeting transcripts stored?

Need to understand where meeting transcripts are stored (for legal purposes). Are they hosted in stream storage, or on the organizer's personal onedrive, or etc? The article mentions recordings but not transcripts.

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

ID: 976b8a9b-5a3e-1f3b-b848-d1dfbfd3389d
Version Independent ID: 2b13a471-3baf-0086-439a-f94abb162fd6
Content: Teams cloud meeting recording - Microsoft Teams
Content Source: Teams/cloud-recording.md
Service: msteams
GitHub Login: @tonysmit
Microsoft Alias: tonysmit

@scheblein Thank you for submitting feedback and contributing to the docs. We are currently investigating this.

@SamChung-MS - Can you help us out here please?

Is this question in regards to the transcripts you see when you play back the recording on Stream? If so, those transcripts are created by Stream, so they're on Stream.

Is this question in regards to the transcripts you see when you play back the recording on Stream? If so, those transcripts are created by Stream, so they're on Stream.

Great. Two final questions:

Is it Microsoft that does the transcribing (and not a third party)?

Can this be info be updated in the article so that I can have something to refer people to?

@scheblein, thanks for your feedback. About your questions:

Microsoft (with Azure Media Services I think)
I think so

@tonysmit @SamChung-MS if you agree I can add this information to the article. Thanks!

I agree and good with it being updated.  Just make it clear that it's Stream Transcript we're talking about.


Grafana Infinity plugin not working

Image Name and Version
Grafana 10.3.1
Describe the bug
Went to the Plugins panel and picked the non-bundled Infinity plug-in to install.  Installed fine.
When I tried to create a data source using it, Grafana showed error message 'Plugin Unavailable' after I hit Save and Test.
Digging through the logs revealed that the plugin didn't have an s390 executable version.
To Reproduce
Steps to reproduce the behavior:

Go to Plugins
Switch the filter to All
Select the Infinity pluging
Choose to install it
Select 'Create a New Datasource' for it
Fill in your details
Hit 'save and test'

Expected behavior
What I think has happened, is that Grafana (running on s390) has pulled down the x86 version of the plug-in from the web.  I can't find a URL offering an s390 version of the Infinity plug-in, so it may not currently exist.
I think it would be good if the page describing the Grafana port clearly stated that the only supported/working plugins are the ones that are bundled with Grafana by default and had a link to a page with instructions for installing any supported non-standard plugins.  I was expecting the Infinity plugin to be available through the s390 version as there is nothing to say that it isn't.
I need the infinity plug in to be able to fetch data from my REST API (running on z/OS), Is it possible we could get an s390 version of the infinity datasource built?  It's open source (under an Apache 2.0 license) and is up on GitHub - https://github.com/grafana/grafana-infinity-datasource . As I understand it, it is currently owned/maintained by Grafana Labs.  Infinity is an old and very powerful data source, being able to retrieve data from almost any REST API.  I think it would be a great addition to the s390 platform, especially as more and more z/OS products start opening up REST APIs.
Many thanks for your time.
Screenshots
If applicable, add screenshots to help explain your problem.
Additional context
Add any other context about the problem here.

Hey @mykael22000 - thanks for bringing this to our attention!
I've spent some time looking into this and have ran into a few 'snags' when attempting to port this particular plugin.. I'm not yet confident enough to say definitively whether we'll be able to include this plugin - but it's something we're looking into and I will have an update for you in the coming days.
Also worth mentioning, there is a slightly newer version (10.3.4) of Grafana uploaded to icr if you'd prefer this over 10.3.1.

Thanks for the update and taking the time to look into it.  Happy to help test anything you do get running.
Don't think there's anything in 10.3.4 that'll affect us over 10.3.1, but we might switch there (or even to 11) once we've got something more complete (or if we need it for Infinity).

If it's any help, the bits related to the Private Datasource Connection we don't need, as it's only used on a Grafana Cloud server - and they are unlikely to be hosted on an s390 platform at the moment. ;-)


Fix handling of nonce too low error

Motivation
There is a problem currently in EscalatingPending Future implementation, which is responsible for backing the send_escalating method in Middleware.
The problem is in the part of the Future which tests for the nonce too low issues. That test consists of checking if the error's Display contains string nonce too low. The point here is that the error's display might not have nonce too low. For instance, a custom error's Display might not provide the desired nonce too low, while Debug would. Here is an example from POC which shows Display (error_display) and Debug(error_debug) of an error
 Poll::Ready(Err(e)) => {
     // kludge. Prevents erroring on "nonce too low" which indicates
     // a previous escalation confirmed during this broadcast attempt
     tracing::info!(
         error_display = %e,
         error_debug = ?e,
         "Want to see the diffrernce for error"
     );
     if format!("{}", e).contains("nonce too low") {

Debug line produces:
{"timestamp":"Jan 01 01:01:01.1337","level":"INFO","fields":{"message":"Want to see the diffrernce for error","error_display":"Max requests reached","error_debug":"JsonRpcClientError(MaxRequests([JsonRpcError(JsonRpcError { code: -32000, message: \"nonce too low\", data: None }), JsonRpcError(JsonRpcError { code: -32000, message: \"nonce too low\", data....

Solution
Obviously, Debug includes wrapped parts, which expose the desired line, whereas Display shows only Max requests reached. In order to fix the test I propose to change the format from format!("{}", e) to format!("{:?}", e), which would expose the debug.

@gakonst lints at WASM are failing, how shall we proceed?

@gakonst lints at WASM are failing, how shall we proceed?

wasm has been fixed with #642, but there is a fmt issue here
Diff in /home/runner/work/ethers-rs/ethers-rs/ethers-providers/src/pending_escalator.rs at line 187:
                         let fut = this.provider.send_raw_transaction(next_to_broadcast);
                         *this.state = BroadcastingNew(fut);
                         cx.waker().wake_by_ref();
-                        return Poll::Pending;
+                        return Poll::Pending
                     }
                 }
                 check_all_receipts!(cx, this);


page layouting

[x] add review
[x] review
[x] public services
[x] faq / about

faq is done by #47

Ini nurut gw paling penting!

services :point_right: #39

#57 :point_left: add review page

review page is done!
:point_down:
#70

closing this, and move the statistic layout bit to #19


Add dialyzer fixes

Hi everyone, thanks for this great package!
dialyzer is propagating errors from new-relixir in a couple of projects where we use this package.  This PR should fix those errors.

Hey guys, sorry for the 🔔
We have a couple of projects with dialyzer broken due to this issue. Would you take a look at this PR when you have a chance, please? 🙂
@coburncoburn @dcuddeback @sudostack


no way to await async js calls

Steps to reproduce
use this code with your babel transform
(function(){
    let thing = new Promise(function(resolve, reject){
                setTimeout(function(){
                    resolve("Done!")
                },1000)
            }),
        result = false;
    thing.then(r=>result=r)
    return result;
})()

Expected behavior
There should be a way to await the promise. maybe this is pipe dream and or i need to compile my own version of babel... but.... it would be useful to have this ability.
Actual behavior
always returns False
System configuration
PyMiniRacer version:
0.1.15
Python version:
3.6

that is a fantastic question, and I don't actually have a good answer. since with this specific example you don't have a way to see if the promise has resolved because it's in an anonymous scope.
this may not even be a good example.  currently, if you make a Promise, and that is what miniracer catches, then you would not have a way to check if that promise is done...
i suppose the better way of doing this would be to have a global var called done and to just check that untill everything has resolved?
so i suppose the code would look more like this:
var done = false;
var checkDone(){
    return done;
}
(function(){
    let thing = new Promise(function(resolve, reject){
            setTimeout(function(){
                    resolve()
                },1000)
            }),
    thing.then(r=>done=true)
})()

then i could simply do a while in python checking checkDone until it's done. that would let the event loop process things right?

So, Thinking about this some more... and poking around a bit...
Would it be possible to integrate with this package?
https://pypi.org/project/promise/
if you get a Promise object back, rather than just casting it to an empty object, is it possible to convert it to a python promise?

@fimion this is not in our roadmap yet but feel free to contribute @fimion !


Setup instructions could be clearer

I just tried setting up my rig with Urkel pool (formerly hnspool) again today, and the setup instructions were not totally clear. In the GUI the dropdown option prompts for a single field Username. The hint text says use the payout address. The docs site says enter username and password, but there's no password field. I tried plugging in an address but it seemed like nothing was happening with the miner. Finally I settled on the email used for the account and after a few minutes it appears to be mining. I appreciate how simple this setup is, it's just not quite as self-explanatory as it could be.

This is an issue with limited docs for HNSPool/Urkel Pool. Once they've clearer instructions, it'll be easier. Closing this issue.


Documentation

For documentation review

Why do we have both docs folder and Documentation folder?

I already commented about it

Why do we have both docs folder and Documentation folder?

I already commented about it

@oriyarde  should I just delete the Documentation folder?

Why do we have both docs folder and Documentation folder?

I already commented about it

@oriyarde should I just delete the Documentation folder?

yes, thanks

now that we've concentrated much on actual content, could you open a ticket to organize the files in more dirs?
we currently have a whopping 51 md files in the flat docs/content/ dir

@oriyarde updated.

could Documentation/k8s_driver_arch_diagram.svg also move to /docs?

done. moved to book_files

@oriyarde @zingero  please be sure to resolve all of your comments so when I get the final approval / updates from @erantzabari  I can complete the changes easily and merge to develop. Thanks


Stats for Why Music?

Type

🚑 Health report

Needs

[ ] Analytics and/or component tracking

Overview of stats from GA for the Why Music series requested by comms. Will look at pageviews, bounce rate, and engagement with iframes

@jamesgorrie is there a way in GA to group all the why music pages together that I might not be aware of? Currently I'm unable to do this as they don't have a common url or page title and don't appear in the series tag. I've counted 19 event pages and 4 articles.

@hthair
As the events weren't published on V2, you're going to have to do those manually.
We have a series custom dimension, but it only applies to content on V2.
It was also broken for Prismic, content, although we should have that fixed.
The way to do this would be to get all the URLs and run them through GA unfortunately.
I have put a PR in #1824 to help make this easier in the future.

high level stats sent to Marni in comms.