Should this repo lint C++ code with clang-tidy or cpplint?

https://devblogs.microsoft.com/cppblog/intellisense-code-linter-for-cpp
https://devblogs.microsoft.com/cppblog/code-analysis-with-clang-tidy-in-visual-studio
https://github.com/llvm-mirror/clang-tools-extra/tree/master/clang-tidy
v.s.
https://github.com/TheAlgorithms/C-Plus-Plus/blob/master/.github/workflows/cpplint.yml
https://github.com/cpplint/cpplint

clang-tidy would be the ideal way to perform static code analysis for this repo as it can be automated fairly easily. I second that. Regarding its implementation:

a lot of the existing code already fails to either compile or follow the style protocol
I suggest this change be made once the current errors in the repo are fixed (#805) which addresses this exact problem
.github/workflows/awesome_forkflow.yml attempts to structure the CI implementation flow checking for both static code analysis followed by compilation on multiple platforms

The checks by clang-tidy and clang-format though quite extensive and flexible, the existing source code is so badly structured that I has been almost impossible to get the repo working well. I have made a preliminary implementation in a branch in my fork - eb4114e2
It can, again, like the cpplint be implemented only on the new pull-requests but this will end up making the already incoherent repository even more chaotic. I suggest that the existing repo and the code therein be first normalized as in #805 thereby ensuring that all code does follow at least one standard. The changes can then be applied much more easily thereafter.


T2T to hg38

Hi. I lifted several variants from hg38 to T2T.
Is it possible to do a T2T to hg38 liftover?

Hi,
I am also having trouble with this as all my mapping data is against the T2T v2 reference and I need to back compare with some hg38 data.  Please can someone advise me as to how I can convert T2T v2 coordinates to hg38 locations?  I just receive failure messages using the UCSC liftover webtool.  Many thanks.

I've now added this option.


Release Google.Cloud.Speech.V2 version 1.0.0-beta09

Changes in this release:
New features

Change netstandard2.1 target to netstandard2.0 (commit 82bea85)

Created release for Google.Cloud.Speech.V2-1.0.0-beta09


Cannot commit secondary contacts if there is no primary contact (or missing error message) [4]

Describe the Bug:
If a user tries to submit a project with secondary contacts when there is no primary contact, then they cannot submit. Not sure of desired behaviour here, so solution would either be:

user can submit form with only secondary contacts
user receives a message/tasklist status/validation error that they need to add a primary contact before they can submit

Probability (how likely the bug is to happen, scored from 1-5): 1
(For example, probability of 5 is something like "it happens to all users every time they log in."
Probability of 1 "only happens to certain users when a really specific and unlikely path is followed.")
Effect (how bad the bug is when it does happen, scored from 1-5): 3
(For example, effect of 5 is "the entire app crashes and makes it unusable for all users" or "the bug causes the wrong data to be saved, with critical information (e.g. payment) being affected."
Effect of 1 is "It makes some styling look a little bit weird.")
Steps to reproduce the behaviour:

create a new project
add only secondary contacts, no primary contact
try to submit project
receive error:

Screenshots:
Additional information:

OS: [e.g. iOS]
Browser: [e.g. chrome, safari]
Version: [e.g. 22]
Additional context

To resolve the problem of being unable to delete records from the project_contact table when a user removes one from the project contact form, we can utilize this bug card to adjust the logic and structure of the project_contact table.

@nanyangpro , do you know what the app is supposed to do if someone enters a secondary contact but not a primary one?

Good question, @BCerki - The ideal behaviour is to have the Primary Contact filled out before a Secondary (optional) is entered.

@nanyangpro , probably most people use the ideal behaviour you mentioned, but it is possible for a user to fill out only secondary contacts. If they do this for some reason, what should happen when they try to commit the project?

@BCerki - Sorry for the confusion, I meant the ideal system behaviour, not user behaviour. Users should be prevented to enter only secondary contact, e.g. show "Please enter a Primary Contact" upon committing. Additionally, this context was from the previous CIF Ops members. Now that they are essentially a whole new team, feel free to double check with them in the CIF Internal Users channel as you see fit.


ci: upgrade node to version 20

Which issue does this PR close?
-
Rationale for this change
Mostly to keep the CI up-to-date, triggered by #7915.
What changes are included in this PR?
Upgrade node version to 20.
Are these changes tested?
CI passes.
Are there any user-facing changes?
-

This PR looks ready to review -- what do you think @crepererum ?

It is, sorry (I was waiting for CI and then forgot about it).


Add menu icons in courseware "no videos" message

All empty list error text layouts have been standardized in text styles to correspond to the iOS implementation. Additionally, the courseware "no videos" message has the mode switcher menu icon added at the top and in it's text according to MA-962.

Following issues found:

The mode switcher icon isn't changing upon selection on both Course Outline and Course Detail screen.
The screen where we show the "no videos" message, the icon above and the icon in the message don't match.

Depicted in the following video:
https://s3.amazonaws.com/uploads.hipchat.com/182037/2480913/jFz3scOruKtPZsy/mode_switching.mp4

Fixed in commit 06b789d8b1c12ceb41a476662a8273348e95aae7.
On Thu, Dec 10, 2015 at 4:49 PM, Mi@N Kh@LiD <EMAIL_ADDRESS>wrote:

Following issues found:

The mode switcher icon isn't changing upon selection on both Course
Outline and Course Detail screen.
The screen where we show the "no videos" message, the icon above and
the icon in the message don't match.

Depicted in the following video:
https://s3.amazonaws.com/uploads.hipchat.com/182037/2480913/jFz3scOruKtPZsy/mode_switching.mp4
—
Reply to this email directly or view it on GitHub
https://github.com/edx/edx-app-android/pull/465#issuecomment-163589234.

other than the couple of nits :+1:


Fix Failing Tests

Seems mainly to do with hook. Not sure about test regarding tab number.

Broken tests output:
 (33/94) [EXECUTE] (X) 2 should be equal to 1

(60/94) [EXECUTE] When already updated
(60/94) [EXECUTE] (X) vim-pseudocl/updated2 should not exist

(62/94) [EXECUTE] Using Funcref
> ['Updated. Elapsed time: 1.340349 sec.', '[==]', '', '- Finishing ... Done!', '- Post-update hook for vim-pseudocl ... Done!', '- Post-update hook for vim-easy-align ... Done!', '- vim-pseudocl: Checking connectivity... done.', '- vim-easy-align: 1 file changed, 11 insertions(+), 11 deletions(-)']
(62/94) [EXECUTE] (X) vim-easy-align/vim-easy-alignupdated03 should exist

(89/94) [EXECUTE] #139-1 Using new remote branch
> Updated. Elapsed time: 1.323521 sec.
[==]
- Finishing ... Done!
- new-branch: create mode 100644 plugin/bar.vim
- seoul256.vim: Checking connectivity... done.
(89/94) [ EXPECT] (X)
- Expected:
- new-branch: OK
- seoul256.vim: OK
Finished. 0 error(s).
[==]
- Got:
Invalid branch/tag: master (expected: new). Try PlugUpdate.
- seoul256.vim: OK
Finished. 1 error(s).
[==]

Success/Total: 90/94
Success/Total: 90/94 (assertions: 249/252)
Elapsed time: 28.485033 sec.

Build is passing now. See ruby version 1.9.3.


could not find driver: Caused by: PDOException

Not sure how to fix this.
What steps will reproduce the problem?
Clean install on Ubuntu 14.04
What is the expected result?
Database driver is installed
What do you get instead?
could not find driver
Caused by: PDOException
could not find driver
in /var/www/mp/vendor/yiisoft/yii2/db/Connection.php at line 603
Additional info

Q
A

Yii version
2.0.?

PHP version

Operating system

sudo apt-get install php5-mysql

I have the issue after running a yii2 project on a different PC (Different from the one it was developed on). I am using Windows 8.1 and WAMP, connecting to a remote SQL server. From PHPinfo(), I can see that I have;
PDO drivers (mysql, odbc and sqlite) enabled. For pdo_mysql, I can see mysqlnd 5.0.11. What could be the problem?
NB. I am new to yii2.


Implement ns lookup allowlist

The ns-lookup accepts domain names as well as suffixes, e.g.:
--allow-resolve=* # allow all domain names
--allow-resolve=example.com # only allow example.com name resolution
--allow-resolve=example.com --allow-resolve=*.example.com # allow example.com and its subdomains' name resolution

LGTM


There is "Warning: D02 Incompatible package<EMAIL_ADDRESS>found as dependency of axios" message, but that version not in node_module

My node package use 'axios' version 0.25.0.
I has checked "agent-base" in node_module folder. Its version is 6.0.2 not 5.1.1.

When I run node-red-dev validate locally, there is warning message below.
Warning: D02 Incompatible package<EMAIL_ADDRESS>found as dependency of axios

fixed in 0.1.5 https://github.com/node-red/node-red-dev-cli/pull/17


Renaming a module doesn't rename open references in other project

Project one:
module Foo

let bar a = a

Project two:
module FooTests

open Foo
open NUnit.Framework
open FsUnit

[<Test>]
let ``identity`` () =
    Foo.bar 3 |> should equal 3

Build, place cursor on Foo module name in Project 1, rename to NewName.
Expected Both Foos in FooTests changed to NewName.
Actual The line in the test method gets its reference renamed, but the open line does not get its reference renamed.

Thanks for the bug report.
The quick answer is that there is no symbol for open statements coming from the compiler; therefore, there is no info for us to rename open Foo in a reliable way. See relevant feature request at https://github.com/fsharp/FSharp.Compiler.Service/issues/91.

I am having this problem even within a project. The files of the renamed module and the not-renamed module are in a folder - the same folder - in case it is related to folders.

@exercitusvir No, it isn't related to folders. As I said above, it's a limitation of FSharp.Compiler.Service.


Release 1.29.1

What this PR does / why we need it:
Which issue this PR fixes(if applicable):
fixes #
Special notes for reviewers:

Release note:

NONE

/hold

/unhold

/lgtm
/approve


Bump GitHub action workflows to latest version

This PR bumps GitHub action workflows to latest version, thus avoiding deprecation warnings as e.g. seen here.

Have you tested if this works?

Yes, I can preview the site successfully using hugo v0.124.1

Mine is broken on Hugo 0.124.1.

What exactly is broken? Can you share the error you are encountering, please?

This repo is a mirror. Please submit PRs on the main mono-repo: https://github.com/HugoBlox/hugo-blox-builder/tree/main/starters/academic-cv


About Traccar 3.7 configuration

Hi Anton
i want to know following configuration key compatible with traccar 3.7.

processing.copyAttributes.enable
processing.copyAttributes

kindly check and revert as soon as possible.

Hello,
No, it is available since 3.8


vba dictionary

How to add the VBA dictionary on mac?

Hi @matdestr, download the latest release of VBA-Dictionary, unzip, and add Dictionary.cls to your project.

Thanks for raising this issue, I've added an installing section to VBA-Dictionary: https://github.com/VBA-tools/VBA-Dictionary#installing


Mexico Wall Update

http://www.reuters.com/article/us-usa-trump-immigration-idUSKBN1591HP

Either we can squash all of these promises together, or update each one separately.
@MrLuit @alanfriedman

I suggest that we make one promise for all the 'build a wall' policies but include all necessary information


HLS.js release?

Curious when we'll see an NPM distribution containing HLS.js.
It works well for me when installed locally, but our release is blocked by this one.
Thanks!

+1

any updates on the release ?

yep, @leandromoreira just did it, wait a bit until we have it on cdn

:confetti_ball:

im guessing the npm publish is to follow as well ?

@jfairley @dviramontes we had a little problem while releasing the newer version of clappr, so this is wrong ;( . We'll fix it soon, I'm sorry. :hankey:

@leandromoreira
O.K. thanks for the update!

@jfairley @dviramontes @flavioribeiro we're live! (once again, I'm sorry)

yay! thanks so much!


Prefer short circuit operators and membership test

Dear Audio_wavefiles developer,
Using the rejuvenation crate, I found and replaced all places that should use the short circuit operators.
Furthermore, I found and replaced all places that should use the membership test.
Greetings,
Pierre
Problem detected and solved by Rejuvenation-Ada crate

For more information on short circuit operators see adaic

For more information on membership tests see e.g. ada-auth


Enable webcam functionality

Continued work on Alex's branch.
Continuation of #23

A design note: We decided to not revert the "webcam button" back to it's original text if a user uploads an image after enabling the webcam. Meaning after using the webcam the webcam button will show New Picture? even if the user uploads an image. We decided this was clear enough since the user will have already "enabled" webcam and know that that's the webcam button. Also the button is reset on page refresh so the "acceptance" doesn't persist between sessions.

Minor note: The button changes to New Picture? instead of Use your webcam since the latter implies the webcam needs to be re-enabled


Document Node version support / add a warning to tsdx create

Current Behavior
If you're on Node 8 you get errors when trying to run tsdx create, but the reason for the failures are unclear.
nvm use 8.11.3

npx tsdx create bar

Failed to install dependencies
Error: Command failed with exit code 1: yarn add @types/jest @types/react @types/react-dom husky react react-dom tsdx tslib typescript --dev

Desired Behavior
When I run tsdx create it should tell me that my current Node version is not compatible.

Suggested Solution
Add a deprecation warning for unsupported Node versions when running tsdx create, as well as add Node versions supported in the README.md, and probably add a engines attribute to the package.json describing the same limitations.

Who does this impact? Who is this for?
All users.

Additional context
I only knew this by seeing the recent releases including this PR https://github.com/jaredpalmer/tsdx/pull/426

Mentioned this in https://github.com/formium/tsdx/pull/507#issuecomment-683453786 :

[this is exclusively] an issue with tsdx create because it doesn't pin anything (including husky) and so it gets the most up to date versions of things, which can be breaking or have incompatible versions with TSDX core

TSDX itself does not yet require Node 10+, I've specifically batched various dependencies's upgrades to Node 10 together to go into v0.14.0, which is a breaking change

hmmm. whats the logic for still supporting node <10?

@sw-yx it should be formally dropped in a breaking change (same as all the deps that dropped it did), which is what v0.14.0 is. It was not officially dropped before and is actually still supported.

ahh, makes perfect sense 👍🏽


Spark Doris Connector ： does not allow insertion

Search before asking

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

Version

What's Wrong?
Spark Doris Connector在进行select操作时，可正常返回数据，但insert时报解析错误
scala> spark.sql("""
| INSERT INTO spark_doris3 VALUES ("test4","test_imei","test_uuid",20211101,20211123)
| """)
org.apache.spark.sql.AnalysisException: org.apache.doris.spark.sql.DorisRelation@5b61d156 does not allow insertion.;;
'InsertIntoTable Relation[apk_name#10,imei#11,uuid#12,first_time#13L,time#14L] org.apache.doris.spark.sql.DorisRelation@5b61d156, false, false
What You Expected?
正常插入数据
How to Reproduce?
No response
Anything Else?
No response
Are you willing to submit PR?

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

Code of Conduct

[X] I agree to follow this project's Code of Conduct

Which version are you using, Spark connector, and Doris Version number

Doris Version -- <IP_ADDRESS>
Spark connector-- doris-spark-1.0.0-SNAPSHOT

Doris Version -- <IP_ADDRESS> Spark connector-- doris-spark-1.0.0-SNAPSHOT

Version 0.15 of spark-connector support batch and stream write data to Doris  , reference http://doris.apache.org/master/en/extending-doris/spark-doris-connector.html
You can build spark-connector with version 0.15 source code , it's compatible with version 0.12+ Doris


I have issue with the cache and mobiles

Okay I will keep this very simple this time. I have the site running perfectly on my server but I am getting a few issues between devices/browsers, for example I sign in with chrome and change a static page like contact us and its all fine in chrome.
I look at the site via firefox and its the old page still. Same with my mobile, only I dont know why but I can not access site on mobile via url I have to put IP address, this maynot be related.
The clear cache links in admin panel are not doing anything and yes I have cleared cache in browsers, still shows me the old pages. I have googled the problem and have looked on here so this is not a repeat question.
Thank you.

@Undefined-Variables I'll make it simple. Give enough information so we can reproduce what you report. That's the basis of bug report.

okay the cache will not clear using the buttons and i have different versions of a website all coming from the same server!

problem is the buttons are javascript and I dont understand js! Not at all.

I have figured out what was happening and I feel a bit silly, I have a server running one site and my laptop running another development site but both had the same cookie ID set and the same site setting in php.ini was empty so and I had been jumping between the two using the same browser!
The cache buttons are still not clearing cache so I have disabled the HTML cache, that is fine for now but if/when I get traffic on the site this will cause the site to lag im guessing? Where are these buttons coded? Please don't say the Jquery file cos that is hard work!
PH-7 I would just like to say thank you for going open source and for all the work you have clearly put in to this, its amazing honestly, if this takes off for me I will one million percent become a patron.   :)

PH-7 I would just like to say thank you for going open source and for all the work you have clearly put in to this, its amazing honestly, if this takes off for me I will one million percent become a patron. :)

Thanks very much for your very nice message @Undefined-Variables! I really, highly appreciate it! 😊
P.S. If you like the software and appreciate the time I spent to build the software, I will be really happy if you could add a review at https://sourceforge.net/projects/ph7socialdating/ (you will just have to create an account in order to write a review).
This really motivates me to continue developing the software!

Yes of course I will write a review :) Could you point me in right direction to sort these http links out, I have working SSL certificate and it works fine on Desktop but apple wont allow a secure connection cos there are http elements on the page! If you view page source it has 4 links that are using my ip address and not the domain name! Like http://<IP_ADDRESS> the links are images, female no picture and ta few of the pages in about us menu are the same?
I will go and write this review now :) Keep up the good work...

Dont worry I figured it out, the pictures in question were on accounts created over a http connection so I just uploaded new images and it works!!!! :) Very happy now and I have left you a review :)


Cut acrylic panels for 0.3 enclosed build

What has to be done
Identify place to cut Acrylic, Cut Acrylic Panel,
Acrylic available in Oakland
Then ship to Maryland (Martin)

Edwin to talk to Momentum to find out what files are needed
Donna to talk to Randall and Tijani to get the drawings.

acrylic panels for enclosed 0.3 builds were manufactured and received by @martukas and @inceptionev

acrylic panels for enclosed 0.3 builds were manufactured and received by @martukas and @inceptionev


Plugin feature

Trying to add every feature under the sun can bloat the core functionalities of the framework and create an excessively large dependance tree. The solution is to split out certain features as "plugins" that the users can install if they want to use. One way to do this would be to create a class called Plugin which when added to Trader defines additional methods the user can call. The exact implementation is up for debate, but it should follow these principles:

Plugins can be installed and added easily, possibly using a method like set_plugin()
Any dependencies of the plugins are not part of the dependance tree of harvest itself. Users should install them on their own after installing Harvest.

Possible plugins that may be developed in the future include:

ML/DNN integration
Earning report data of companies
etc.

TODO:

[ ] Define the plugin class/interface
[ ] Revive the Yahoo Earnings Plugin in plugin/yahoo.py

What is the Plugin feature supposed to do exactly?What other plugins to you see implemented in the future?

I was thinking more about this and have a few questions:

Should plugins be allowed to import other harvest modules such as Storage? Because if so then could a plugin be a more complex Algo that does ML?
Should third-parties be allowed to create plugins without needing to know the internals of Harvest?
Should we move parts of Harvest that require excessive dependencies into the plugins? For example the database storage can be moved to the plugins since it uses the SQLAlchemy dependencies. I guess this become problematic when deciding where new streamers and brokers would go since they usually require extra plugins.
How would a plugin like Yahoo Earnings Plugin work? Where in Harvest will it be called and where is the output of the plugin go?

I would say...

Why not :)
Definitely yes, being easy to mod is harvest's strength.
To some extend this can be solved by using extras_require in setup.py
Ideally "installing" the plugin will add a new interface to the Algo class which the user can call just like any other function.


Adding multiple variables

@vikjam
Is there a way to add multiple Type 1/2/3 variables? In the examples I only see 1 variable for each, and I'm not sure what other type of object "t1vars" would take than individual variable names.

Hi @catherinecthomas, I'll post an update tonight! Thanks for raising this issue.

@vikjam Thanks very much! Much appreciated that this package exists for R, and this functionality of having multiple of each variable type would make it even more useful.

Hi @catherinecthomas, I fixed a bug that prevented a list of variables being provided as an argument for t1vars, t2vars', t3vars' and updated the examples page. Thanks for raising this issue!

Hi @vikjam thank you for providing this update! I just tried to run it after reinstalling the bcstatsR package. I had a line t1vars = c("marital", "age"),... but got this error message:
Error in aggregate.data.frame(as.data.frame(x), ...) :
no rows to aggregate.
Thoughts?

Hi @catherinecthomas, could you try to run this example to see if it works for you?
library(bcstatsR)
data(survey, bc)

result.mv <- bcstats(surveydata  = survey,
                     bcdata      = bc,
                     id          = "id",
                     t1vars      = c("gender", "gameresult"),
                     t3vars      = "itemssold",
                     enumerator  = "enum",
                     enumteam    = "enumteam",
                     backchecker = "bcer",
                     exclude     = list(itemssold = c(0)))

Also, can you double-check the version is bcstatsR version <IP_ADDRESS>10?

This works! Fantastic. Thanks so much!


Reduce datastore queries for config settings

The main change is to have Configuration.__init__ get all config settings.
Currently, a separate query is made each time a config entry needs to be
accessed. With this change, all the config entries are pulled at once in
just two queries (one for the repo config, one for the global config)
when the Configuration object is initialized. Individual entries can
then be accessed without additional datastore queries. It's pretty
similar to what gimite suggested on issue #349, except I didn't change
the datastore model (there's still a separate ConfigEntry object for
each setting, just now we get them all at once).
According to Stackdriver this reduces /datastore_v3.Get RPCs for the
repo homepages by about half (from 146 to 62). Datastore queries seem to
be the biggest contributor to latency, so this speeds things up a
noticeable amount (from ~1500-1700ms to ~700-800ms).
This means skipping the cache codepath, but the config cache seems to
be disabled in prod anyway.
There are some places where a Configuration object is unavailable (e.g.,
when HANDLER_CLASSES is built), and for them I've just left things
as they are for now.

Thanks for doing this, and glad to see significant improvement of performance!

It's failed twice on the Python 2.7.15 tests, but the failures were on different assertions, so this must just be noise.


fix: added table_id to RegionStat

I hereby agree to the terms of the GreptimeDB CLA
linked issue of https://github.com/GreptimeTeam/greptimedb/issues/1566
What's changed and what's your intention?
PLEASE DO NOT LEAVE THIS EMPTY !!!
Please explain IN DETAIL what the changes are in this PR and why they are needed:

Summarize your change (mandatory)
How does this PR work? Need a brief introduction for the changed logic (optional)
Describe clearly one logical change and avoid lazy messages (optional)
Describe any limitations of the current code (optional)

Checklist

[ ]  I have written the necessary comments.
[ ]  I have added the necessary unit tests and integration tests.

Refer to a related PR or issue link (optional)

@tarunsamanta2k20 can you generate the proto's go code? The CI failed. You can just run make under the project's root path.

@tarunsamanta2k20 yes, execute make and the go protobuf code will be generated

@MichaelScofield then what do I have to do?

@MichaelScofield thread 'main' panicked at 'Could not find protoc installation and this build crate cannot proceed without

@tarunsamanta2k20 After executing "make" command, the go protobuf source codes should be generated, then you can commit & push them as well. Note that generating protobuf source codes requires pulling some docker image, so make sure you have docker daemon running in your machine.

@MichaelScofield Done.


why the checkpoint of last trial always saved into .trial_0

These are logs of different tasks:

Same as #1192


I updated my profile

I forgot to change png to jpeg from the template. Thank you.

Thanks, it's been fixed. Also, next time please check the path to the photo is also correct.


Add PowerShell Commands to unregister server

To make this document consistent, I think it is worth adding the powershell commands to unregister a server.  "Unregister-AzureRmStorageSyncServer [-Id] <string> [[-Force]]"

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

ID: 4814031f-3cca-10a6-8587-cf1a045d2481
Version Independent ID: b96d1378-9a11-c00e-1c84-a69d4ff1cff3
Content: Manage registered servers with Azure File Sync
Content Source: articles/storage/files/storage-sync-files-server-registration.md
Service: storage
GitHub Login: @wmgries
Microsoft Alias: wgries

@gacurtin Thanks for the feedback! I have assigned the issue to the content author to evaluate and update as appropriate.

#assign:fauhse

#assign:mtalasila

#reassign: @khdownie

@gacurtin apologies that this was ignored for literally years. I've added the unregister PowerShell command to the doc.

#please-close


Added guidance on configuring extension icon

Q
A

content fix?
no

New article?
yes

Related issues?
n/a

What's in this Pull Request?
Added guidance on configuring extension icon. Also, added the article to the TOC.

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs/images/extensionicon_commandbar_base64.png
:white_check_mark:Succeeded

docs/images/extensionicon_commandbar_imagepng.png
:white_check_mark:Succeeded

docs/spfx/extensions/basics/configure-extension-icon.md
:white_check_mark:Succeeded

docs/toc.yml
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.

thx Waldek, appreciated.


Broaden the prereq comment in the go fragments

Followup to #282
Based on feedback that we weren't listing all of the necessary dependencies to install to run a sample.
Let me know if there's a better way.

lgtm, but @pongad and @broady should weigh in to confirm this is the most recommended way.

Was this merged or folded into a separate PR?

Yes, the other on I have open


[ComicsKingdomBridge] Add support for ComicsKingdom.com comics

I based this off the GoComicsBridge.  It's designed to parse non-premium comics on ComicsKingdom.com.

Thanks for your contribution! No objections :open_mouth: :+1:


Ensure unique UIDS for deadline events

Now, UIDs are unique across abstract deadlines, deadlines (which might have been used instead of abstract deadlines in some cases?) and conferences themselves. Thank you for pointing this issue out @hlnicholls, I hope it solves your issue?
This addresses a bug I introduced (and missed) in https://github.com/hlnicholls/bioinformatics-conferences/pull/2

@hlnicholls if you were keen to test, one option is to check-out the respective changes locally before merging. I'm quite sure I've addressed the issue though 😅

Looks good! Thank you for updating. I will go ahead and merge.


Travis arm

Checklist

[x] Used a personal fork of the feedstock to propose changes
[x] Bumped the build number (if the version is unchanged)
[ ] Reset the build number to 0 (if the version changed)
[ ] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[ ] Ensured the license file is being packaged.

Closes #1
Closes #2

@conda-forge-admin, please rerender


Type _WeakCounter

Adds typing to the _WeakCounter class. Required to fix a typing error when this class is used as a Generic further down in the same file.

This has had the "Ready to merge" tag for at least two days and is straitforward enough.
Even if core-devs are supposed to be the ones merging, I'm going to do it anyway here to free some more time from the release manager and move things forward.


Implement around as a complement to over

It's missing a properly worded documentation and to decide if it would be a good addition to the language

I'll merge this if you add around to fn is_experimental

I think that's everything


Request: augment type error messages with inferred types to add more context

@TheSeamau5 has suggested that we show some contextual types, like this:
f x y z =
  x ++ y ++ z

x = "H"
y = "e"
z = 'l'
a = f x y z

-- TYPE MISMATCH --------------------------------------------------------------

This expression is triggering a type mismatch.

10|
11| a = f x y z
12|           ^

It would seem that you called

f : appendable -> appendable -> appendable -> appendable

with

x : String (appendable)

y : String (appendable)

z : Char

While this works fine typographically when the function name and arguments are all single letters, it is not clear how it would work if they were large sub expressions. How would that look?

Hmmm... maybe there should be some sort of limit to the size of the sub-expressions where this sort of reporting takes place (unless the inference can nail down precisely the type mismatch). I don't know how this limit can be measured, because in the end, a function is just one expression. But maybe we can come up with some sort of metric.
Like we can call this metric "expressionSize" where you add 1 per application, 2 per nested let-in, 2 per case-expression, etc... and then turn off this precise reporting if the "expressionSize" of a function is greater than 5 or 10 or something.
Example:
expressionSize (x = 3) == 0

expressionSize (x = y + z) == 1

expressionSize (x = (+) y z) == 2
-- maybe currying and binary operations are seen as different

expressionSize
  (f x y = let z = 2 in if x == 3 then y else z) == 4
-- 2 for the let-in and 2 for the if-then-else

You know, something like this. Because it's possible that, if there are too many sub-expressions, the extensive error reporting may do more harm than good.

This sounds like it's starting to get complicated to scale. You may overwhelm users with this in cases where they write bad code (certainly possible with newbies, and they're the people we're optimising for right?).
If you want to really inspect all the inferred types of sub-expressions to find the problem with a type mismatch, you may want to push that to a separate tool or debug mode. In general given Elm's simple type system these type mismatches shouldn't be too hard to figure out anyway (I think?).

I think, ideally, you'd want the ability to mouse over an expression in an IDE and see its type. If there's a type mismatch, the whole thing would be highlighted in red. So, if you mouse over things, you might be able to see which types are wrong. So, perhaps the scalable idea is to lay the groundwork for this feature to be possible in IDEs, because I think that one scales.

This matches my intuition as well. Being able to report all errors and warnings as JSON is already pretty much done, so we can do red underlines soon.
I had been thinking of a feature that is "spit out a full report of types" but I figured it'd only be possible when the program is well-typed. Now that we have had this discussion, I feel like we can spit out partial information just as easily and that's actually a really common use case.
In any case, I'm going to close this issue in favor of going in that direction. Thanks for working through this stuff!


Add support for persisting state in localSettings

There's a lot of boilerplate.  I'll eventually look into creating a base class, but it didn't seem like there was enough in common to do that right now.
https://test.kylefarnung.com/puzzle/#/


Fix typo in "Using Secrets as Environment Variables" section

Fixes typo in "Using Secrets as Environment Variables" section

I signed it!

Thank you!


Fix extractTransformer

Fix transformer of Wrapper(a:A) into A

Codecov Report

Merging #7 into master will not change coverage.
The diff coverage is 100%.

@@           Coverage Diff           @@
##           master       #7   +/-   ##
=======================================
  Coverage   89.47%   89.47%
=======================================
  Files           3        3
  Lines          57       57
  Branches        3        3
=======================================
  Hits           51       51
  Misses          6        6

Impacted Files
Coverage Δ

src/main/scala/fluent/internal/Transformer.scala
88.23% <100%> (ø)
:arrow_up:

Continue to review full report at Codecov.

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


Functional Groups - replacement by atom and adding a bond to contracted FG

It would be nice to add the ability to replace contracted FG by another atoms and adding a bond to contracted FG.
AG:

Forbid starting bond from the FG to make sure they are list elements.
There can be only 1 bond to FG, linking to the zero atom in the group.

The following scenario should work: add template to the canvas, separately add FG to the canvas. It should be able to add bond from the template node to the FG on the canvas, if there is no other bonds to this FG.

Added the part with business rules for bonding.

Tested v.2.4


Display the date and time of Satoshi generation in Ordinals Explorer.

Feature requests are not requests for improvements to a problem, but suggestions for building a better UX.
I always have a hard time finding something worthwhile from a lot of Ordinals.
The valuable thing, in my case, is which satoshi are Inscribed.
More specifically, I want to find Ordinals that are tied to old satoshi.
Main point of the request
Is it possible to use Hiro's Ordinals Explorer to display the generation date and time of the Satoshi that the Digital Artifact is tied to?
Alternatives
Currently, I have to research on Ordinals.com from the ID, but Hiro's Ordinals Explorer is all uppercase, so it doesn't hit the search. my request can be replaced by correcting the ID to its original mixed-case string. I am not sure how to do this. However, the user experience would be slightly impaired by having to search and look it up.
Additional context

transfering this issue to the ordinals Explorer

Let's look into and address:
"...my request can be replaced by correcting the ID to its original mixed-case string. I am not sure how to do this. However, the user experience would be slightly impaired by having to search and look it up."

Ah I think this is an old issue. We removed the uppercasing. @FUT-GURU is this still a problem?


Resource list needs metadata attribute null checks

Ok, so this is likely what’s happening here:

Admin users can “see” resources that other users can’t – likely resources that are invalid or incomplete
One of such resources is missing required metadata somehow, in this case, the title.
The code can’t catch that and errors out when trying to access that attriute without doing a null check first.

One can't normally create a resource without a title. This represents -- therefore -- some kind of crash while creating a resource.

It's quite likely that the way this happened is that someone was trying to create a resource with a file upload, and the file upload failed (probably due to file size). That's something we need to fix.

@alvacouch Can you please review this and close/comment as necessary?

@alvacouch Can you please review this and close/comment as necessary?

closing this, @alvacouch please feel  reopen if you think it's necessary.


Update MudAutocomplete.razor.cs

Pull request for #6119
How Has This Been Tested?
Hand tested, a really small fix
Types of changes

[ X] Bug fix (non-breaking change which fixes an issue)

Checklist:

[ X] The PR is submitted to the correct branch (dev).
[ X] My code follows the code style of this project.

@henon I think we need a test to reproduce the bug.

@henon I think we need a test to reproduce the bug.

You weren't able to reproduce?

I think @mikes-gh meant a test that covers the bug. Should be easy to do, raise the event and check that the value is received. It protects your fix against accidental undoing by future PRs.

I think @mikes-gh meant a test that covers the bug. Should be easy to do, raise the event and check that the value is received. It protects your fix against accidental undoing by future PRs.

I added the test, hope it is ok.

Thanks @idan-h !


Make unitary, has_unitary, and apply_unitary fallback to decompose

This will make them consistent with how the simulators currently work, and probably better represents the user's intent (i.e. "I have a thing I don't know the function of, please do your best to tell me what it does").
Note that this will naturally result in lists of unitary operations having a unitary matrix according to cirq.
We might need to add an optional qubit_order value to the unitary method to make this work cleanly. If not specified, the order should be inferred (e.g. from operations' qubits property).
As part of this issue, a lot of special case "decompose to get unitary" code strewn around the code base (e.g. in simulators) should be rewritten.

I'm down with this but think we need to make sure we have pinned down what decompose actually means first #930

I can work on this. However, I will maybe need some guidance.
If I understand correctly, unitary  (has_unitary) should first try to decompose the object instead of raising NotImplemented (returning False)? However, if decompose fail, it should still raise  NotImplemented (return False)?
I can't find a apply_unitary_to_tensor method anywhere in the code base.
I will probably get back to you about suitable test cases and the final task of rewriting "decompose to get unitary" in e.g. simulators.

apply_unitary_to_tensor was renamed to apply_unitary.
Yes, these methods should try to obtain a unitary effect through decomposition before giving up.

 when attempting to reassemble multiple little unitaries into one larger unitary. This might be hard enough to deal with that tagging the issue "good first issue" was a bad idea.
An acceptable compromise for this issue is to condition the decomposition fallback on the object being a cirq.Operation, because operations have a qubits property that returns a list that corresponds to the qubit order.
For unapplied gates things are significantly trickier, because you need to know how many qubits but there's... not really a way to do that. We will open up a follow-up issue to resolve that after this one is done.

unitary (has_unitary) should first try to decompose the object instead of raising NotImplemented (returning False)? However, if decompose fail, it should still raise NotImplemented (return False)?

Correct. Note that you should use cirq.decompose_once instead of cirq.decompose, because you will be calling unitary / apply_unitary on the items. These calls will handle further decompositions if needed.

I can't find a apply_unitary_to_tensor method anywhere in the code base.

It was renamed to apply_unitary.

I will probably get back to you about suitable test cases and the final task of rewriting "decompose to get unitary" in e.g. simulators.

Okay.

Thanks for the hints. I will give it a try!

We didn't really solve #930 before doing this.

Still needs to be done for gates.

I will start working on the gates.


Roll engine 8dc3a4cde207..0f1ff3bdb30b (14 commits)

https://github.com/flutter/engine/compare/8dc3a4cde207...0f1ff3bdb30b
git log 8dc3a4cde2075a4f5458fd0eb199627f5124508d..0f1ff3bdb30b2e29beaf9c1985a1e75f8d632096 --no-merges --oneline
0f1ff3bdb Correct typos, adopt US spellings (flutter/engine#9081)
651c90409 Use track-widget-creation transformer included in the sdk. (flutter/engine#9085)
cfa524fcd New Plugin API PR4: Adds Lifecycle support to the new plugin system. (flutter/engine#9049)
6b8ac18b8 Roll src/third_party/skia d9430297e74a..f33c95cd6f55 (5 commits) (flutter/engine#9082)
11408effd Update macOS podspec version requirement (flutter/engine#9077)
66c6ae48e Roll src/third_party/skia a4b837971c4b..d9430297e74a (30 commits) (flutter/engine#9080)
9151b377e Roll src/third_party/skia 9339a8a61af0..a4b837971c4b (34 commits) (flutter/engine#9076)
ee6a9c404 Fix unchecked operation warnings in FlutterMain (flutter/engine#9073)
333042cf3 Roll third_party/dart/tools/sdks to 2.3.0 (flutter/engine#9072)
01b8c078c Roll src/third_party/skia f77dbd04b926..9339a8a61af0 (12 commits) (flutter/engine#9065)
26b4fb57f Roll src/third_party/dart e3edfd36b2..ec4d48e241 (7 commits)
9d2d58a3c Add mouse button support to the macOS shell (flutter/engine#9054)
b17c0c6e6 Add a podspec for FlutterMacOS.framework (flutter/engine#9062)
82ccba303 libtxt: have GetRectsForRange(strut) fall back to tight bounds if layout isn't forcing use of the strut (flutter/engine#9058)
The AutoRoll server is located here: https://autoroll.skia.org/r/flutter-engine-flutter-autoroll
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+/master/autoroll/README.md
If the roll is causing failures, please contact the current sheriff (garyq@google.com), and stop
the roller if necessary.

Trybots failed. These were the failed builds: https://cirrus-ci.com/task/4888496032972800 , https://cirrus-ci.com/task/6155133428170752 , https://cirrus-ci.com/task/5697736591015936 , https://cirrus-ci.com/task/6718083381592064 , https://cirrus-ci.com/task/5592183474749440 , https://cirrus-ci.com/task/4571836684173312 , https://cirrus-ci.com/task/6295870916526080

Commit queue failed; closing this roll.


Blank Screen for All & New Projects

Describe the bug
Since today morning, none of my projects are loading on "Preview". All I see is a blank white screen. Why is this the case?
Link to the Bolt URL that caused the error
https://bolt.new/~/sb1-7b9eso
Steps to reproduce
Try to create any project and see whether you get a blank screen.
Expected behavior
I expected my projects to load but nothing is working.
Screen Recording / Screenshot

Platform
Google Chrome and Safari
Additional context
No response

For sure. I have attached the issue here.
Could you tell me what's wrong?
[image: image.png]
[image: image.png]
On Wed, Dec 4, 2024 at 12:18 AM Brian @.***> wrote:

Apologies for the frustration! Are you able to open Chrome DevTools (On
Mac, Command + Option + J. On Windows or Linux, Control + Shift + J) and
send a screenshot of the Network tab (shown below) so we can investigate
further? Thanks!
image.png (view on web)
https://github.com/user-attachments/assets/916937a3-de93-438a-ab3d-40e22d304ba9
—
Reply to this email directly, view it on GitHub
https://github.com/stackblitz/bolt.new/issues/3602#issuecomment-2515006945,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AOVVLSIAPQI474LIKUWBXB32DXKVNAVCNFSM6AAAAABS5GH6SGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDKMJVGAYDMOJUGU
.
You are receiving this because you authored the thread.Message ID:
@.***>

For sure. There you go. Could you tell me what's wrong here?


Enable adding multiple attributes at once

Won't fix. This will be the select2 interface where the user can add one after another. #266


Handling of "may be present" condition may be incorrect

If the condition for a tag after "may be present" cannot be parsed, it should be handled as if it can always be present (same as "may be present otherwise"). Currently it is handled as "is not allowed", which is wrong (false positive).
This is also true for complex conditions, where only a part of the condition could be evaluated.
Seen in "General Series" module for Patient Position which has the condition:

Required for images where Patient Orientation Code Sequence (0054,0410) is not present and whose SOP Class is one of the following: CT ("1.2.840.10<IP_ADDRESS>.1.1.2") or MR ("1.2.840.10<IP_ADDRESS>.1.1.4") or Enhanced CT ("1.2.840.10<IP_ADDRESS>.<IP_ADDRESS>") or Enhanced MR Image ("1.2.840.10<IP_ADDRESS>.<IP_ADDRESS>") or Enhanced Color MR Image ("1.2.840.10<IP_ADDRESS>.<IP_ADDRESS>") or MR Spectroscopy ("1.2.840.10<IP_ADDRESS>.<IP_ADDRESS>") Storage SOP Classes. May be present for other SOP Classes if Patient Orientation Code Sequence (0054,0410) is not present.

Still not correct - the test checks the wrong value...


refactor: utils

This PR refactors the utils directory, and Message and Slot classes to be more Core-like and well-defined in their scope.
Specifically, this PR does the following:

moves Slots & Message to the crypto dir.
moves crypto_helpers to the utils dir.
moves json.h to the utils dir.
updates all relevant internal files and tests.
updates the Arduino IDE bash script.
updates CMake and PIO examples.
updates the changelog.

What kind of change does this PR introduce?

[x] Refactor

Does this PR introduce a breaking change?

[ ] Yes
[x] No

Does this PR release a new version?

[ ] Yes
[x] No

If yes, please describe the impact and migration path for existing applications:
The PR fulfills these requirements:

[x] It's submitted to the develop branch, not the master branch
[x] All tests are passing
[x] New/updated tests are included

Codecov Report

Merging #133 into develop will decrease coverage by 0.14%.
The diff coverage is 98.07%.

@@             Coverage Diff             @@
##           develop     #133      +/-   ##
===========================================
- Coverage    91.48%   91.34%   -0.15%
===========================================
  Files           33       33
  Lines          881      878       -3
===========================================
- Hits           806      802       -4
- Misses          75       76       +1

Impacted Files
Coverage Δ

src/transactions/serializer.cpp
88.52% <ø> (ø)
:arrow_up:

src/include/cpp-crypto/crypto/message.hpp
100% <ø> (ø)

src/transactions/transaction.cpp
89.52% <ø> (ø)
:arrow_up:

src/crypto/curve.cpp
100% <ø> (ø)
:arrow_up:

src/utils/crypto_helpers.h
100% <ø> (ø)

src/transactions/deserializer.cpp
88.38% <ø> (ø)
:arrow_up:

src/transactions/builder.cpp
77.14% <100%> (ø)
:arrow_up:

src/crypto/slot.cpp
100% <100%> (ø)

src/crypto/message.cpp
97.43% <97.43%> (ø)

... and 1 more

Continue to review full report at Codecov.

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


Bump to v0.2.40

Codecov Report

Merging #450 (641fdb4) into main (98b30ca) will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##             main     #450   +/-   ##
=======================================
  Coverage   90.47%   90.47%
=======================================
  Files          23       23
  Lines        9921     9921
=======================================
  Hits         8976     8976
  Misses        945      945

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.


fix: collect artifacts on test setup/teardown

Fix and tests for #117

I've did a PR in pytest to allow direct extraction of exceptions. Merged upstream and tested locally, everything went fine. Waiting for pytest upstream, then will update this PR with better teardown handling solution.


Add googletest as a 3rdparty library

This also helps when using CLion to develop, as the Gtest symbols are automatically resolved.

Please don't squash the commits when merging.

https://github.com/apache/incubator-mxnet/issues/9017

https://github.com/dmlc/mshadow/pull/313

https://github.com/dmlc/dmlc-core/pull/345

This will probably need to be squashed, by the way :)

I will rebase at the end some commits, but squashing the addition of the gtest and the local changes makes the history more difficult to read or to diagnose problems when you bisect IMHO.

Please merge, this is badly needed.

I agree, this makes it so much easier

Why is appveyor failing? It has to pass to merge

@cjolivier01 weren't we disabling it today? Windows build is passing in Jenkins...

Disabling appveyor?
On Tue, Dec 12, 2017 at 3:11 AM Pedro Larroy<EMAIL_ADDRESS>wrote:

@cjolivier01 https://github.com/cjolivier01 weren't we disabling it
today? Windows build is passing in Jenkins...
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/apache/incubator-mxnet/pull/9016#issuecomment-351020511,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AKts_RRNyIacYU8sBoKgBJAVdq8jM1KNks5s_l9PgaJpZM4Q8nZg
.

@cjolivier01  right, it was voted and passed in the list, didn't you see?

please add a submodule. Don't copy paste the code

We discussed in the list to add it as a third party.... The library is very small, why is it better to have it as a submodule?

+1 to use as a submodule. This way our version can stay more current.

Could you use the most recent release instead of current master for gtest?

@cjolivier01 can we merge this? I think it's important.

Done
On Thu, Dec 14, 2017 at 8:11 AM Pedro Larroy<EMAIL_ADDRESS>wrote:

@cjolivier01 https://github.com/cjolivier01 can we merge this? I think
it's important.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/apache/incubator-mxnet/pull/9016#issuecomment-351756666,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AKts_YWmvS3yJholRwNbZOmr-oUoUsE_ks5tAUizgaJpZM4Q8nZg
.

We had to merge two PRs to submodules before:
See:
https://github.com/apache/incubator-mxnet/pull/9069
Then this PR restores the submodules.


Setting GasLimit and GasPrice

Hi,
Thanks for the sample code. I'm trying to use it against PancakeFactory on the BSC network.
I'm new to sending transactions to the blockchain. How can I set the gasPrice and gasLimit (or gas) as high as possible for the call to SwapExactETHForTokensFunction()? I'd like to set the gasPrice to a multiple of what the estimate is, to try and get the swap mined as quickly as possible.
I'd appreciate any pointers in the right direction.

You need to estimate manually and provide a multipler then, see the http://playground.nethereum.com/csharp/id/1007
mainly estimate and add your multiplier


How can i print JSON

I am using following method to parse the response.
Alamofire.request(self.router).responseObject{ (response: DataResponse) in
I am getting data which custom model object.

You can chain response handlers like this:
Alamofire.request(self.router)
  .responseJSON { (response) in
    print("json")
    print(response.result.value ?? "no json")
  }
  .responseObject { (response: DataResponse) in
    …
  }

See more https://github.com/Alamofire/Alamofire#chained-response-handlers

And also, if you are handling the 'Mappable' model object, you can print like this.
func logJSON(mappable: Mappable) {
    print("\(mappable.toJSON())")
}

toJSON() is a 'Mappable' object's extension function.


Build luajit error project

Describe the bug
After updating lib LuaJit I can not build on the project it simply from the error at the time of linking the .exe
Environment

OS: Windows 11

Can you please provide a reproducible project?

Can you please provide a reproducible sample project?

https://github.com/opentibiabr/canary

Fixed by https://github.com/microsoft/vcpkg/pull/26360


SelectMenu onBlur selects first item when searchable is true

Environment

Operating System: Windows_NT
Node Version:     v20.4.0
Nuxt Version:     3.10.3
CLI Version:      3.10.1
Nitro Version:    2.8.1
Package Manager<EMAIL_ADDRESS>Builder:          -
User Config:      devtools, typescript, extends, css, vite, modules, build, colorMode, googleFonts, image, content
Runtime Modules<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>radix-vue/nuxt<EMAIL_ADDRESS><EMAIL_ADDRESS>Build Modules:    -

Version
@nuxt/ui-pro v1.0.2
Reproduction

Add a SelectMenu with the searchable prop set to true
No value is yet selected in the SelectMenu
Open the menu
Click outside the menu to cancel the selection
The first item will be selected now

The issue can easily be reproduced with the example from the docs.
Description
When using the SelectMenu with searchable set to true, the first item is selected when clicking outside the menu.
If the selection is cancelled by pressing the esc key the issue does not occur.
seems like this issues still prisists https://github.com/nuxt/ui/issues/1252
Additional context
No response
Logs
No response

Instead of opening a new issue you could have more simply commented on that one you linked, but yes as described in the upstream issue this seems by design.
I imagine this being an accessibility issue, since the original intent was that you should use the accessibility navigation buttons to cancel the operation rather then clicking away. Although I also agree with the concept of "clicking away without explicitly selecting something" should also be considered as "canceling the operation".
Since the current rewrite of ui v3.0 (follow updates in #1289) does have the aim of dropping the support of headlessui in favour of radix-vue I would suggest to close this issue and comment on the upstream one.


Develop build infrastructure

Develop spack based build infrastructure.

The goal is to reproduce the ACCESS-OM2 current build answers, so this will require https://github.com/ACCESS-NRI/reproducibility/issues/3 to achieve

Reminder:
https://cmake.org/cmake/help/latest/module/CPack.html

Reminder:
https://github.com/fortran-lang/fpm

Discussion - If we do NOT use shared libraries, what's the practical difference between using Spack Vs CMake's FetchContent

We need to support methods to easily locate and use ACCESS-NRI developed software, including models.
https://github.com/ACCESS-NRI/model_builder/issues/3
Spack has sophisticated support for modulefiles, and has it's own environment system.

Notes
https://spack.readthedocs.io/en/latest/repositories.html

Spack comes with thousands of built-in package recipes in var/spack/repos/builtin/. This is a package repository – a directory that Spack searches when it needs to find a package by name. You may need to maintain packages for restricted, proprietary or experimental software separately from the built-in repository. Spack allows you to configure local repositories using either the repos.yaml or the spack repo command.

Notes
https://spack.readthedocs.io/en/latest/packaging_guide.html

While the built-in build systems should meet your needs for the vast majority of packages, some packages provide custom build scripts. This guide is intended for the following use cases:

Packaging software with its own custom build system
Adding support for new build systems

Notes
https://spack.readthedocs.io/en/latest/build_settings.html#package-requirements

You can provide a more-relaxed constraint and allow the concretizer to choose between a set of options using any_of or one_of:

any_of is a list of specs. One of those specs must be satisfied and it is also allowed for the concretized spec to match more than one. In the above example, that means you could build openmpi+cuda%gcc, openmpi~cuda%clang or openmpi~cuda%gcc (in the last case, note that both specs in the any_of for openmpi are satisfied).

one_of is also a list of specs, and the final concretized spec must match exactly one of them. In the above example, that means you could build mpich+cuda or mpich+rocm but not mpich+cuda+rocm (note the current package definition for mpich already includes a conflict, so this is redundant but still demonstrates the concept).

Notes
https://spack.readthedocs.io/en/latest/build_settings.html#package-preferences
packages:
  opencv:
    compiler<EMAIL_ADDRESS>    variants: +debug
  gperftools:
    version: [2.2, 2.4, 2.3]
  all:
    compiler<EMAIL_ADDRESS>'gcc@4.6:', intel, clang, pgi]
    target: [sandybridge]
    providers:
      mpi: [mvapich2, mpich, openmpi]

Notes
https://discourse.cmake.org/t/how-to-generate-pc-pkg-config-file-supporting-prefix-of-the-cmake-install/4109

Notes
https://cmake.org/cmake/help/latest/command/add_library.html#object-libraries

Notes
If we want to statically link Parallelio, then Spack's Parallelio package file needs:
define("BUILD_SHARED_LIBS", False)

Notes
The "libs" attribute (e.g. spec["parallelio"].libs) only searches for shared libraries:
https://spack.readthedocs.io/en/latest/_modules/spack/build_systems/python.html
    @property
    def libs(self):
        """Discover libraries in platlib."""

        # Remove py- prefix in package name
        library = "lib" + self.spec.name[3:].replace("-", "?")
        root = self.prefix.join(self.spec["python"].package.platlib)

        for shared in [True, False]:
            libs = fs.find_libraries(library, root, shared=shared, recursive=True)
            if libs:
                return libs

        msg = "Unable to recursively locate {} libraries in {}"
        raise NoLibrariesError(msg.format(self.spec.name, root))

Notes
How to create a variant:
diff --git a/var/spack/repos/builtin/packages/parallelio/package.py b/var/spack/repos/builtin/packages/parallelio/package.py
index 91c2e340d5..b01005b39d 100644
--- a/var/spack/repos/builtin/packages/parallelio/package.py
+++ b/var/spack/repos/builtin/packages/parallelio/package.py
@@ -29,6 +29,7 @@ class Parallelio(CMakePackage):
     variant(
         "fortran", default=True, description="enable fortran interface (requires netcdf fortran)"
     )
+    variant("shared", default=True, description="enable shared library")

     depends_on("mpi")
     depends_on("netcdf-c +mpi", type="link")

@@ -51,7 +52,6 @@ def cmake_args(self):
             define("NetCDF_C_PATH", spec["netcdf-c"].prefix),
             define("USER_CMAKE_MODULE_PATH", join_path(src, "cmake")),
             define("GENF90_PATH", join_path(src, "genf90")),
-            define("BUILD_SHARED_LIBS", True),
             define("PIO_ENABLE_EXAMPLES", False),
         ]
         if spec.satisfies("+pnetcdf"):
@@ -72,6 +72,7 @@ def cmake_args(self):
                 define_from_variant("PIO_ENABLE_TIMING", "timing"),
                 define_from_variant("PIO_ENABLE_LOGGING", "logging"),
                 define_from_variant("PIO_ENABLE_FORTRAN", "fortran"),
+                define_from_variant("BUILD_SHARED_LIBS", "shared"),
             ]
         )
         return args

How to depend on a variant:
    depends_on("parallelio~pnetcdf~timing~shared")

Notes
lib/spack/spack/spec.py:
def _libs_default_handler(descriptor, spec, cls):
    """Default handler when looking for the 'libs' attribute.

    Tries to search for ``lib{spec.name}`` recursively starting from
    ``spec.package.home``. If ``spec.name`` starts with ``lib``, searches for
    ``{spec.name}`` instead.
...
    # Variable 'name' is passed to function 'find_libraries', which supports
    # glob characters. For example, we have a package with a name 'abc-abc'.
    # Now, we don't know if the original name of the package is 'abc_abc'
    # (and it generates a library 'libabc_abc.so') or 'abc-abc' (and it
    # generates a library 'libabc-abc.so'). So, we tell the function
    # 'find_libraries' to give us anything that matches 'libabc?abc' and it
    # gives us either 'libabc-abc.so' or 'libabc_abc.so' (or an error)
    # depending on which one exists (there is a possibility, of course, to
    # get something like 'libabcXabc.so, but for now we consider this
    # unlikely).

If we want to statically link Parallelio

I realised I was incorrect when I stated (IRL) that libraries were statically linked in ACCESS-OM2. The libraries that were compiled were statically linked, but other dependencies like netcdf and OpenMPI are dynamically linked (see below for details).
Now we're building most dependencies with spack, so it isn't clear if they should be statically or dynamically linked.
We could do it on a case-by-case basis, e.g. it is desirable to have OpenMPI dynamically linked, as it allows for, say, a container built on a GitHub runner with the correct base OS to also run on gadi and swap in the gadi OpenMPI library by altering the appropriate environment variables for the container.
Probably better is to have the same policy as before, to statically link those libraries for which we have source code responsibility, e.g. mom5, cice5, yatm and libaccessom2, and dynamically link the rest. This represents a change for PIO I believe, but I could be wrong. This is fine I think, to make it consistent with how the underlying libraries (netcdf-c, netcdf-fortran) are also linked.

```$ ldd /g/data/ik11/inputs/access-om2/bin/fms_ACCESS-OM_730f0bf_libaccessom2_d750b4b.x
	linux-vdso.so.1 (0x00007ffe68f26000)
	libnetcdf.so.18 => /apps/netcdf/4.7.4/lib/libnetcdf.so.18 (0x00001553349b4000)
	libnetcdff.so.7 => /apps/netcdf/4.7.4/lib/Intel/libnetcdff.so.7 (0x00001553343ec000)
	libmpi_usempif08_Intel.so.40 => /apps/openmpi/4.0.2/lib/libmpi_usempif08_Intel.so.40 (0x0000155334166000)
	libmpi_usempi_ignore_tkr_Intel.so.40 => /apps/openmpi/4.0.2/lib/libmpi_usempi_ignore_tkr_Intel.so.40 (0x0000155333f4d000)
	libmpi_mpifh_Intel.so.40 => /apps/openmpi/4.0.2/lib/libmpi_mpifh_Intel.so.40 (0x0000155333cb5000)
	libmpi.so.40 => /apps/openmpi/4.0.2/lib/libmpi.so.40 (0x0000155333981000)
	libm.so.6 => /lib64/libm.so.6 (0x00001553335ff000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00001553333df000)
	libc.so.6 => /lib64/libc.so.6 (0x000015533301a000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000155332e02000)
	libdl.so.2 => /lib64/libdl.so.2 (0x0000155332bfe000)
	libmfhdf.so.0 => /apps/hdf4/4.2.14/lib/libmfhdf.so.0 (0x00001553329d3000)
	libdf.so.0 => /apps/hdf4/4.2.14/lib/libdf.so.0 (0x0000155332721000)
	libsz.so.2 => /apps/szip/2.1.1/lib/libsz.so.2 (0x000015533250d000)
	libtirpc.so.3 => /lib64/libtirpc.so.3 (0x00001553322da000)
	libjpeg.so.62 => /lib64/libjpeg.so.62 (0x0000155332071000)
	libhdf5_hl.so.100 => /apps/hdf5/1.10.5/lib/libhdf5_hl.so.100 (0x0000155331e4e000)
	libhdf5.so.103 => /apps/hdf5/1.10.5/lib/libhdf5.so.103 (0x0000155331880000)
	libz.so.1 => /lib64/libz.so.1 (0x0000155331668000)
	libcurl.so.4 => /lib64/libcurl.so.4 (0x00001553313da000)
	libifport.so.5 => /apps/intel-ct/2019.3.199/compiler/lib/libifport.so.5 (0x00001553311ac000)
	libifcoremt.so.5 => /apps/intel-ct/2019.3.199/compiler/lib/libifcoremt.so.5 (0x0000155330e17000)
	libimf.so => /apps/intel-ct/2019.3.199/compiler/lib/libimf.so (0x0000155330877000)
	libsvml.so => /apps/intel-ct/2019.3.199/compiler/lib/libsvml.so (0x000015532eed3000)
	libintlc.so.5 => /apps/intel-ct/2019.3.199/compiler/lib/libintlc.so.5 (0x000015532ec61000)
	libopen-rte.so.40 => /apps/openmpi-mofed5.5-pbs2021.1/4.0.2/lib/libopen-rte.so.40 (0x000015532e9a2000)
	libopen-pal.so.40 => /apps/openmpi-mofed5.5-pbs2021.1/4.0.2/lib/libopen-pal.so.40 (0x000015532e6cd000)
	librt.so.1 => /lib64/librt.so.1 (0x000015532e4c5000)
	libutil.so.1 => /lib64/libutil.so.1 (0x000015532e2c1000)
	libhwloc.so.15 => /lib64/libhwloc.so.15 (0x000015532e071000)
	/lib64/ld-linux-x86-64.so.2 (0x0000155334d37000)
	libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x000015532de1c000)
	libkrb5.so.3 => /lib64/libkrb5.so.3 (0x000015532db32000)
	libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x000015532d91b000)
	libcom_err.so.2 => /lib64/libcom_err.so.2 (0x000015532d717000)
	libnghttp2.so.14 => /lib64/libnghttp2.so.14 (0x000015532d4f0000)
	libidn2.so.0 => /lib64/libidn2.so.0 (0x000015532d2d2000)
	libssh.so.4 => /lib64/libssh.so.4 (0x000015532d063000)
	libpsl.so.5 => /lib64/libpsl.so.5 (0x000015532ce52000)
	libssl.so.1.1 => /lib64/libssl.so.1.1 (0x000015532cbbe000)
	libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x000015532c6d5000)
	libldap-2.4.so.2 => /lib64/libldap-2.4.so.2 (0x000015532c486000)
	liblber-2.4.so.2 => /lib64/liblber-2.4.so.2 (0x000015532c276000)
	libbrotlidec.so.1 => /lib64/libbrotlidec.so.1 (0x000015532c069000)
	libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x000015532be58000)
	libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x000015532bc54000)
	libresolv.so.2 => /lib64/libresolv.so.2 (0x000015532ba3d000)
	libunistring.so.2 => /lib64/libunistring.so.2 (0x000015532b6bc000)
	libsasl2.so.3 => /lib64/libsasl2.so.3 (0x000015532b49e000)
	libbrotlicommon.so.1 => /lib64/libbrotlicommon.so.1 (0x000015532b27d000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x000015532b053000)
	libcrypt.so.1 => /lib64/libcrypt.so.1 (0x000015532ae2a000)
	libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x000015532aba6000)
```
$ ldd /g/data/ik11/inputs/access-om2/bin/cice_auscom_360x300_24p_edcfa6f_libaccessom2_d750b4b.exe
	linux-vdso.so.1 (0x00007ffd68bab000)
	libmpi.so.40 => /apps/openmpi/4.0.2/lib/libmpi.so.40 (0x0000146f99c3f000)
	libnetcdf_ompi3.so.18 => /apps/netcdf/4.7.4p/lib/libnetcdf_ompi3.so.18 (0x0000146f998af000)
	libnetcdff_ompi3_Intel.so.7 => /apps/netcdf/4.7.4p/lib/libnetcdff_ompi3_Intel.so.7 (0x0000146f992dc000)
	libmpi_usempif08_Intel.so.40 => /apps/openmpi/4.0.2/lib/libmpi_usempif08_Intel.so.40 (0x0000146f99056000)
	libmpi_usempi_ignore_tkr_Intel.so.40 => /apps/openmpi/4.0.2/lib/libmpi_usempi_ignore_tkr_Intel.so.40 (0x0000146f98e3d000)
	libmpi_mpifh_Intel.so.40 => /apps/openmpi/4.0.2/lib/libmpi_mpifh_Intel.so.40 (0x0000146f98ba5000)
	libm.so.6 => /lib64/libm.so.6 (0x0000146f98823000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x0000146f98603000)
	libdl.so.2 => /lib64/libdl.so.2 (0x0000146f983ff000)
	libc.so.6 => /lib64/libc.so.6 (0x0000146f9803a000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000146f97e22000)
	libopen-rte.so.40 => /apps/openmpi-mofed5.5-pbs2021.1/4.0.2/lib/libopen-rte.so.40 (0x0000146f97b63000)
	libopen-pal.so.40 => /apps/openmpi-mofed5.5-pbs2021.1/4.0.2/lib/libopen-pal.so.40 (0x0000146f9788e000)
	librt.so.1 => /lib64/librt.so.1 (0x0000146f97686000)
	libutil.so.1 => /lib64/libutil.so.1 (0x0000146f97482000)
	libz.so.1 => /lib64/libz.so.1 (0x0000146f9726a000)
	libhwloc.so.15 => /lib64/libhwloc.so.15 (0x0000146f9701a000)
	libmfhdf.so.0 => /apps/hdf4/4.2.14/lib/libmfhdf.so.0 (0x0000146f96def000)
	libdf.so.0 => /apps/hdf4/4.2.14/lib/libdf.so.0 (0x0000146f96b3d000)
	libtirpc.so.3 => /lib64/libtirpc.so.3 (0x0000146f9690a000)
	libjpeg.so.62 => /lib64/libjpeg.so.62 (0x0000146f966a1000)
	libhdf5_hl_ompi3.so.100 => /apps/hdf5/1.10.5p/lib/libhdf5_hl_ompi3.so.100 (0x0000146f96479000)
	libhdf5_ompi3.so.103 => /apps/hdf5/1.10.5p/lib/libhdf5_ompi3.so.103 (0x0000146f95e67000)
	libsz.so.2 => /apps/szip/2.1.1/lib/libsz.so.2 (0x0000146f95c53000)
	libcurl.so.4 => /lib64/libcurl.so.4 (0x0000146f959c5000)
	libifport.so.5 => /apps/intel-ct/2019.3.199/compiler/lib/libifport.so.5 (0x0000146f95797000)
	libifcoremt.so.5 => /apps/intel-ct/2019.3.199/compiler/lib/libifcoremt.so.5 (0x0000146f95402000)
	libimf.so => /apps/intel-ct/2019.3.199/compiler/lib/libimf.so (0x0000146f94e62000)
	libsvml.so => /apps/intel-ct/2019.3.199/compiler/lib/libsvml.so (0x0000146f934be000)
	libintlc.so.5 => /apps/intel-ct/2019.3.199/compiler/lib/libintlc.so.5 (0x0000146f9324c000)
	/lib64/ld-linux-x86-64.so.2 (0x0000146f99f73000)
	libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x0000146f92ff7000)
	libkrb5.so.3 => /lib64/libkrb5.so.3 (0x0000146f92d0d000)
	libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x0000146f92af6000)
	libcom_err.so.2 => /lib64/libcom_err.so.2 (0x0000146f928f2000)
	libnghttp2.so.14 => /lib64/libnghttp2.so.14 (0x0000146f926cb000)
	libidn2.so.0 => /lib64/libidn2.so.0 (0x0000146f924ad000)
	libssh.so.4 => /lib64/libssh.so.4 (0x0000146f9223e000)
	libpsl.so.5 => /lib64/libpsl.so.5 (0x0000146f9202d000)
	libssl.so.1.1 => /lib64/libssl.so.1.1 (0x0000146f91d99000)
	libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x0000146f918b0000)
	libldap-2.4.so.2 => /lib64/libldap-2.4.so.2 (0x0000146f91661000)
	liblber-2.4.so.2 => /lib64/liblber-2.4.so.2 (0x0000146f91451000)
	libbrotlidec.so.1 => /lib64/libbrotlidec.so.1 (0x0000146f91244000)
	libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x0000146f91033000)
	libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x0000146f90e2f000)
	libresolv.so.2 => /lib64/libresolv.so.2 (0x0000146f90c18000)
	libunistring.so.2 => /lib64/libunistring.so.2 (0x0000146f90897000)
	libsasl2.so.3 => /lib64/libsasl2.so.3 (0x0000146f90679000)
	libbrotlicommon.so.1 => /lib64/libbrotlicommon.so.1 (0x0000146f90458000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x0000146f9022e000)
	libcrypt.so.1 => /lib64/libcrypt.so.1 (0x0000146f90005000)
	libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x0000146f8fd81000)

$ ldd /g/data/ik11/inputs/access-om2/bin/yatm_d750b4b.exe
	linux-vdso.so.1 (0x00007ffce930e000)
	libnetcdff.so.7 => /apps/netcdf/4.7.4/lib/Intel/libnetcdff.so.7 (0x000014e642f86000)
	libmpi_usempif08_Intel.so.40 => /apps/openmpi/4.0.2/lib/libmpi_usempif08_Intel.so.40 (0x000014e642d00000)
	libmpi_usempi_ignore_tkr_Intel.so.40 => /apps/openmpi/4.0.2/lib/libmpi_usempi_ignore_tkr_Intel.so.40 (0x000014e642ae7000)
	libmpi_mpifh_Intel.so.40 => /apps/openmpi/4.0.2/lib/libmpi_mpifh_Intel.so.40 (0x000014e64284f000)
	libmpi.so.40 => /apps/openmpi/4.0.2/lib/libmpi.so.40 (0x000014e64251b000)
	libm.so.6 => /lib64/libm.so.6 (0x000014e642199000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x000014e641f79000)
	libdl.so.2 => /lib64/libdl.so.2 (0x000014e641d75000)
	libc.so.6 => /lib64/libc.so.6 (0x000014e6419b0000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000014e641798000)
	libmfhdf.so.0 => /apps/hdf4/4.2.14/lib/libmfhdf.so.0 (0x000014e64156d000)
	libdf.so.0 => /apps/hdf4/4.2.14/lib/libdf.so.0 (0x000014e6412bb000)
	libsz.so.2 => /apps/szip/2.1.1/lib/libsz.so.2 (0x000014e6410a7000)
	libtirpc.so.3 => /lib64/libtirpc.so.3 (0x000014e640e74000)
	libjpeg.so.62 => /lib64/libjpeg.so.62 (0x000014e640c0b000)
	libhdf5_hl.so.100 => /apps/hdf5/1.10.5/lib/libhdf5_hl.so.100 (0x000014e6409e8000)
	libhdf5.so.103 => /apps/hdf5/1.10.5/lib/libhdf5.so.103 (0x000014e64041a000)
	libz.so.1 => /lib64/libz.so.1 (0x000014e640202000)
	libcurl.so.4 => /lib64/libcurl.so.4 (0x000014e63ff74000)
	libnetcdf.so.18 => /apps/netcdf/4.7.4/lib/libnetcdf.so.18 (0x000014e63fbf1000)
	libifport.so.5 => /apps/intel-ct/2019.3.199/compiler/lib/libifport.so.5 (0x000014e63f9c3000)
	libifcoremt.so.5 => /apps/intel-ct/2019.3.199/compiler/lib/libifcoremt.so.5 (0x000014e63f62e000)
	libimf.so => /apps/intel-ct/2019.3.199/compiler/lib/libimf.so (0x000014e63f08e000)
	libsvml.so => /apps/intel-ct/2019.3.199/compiler/lib/libsvml.so (0x000014e63d6ea000)
	libintlc.so.5 => /apps/intel-ct/2019.3.199/compiler/lib/libintlc.so.5 (0x000014e63d478000)
	libopen-rte.so.40 => /apps/openmpi-mofed5.5-pbs2021.1/4.0.2/lib/libopen-rte.so.40 (0x000014e63d1b9000)
	libopen-pal.so.40 => /apps/openmpi-mofed5.5-pbs2021.1/4.0.2/lib/libopen-pal.so.40 (0x000014e63cee4000)
	librt.so.1 => /lib64/librt.so.1 (0x000014e63ccdc000)
	libutil.so.1 => /lib64/libutil.so.1 (0x000014e63cad8000)
	libhwloc.so.15 => /lib64/libhwloc.so.15 (0x000014e63c888000)
	/lib64/ld-linux-x86-64.so.2 (0x000014e64354e000)
	libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x000014e63c633000)
	libkrb5.so.3 => /lib64/libkrb5.so.3 (0x000014e63c349000)
	libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x000014e63c132000)
	libcom_err.so.2 => /lib64/libcom_err.so.2 (0x000014e63bf2e000)
	libnghttp2.so.14 => /lib64/libnghttp2.so.14 (0x000014e63bd07000)
	libidn2.so.0 => /lib64/libidn2.so.0 (0x000014e63bae9000)
	libssh.so.4 => /lib64/libssh.so.4 (0x000014e63b87a000)
	libpsl.so.5 => /lib64/libpsl.so.5 (0x000014e63b669000)
	libssl.so.1.1 => /lib64/libssl.so.1.1 (0x000014e63b3d5000)
	libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x000014e63aeec000)
	libldap-2.4.so.2 => /lib64/libldap-2.4.so.2 (0x000014e63ac9d000)
	liblber-2.4.so.2 => /lib64/liblber-2.4.so.2 (0x000014e63aa8d000)
	libbrotlidec.so.1 => /lib64/libbrotlidec.so.1 (0x000014e63a880000)
	libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x000014e63a66f000)
	libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x000014e63a46b000)
	libresolv.so.2 => /lib64/libresolv.so.2 (0x000014e63a254000)
	libunistring.so.2 => /lib64/libunistring.so.2 (0x000014e639ed3000)
	libsasl2.so.3 => /lib64/libsasl2.so.3 (0x000014e639cb5000)
	libbrotlicommon.so.1 => /lib64/libbrotlicommon.so.1 (0x000014e639a94000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x000014e63986a000)
	libcrypt.so.1 => /lib64/libcrypt.so.1 (0x000014e639641000)
	libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x000014e6393bd000)

Probably better is to have the same policy as before, to statically link those libraries for which we have source code responsibility, e.g. mom5, cice5, yatm and libaccessom2, and dynamically link the rest. This represents a change for PIO I believe, but I could be wrong. This is fine I think, to make it consistent with how the underlying libraries (netcdf-c, netcdf-fortran) are also linked.

Now that I know how to switch between the two types of dependencies in Spack, we can do either option at build time. However, the implications at runtime may need some attention.

Notes
When calling find_libraries(), don't include the ".a" or ".so" of the filename:
lib/spack/llnl/util/filesystem.py:
def find_libraries(libraries, root, shared=True, recursive=False, runtime=True):
...
    # List of libraries we are searching with suffixes
    libraries = ["{0}.{1}".format(lib, suffix) for lib in libraries for suffix in suffixes]

Notes
Software model for "compiler as dependencies" #31357

One method to package and deploy ACCESS-OM is to make a simple bundle spack package
https://spack.readthedocs.io/en/latest/build_systems/bundlepackage.html
Then the this repo could contain a spack.yaml file defining an environment with a specific version of the access-om package.
Alternatively the spack.yaml could just contain all the individual packages that make up access-om2. The advantage of making it a bundle is that it could be installed independently for development purposes.

Notes
working_dir(dirname, kwargs)
This is a Python Context Manager that makes it easier to work with subdirectories in builds. You use this with the Python with statement to change into a working directory, and when the with block is done, you change back to the original directory. Think of it as a safe pushd / popd combination, where popd is guaranteed to be called at the end, even if exceptions are thrown.

Notes
How to install a package and define dependency and compiler versions:
# spack install<EMAIL_ADDRESS>^openmpi<EMAIL_ADDRESS>^netcdf-c<EMAIL_ADDRESS>^netcdf-fortran<EMAIL_ADDRESS>

Installing Perl package in Spack with an old Intel compiler (2019.5.281)

You may need:

--- a/var/spack/repos/builtin/packages/perl/package.py
+++ b/var/spack/repos/builtin/packages/perl/package.py
@@ -179,6 +179,10 @@ def patch(self):
         os.chmod("lib/perlbug.t", 0o644)
         filter_file("!/$B/", "! (/(?:$B|PATH)/)", "lib/perlbug.t")

+        with when("intel@2019.5.281"):
+            os.chmod("hints/linux.sh", 0o644)
+            filter_file("-we147 -mp -no-gcc", "", "hints/linux.sh")
+
     @classmethod
     def determine_version(cls, exe):
         perl = spack.util.executable.Executable(exe)

The build may still fail at:

LD_LIBRARY_PATH=$TMPDIR/spack-stage/spack-stage-perl-5.36.0-afam6a742eef5t7bjezfue2kl7tmnwiy/spack-src:/apps/intel-ct/2019.5.281/compiler/lib  ./perl -Ilib -I. -f pod/buildtoc -q
Cwd.c: loadable library and perl binaries are mismatched (got handshake key 0xeb80080, needed 0xde00080)
make: *** [makefile:417: pod/perltoc.pod] Error 1

You can use an external precompiled perl binary instead:

--- a/etc/spack/defaults/packages.yaml
+++ b/etc/spack/defaults/packages.yaml
@@ -62,3 +62,8 @@ packages:
     permissions:
       read: world
       write: user
+  perl:
+    externals:
+    - spec<EMAIL_ADDRESS>+      prefix: /usr
+    buildable: false

How do we want to refer to ACCESS-OM versions? Clearly there is a "major version" (ACCESS-OM2, ACCESS-OM3), but below that we have no standard for versioning.
Options:

Semantic versioning

This is designed with a particular model of software development in mind. The first requirement is

Software using Semantic Versioning MUST declare a public API. This API could be declared in the code itself or exist strictly in documentation. However it is done, it SHOULD be precise and comprehensive.

I'm unsure how well this fits a complex scientific model such as this. The API in this case would be the configuration which is used to run the model. Regardless this is largely the default method of versioning.

Calendar versioning

Calendar versioning has a venerable history. I personally think it is probably a better fit for a project likes ACCESS-OM2 which lacks the cohesive nature of many traditional software projects. It has the advantage of encoding useful information in the version about how old it is. It is supported in spack.

Hash-based versioning

Probably best avoided. It doesn't provide much semantic meaning, and calendar versioning can easily be mapped on to specific commit hashes with spack or via tags in the repo.

Calendar sounds good!
I would use YYYY.MM.MICRO, so it looks like this:
ACCESS-OM3-2023.03.002
This is the version of ACCESS-OM3 initially released in March 2023, with micro version 2. Note the use of three digits for the micro version, so that it's not mistaken for the day.
You can also introduce a release tag for the Spack built stuff. For example:
ACCESS-OM3-2023.03.002-1
This is the same version of ACCESS-OM3 as before, but build with Spack, release 1. Why the Spack release version? So that you can signal that the way in which the package is built has changed, but not the sources. So ACCESS-OM3-2023.03.002-2 would correspond to exactly the same sources, but with some changes in how it was compiled.

I think I am in agreement with @micaeljtoliveira, and thanks for providing the detailed justification.
I can see the logic of versioning the spack release, but I don't know how much utility it has in practice. If we changed the way spack built the model the spack hash would change, signalling it was a different build, and so would be reinstalled.
My thought was that a model configuration would target a specific build of the model to ensure reproducibility. It would not automatically pick up a new build (with a new hash) unless it was deliberately changed to do so.

You can think of the -1 as a tag. Just like one uses tags to map to commits hashes, you can use this release version as a mapping to the executable hash. The reason to use it is exactly the same as you mentioned above: the hash doesn't provide much semantic meaning.

To complement the above, it's a standard practice to have this sort of "tag" or "release" number in packages (e.g. rpms, debs, etc). Among other things, it allows to easily determine what is the newest version of a given package, even when there are no changes from upstream.

To complement the above, it's a standard practice to have this sort of "tag" or "release" number in packages (e.g. rpms, debs, etc). Among other things, it allows to easily determine what is the newest version of a given package, even when there are no changes from upstream.

Yes, I'm familiar with them from conda, and you've convinced me I think, but I have two reservations:

2023.03.002-1 is a helluva version number
Not sure about the order of operation. I think we'd need to trigger a build or concretize step to see that it resolved to a different hash, then bump the release number, which itself would result in resolving to a different hash.

Regarding the 2., we could always trigger a new build by bumping the release number, regardless if there was any other changes to underlying build infrastructure.

@aidanheerdegen I'm afraid I'm not sure how this would work in practice. Or to put it in another way, where exactly this release number would be introduced. In rpm's or deb's (not sure about conda, as I'm not very familiar with it), those numbers are introduced in the corresponding spec files, which live in a place separated from the actual build tool.
So maybe one should only introduce it if it becomes obvious at some point that it's useful and there's an obvious place to put them.
Actually, how are you planning to "release" the spack built binaries?

Hi @aidanheerdegen , @micaeljtoliveira , @echus ,
https://github.com/ACCESS-NRI/libaccessom2/commit/aac70d70f43e5f1ac809e3ba222a2aa2308c5175:
project(yatm VERSION 2.0.202212 LANGUAGES Fortran)

https://github.com/ACCESS-NRI/cice5/commit/01b1c202fa89c6da7dd9a1e6c48eab06b728e1d2:
set version='202301'

mom5 still has set new_hash=git rev-parse HEAD`` in exp/update_version.csh

Notes
https://spack-tutorial.readthedocs.io/en/latest/tutorial_spack_scripting.html

The spack python command gives you access to all of Spack’s internal APIs, allowing you to write more complex queries, for example.

I think a consistent versioning system would be really valuable (for documentation in papers, amongst other things), and is long overdue. Up to this point I've made disorganised attempts via tags, and had a 2.0 in mind but never quite got around to tagging it.
I think I like the date approach. My only concern is that I've been using matching tags for the codebase https://github.com/COSIMA/access-om2/tags and all the 6 supported configurations, e.g. https://github.com/COSIMA/01deg_jra55_iaf/tags as these typically need to be kept in sync, e.g. if new namelist parameters or diagnostics are introduced, and using the same tag for all repos makes this obvious. How would that sort of synchronised tagging across repos work with dates, e.g. if they're updated on different days (e.g. a bugfix in one of the repos) but should be thought of as parts of the same release?

If we increment all tags if any of the related repos is updated, then different tags would refer to the same commit in all the unchanged repos. I guess that's ok, but kinda confusing.

Alternatively, maybe the config tags could be compound, and consist of the codebase tag with a suffix that applies just to the config? That would make the relationships clear and allow tags to increment more independently, but the tags (version numbers) could get quite large.

spack has support for sophisticated dependency specification. Specifically forthis case it is possible to use depends_on in an access-om package to require specific versions of dependencies for the version of access-om being built.
As an example ,from the acts package file:
    depends_on("autodiff @0.5.11:0.5.99", when="@1.2:16 +autodiff")
    depends_on("autodiff @0.6:", when="@17: +autodiff")

which says for all versions of this package from 1.2 to 16.* use autodiff versions 0.5.11 to 0.5.99. For versions 17 and above use autodiff >= 0.6.
So it shouldn't be necessary to tag everything the same.
@micaeljtoliveira asked

Actually, how are you planning to "release" the spack built binaries?

Ay, and there's the rub. See above https://github.com/ACCESS-NRI/ACCESS-OM/issues/6#issuecomment-1272670089
The answer is: TBD.

ACCESS-OM2 bundle package:
https://github.com/ACCESS-NRI/spack_packages/blob/development/packages/access-om2/package.py

Notes
Spack v0.20.1 built openmpi 4.0.2 tripped over  https://github.com/spack/spack/issues/30906 when testing Spack v0.20.1 built access-om2. The workaround was to use a newer version of openmpi. e.g. 4.1.5 avoided the problem.

Using the system openmpi as an "external" from Spack appears to trip over the non-standard directory structure on gadi. e.g. /apps/openmpi/4.0.2/lib/Intel/libmpi_usempif08.so

What is the error message for this? It is valuable to have it explicitly documented in case there is a similar error again (likely).

Notes
$ /apps/openmpi/4.1.5/bin/ompi_info -a
...

  Configure command line: '--prefix=/apps/openmpi-mofed5.8-pbs2021.1/4.1.5' '--disable-dependency-tracking' '--disable-heterogeneous' '--disable-ipv6' '--enable-orterun-prefix-by-default' '--enable-sparse-groups' '--enable-mpi-fortran' '--enable-mpi-cxx' '--enable-mpi1-compatibility' '--enable-shared' '--disable-static' '--disable-wrapper-rpath' '--disable-wrapper-runpath' '--disable-mpi-java' '--enable-mca-static' '--enable-hwloc-pci' '--enable-visibility' '--with-zlib' '--with-cuda=/apps/cuda/12.0.0' '--without-pmi' '--with-ucx=/apps/ucx/1.14.0' '--without-verbs' '--without-verbs-usnic' '--without-portals4' '--without-ugni' '--without-usnic' '--without-ofi' '--without-cray-xpmem' '--with-xpmem' '--with-knem=/opt/knem' '--with-cma' '--without-x' '--without-memkind' '--without-cray-pmi' '--without-alps' '--without-flux-pmi' '--without-udreg' '--without-lsf' '--without-slurm' '--with-tm=/opt/pbs/default' '--without-sge' '--without-moab' '--without-singularity' '--without-fca' '--with-hcoll=/apps/hcoll/4.8.3220' '--with-ucc=/apps/ucc/1.1.0' '--without-ime' '--without-pvfs2' '--with-lustre' '--with-io-romio-flags=--with-file-system=lustre+ufs' '--without-psm' '--without-psm2' '--without-mxm' '--disable-mem-debug' '--disable-mem-profile' '--disable-picky' '--disable-debug' '--disable-timing' '--disable-event-debug' '--disable-memchecker' '--disable-pmix-timing' '--with-mpi-param-check=runtime' '--with-oshmem-param-check=never' '--without-valgrind'

Notes
@dsroberts recommended trying these openmpi configure/build flags to improve Spack openmpi on gadi support:
--with-ucx=/apps/ucx/1.14.0
--with-ucc=/apps/ucc/1.1.0
--with-lustre
--with-tm=/opt/pbs/default
--with-hcoll=/apps/hcoll/4.8.3220  not sure if required)

Notes
Spack has relevant variants:
    variant(
        "fabrics",
        values=disjoint_sets(
            ("auto",),
            (
                "psm",
                "psm2",
                "verbs",
                "mxm",
                "ucx",
                "ofi",
                "fca",
                "hcoll",
                "xpmem",
                "cma",
                "knem",
            ),  # shared memory transports
        ).with_non_feature_values("auto", "none"),
        description="List of fabrics that are enabled; " "'auto' lets openmpi determine",
    )
...
    variant("lustre", default=False, description="Lustre filesystem library support")
...
    variant(
        "schedulers",
        values=disjoint_sets(
            ("auto",), ("alps", "lsf", "tm", "slurm", "sge", "loadleveler")
        ).with_non_feature_values("auto", "none"),
        description="List of schedulers for which support is enabled; "
        "'auto' lets openmpi determine",
    )

Using the system openmpi as an "external" from Spack appears to trip over the non-standard directory structure on gadi. e.g. /apps/openmpi/4.0.2/lib/Intel/libmpi_usempif08.so

     13    -- Check for working Fortran compiler: /apps/openmpi/4.0.2/bin/mpif90 - broken
  >> 14    CMake Error at $HOME/spack-upstream.git/opt/spack/linux-rocky8-x86_64/intel-2019.5.281/cmake-3.26.3-rsetek2vcrc7sm4kcoobqg25z75czm4u/share/cmake-3.26/Modules/CMakeTestFortranCompiler.cmake:59 (message):
     15      The Fortran compiler
     16
     17        "/apps/openmpi/4.0.2/bin/mpif90"
     18
     19      is not able to compile a simple test program.
     20         31        /apps/openmpi/4.0.2/bin/mpif90 CMakeFiles/cmTC_050e5.dir/testFortranCompiler.f.o -o cmTC_050e5
  >> 32    /bin/ld: cannot find -lmpi_usempif08
  >> 33        /bin/ld: cannot find -lmpi_usempi_ignore_tkr
  >> 34        /bin/ld: cannot find -lmpi_mpifh
  >> 35        gmake[1]: *** [CMakeFiles/cmTC_050e5.dir/build.make:99: cmTC_050e5] Error 1

Thanks @rxy900 for sending me your packages.yaml. I added the following lines to my packages.yaml to avoid the error:
+  gmake:
+    externals:
+    - spec<EMAIL_ADDRESS>+      prefix: /usr
+  pkgconf:
+    externals:
+    - spec<EMAIL_ADDRESS>+      prefix: /usr
+  diffutils:
+    externals:
+    - spec<EMAIL_ADDRESS>+      prefix: /usr
+    buildable: false
+  cmake:
+    externals:
+    - spec<EMAIL_ADDRESS>+      prefix: /apps/cmake/3.24.2
+      modules:
+      - cmake/3.24.2
+    buildable: true
+  openmpi:
+    externals:
+    - spec<EMAIL_ADDRESS>+      prefix: /apps/openmpi/4.0.2
+      modules:
+      - openmpi/4.0.2
+    buildable: true
+  mpi:
+    buildable: false

Using the system openmpi 4.1.5 as an "external" from Spack:
$ spack install libaccessom2<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>1 error found in build log:
     5     -- Detecting Fortran compiler ABI info - done
     6     -- Check for working Fortran compiler: /g/data/tm70/hj1810/spack-sys
           tem-openmpi.git/lib/spack/env/intel/ifort - skipped
     7     ---- PROJECT_VERSION: '2.0.202212'
     8     ---- FQDN: gadi-login-08.gadi.nci.org.au
     9     ---- NUMBER_OF_LOGICAL_CORES: 48
     10    -- Could NOT find MPI_Fortran (missing: MPI_Fortran_F77_HEADER_DIR M
           PI_Fortran_MODULE_DIR) (found version "3.1")
  >> 11    CMake Error at /apps/cmake/3.24.2/share/cmake-3.24/Modules/FindPacka
           geHandleStandardArgs.cmake:230 (message):
     12      Could NOT find MPI (missing: MPI_Fortran_FOUND) (found version "3.
           1")
     13    Call Stack (most recent call first):
     14      /apps/cmake/3.24.2/share/cmake-3.24/Modules/FindPackageHandleStand
           ardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
     15      /apps/cmake/3.24.2/share/cmake-3.24/Modules/FindMPI.cmake:1835 (fi
           nd_package_handle_standard_args)
     16      CMakeLists.txt:34 (find_package)
     17

How have you defined the openmpi external? Does it include a module load?
I don't think the CMake is very robust here
https://github.com/COSIMA/libaccessom2/blob/a227a616fac7a7d4795d2ebcca750292b6004683/CMakeLists.txt#L19-L32
Worth sprinkling some pc-config magic over it? Or is that just another rabbit hole?

I presume the above is due to the non-standard directory structure that is not understood by CMake. e.g. /apps/openmpi/4.1.5/lib/Intel/
Module loading is enabled in etc/spack/defaults/packages.yaml:
    - spec<EMAIL_ADDRESS>      prefix: /apps/openmpi/4.1.5
      modules:
      - openmpi/4.1.5

LD_LIBRARY_PATH=/apps/openmpi/4.1.5/lib:/apps/openmpi/4.1.5/lib/profilers:/apps/intel-ct/2021.6.0/compiler/linux/compiler/lib/intel64_lin:/apps/intel-ct/2021.6.0/compiler/linux/lib/x64:/apps/intel-ct/2021.6.0/compiler/linux/lib; export LD_LIBRARY_PATH

Maybe you could try to set these variables
export CC=mpicc
export FC=mpif90
export CXX=mpicxx
On 4 Jul 2023, at 4:21 pm, Harshula Jayasuriya<EMAIL_ADDRESS>wrote:
I presume the above is due to the non-standard directory structure that is not understood by CMake. e.g. /apps/openmpi/4.1.5/lib/Intel/
Module loading is enabled in etc/spack/defaults/packages.yaml:
- spec<EMAIL_ADDRESS>  prefix: /apps/openmpi/4.1.5
  modules:
  - openmpi/4.1.5

LD_LIBRARY_PATH=/apps/openmpi/4.1.5/lib:/apps/openmpi/4.1.5/lib/profilers:/apps/intel-ct/2021.6.0/compiler/linux/compiler/lib/intel64_lin:/apps/intel-ct/2021.6.0/compiler/linux/lib/x64:/apps/intel-ct/2021.6.0/compiler/linux/lib; export LD_LIBRARY_PATH
—
Reply to this email directly, view it on GitHubhttps://github.com/ACCESS-NRI/ACCESS-OM/issues/6#issuecomment-1619570711, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AESFTSUV4CXKUW7DKPAW4WTXOOY53ANCNFSM6AAAAAAQHMDQLY.
You are receiving this because you were mentioned.Message ID: @.***>

Hi @rxy900 ,
Same error:
$ export CC=mpicc
$ export FC=mpif90
$ export CXX=mpicxx
$ spack install libaccessom2<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>
1 error found in build log:
     5     -- Detecting Fortran compiler ABI info - done
     6     -- Check for working Fortran compiler: $SPACKDIR/lib/spack/env/intel/ifort - skipped
     7     ---- PROJECT_VERSION: '2.0.202212'
     8     ---- FQDN: gadi-login-08.gadi.nci.org.au
     9     ---- NUMBER_OF_LOGICAL_CORES: 48
     10    -- Could NOT find MPI_Fortran (missing: MPI_Fortran_F77_HEADER_DIR M
           PI_Fortran_MODULE_DIR) (found version "3.1")
  >> 11    CMake Error at /apps/cmake/3.24.2/share/cmake-3.24/Modules/FindPacka
           geHandleStandardArgs.cmake:230 (message):
     12      Could NOT find MPI (missing: MPI_Fortran_FOUND) (found version "3.
           1")
     13    Call Stack (most recent call first):
     14      /apps/cmake/3.24.2/share/cmake-3.24/Modules/FindPackageHandleStand
           ardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
     15      /apps/cmake/3.24.2/share/cmake-3.24/Modules/FindMPI.cmake:1835 (fi
           nd_package_handle_standard_args)
     16      CMakeLists.txt:34 (find_package)
     17

The above environment variables are likely overridden by Spack:
spack-build-env-mods.txt:
export CC=$SPACKDIR/lib/spack/env/intel/icc;
export FC=$SPACKDIR/lib/spack/env/intel/ifort;
export CXX=$SPACKDIR/lib/spack/env/intel/icpc;

spack-build-env.txt:
CC=$SPACKDIR/lib/spack/env/intel/icc; export CC
FC=$SPACKDIR/lib/spack/env/intel/ifort; export FC
CXX=$SPACKDIR/lib/spack/env/intel/icpc; export CXX

@ScottWales mentioned this last Friday:
https://git.nci.org.au/bom/ngm/spack-environments/-/blob/jopa/repos/bom-ngm/packages/nci-openmpi/package.py

Notes
Convert the rpath setting into a runpath setting:
$ chrpath -c <binary>

@ScottWales mentioned this last Friday: https://git.nci.org.au/bom/ngm/spack-environments/-/blob/jopa/repos/bom-ngm/packages/nci-openmpi/package.py

For context - cmake gets the library and include paths by inspecting mpicc -show etc. which can be modified by setting OMPI_ prefixed environment variables (see man mpicc). The nci-openmpi spack package sets these variables when compiling packages that depend on it, it's intended to be used as a preinstalled system package in place of the normal openmpi package.

There are three scenarios of Spack built ACCESS-OM2 being discussed here:

Built with Spack built openmpi and run with Spack built openmpi.
Built with Spack built openmpi and run with system openmpi.
Built with system openmpi and run with system openmpi.

To avoid confusion, I have created issue https://github.com/ACCESS-NRI/ACCESS-OM/issues/13 to document the second scenario.

Hi @ScottWales, What are you thoughts about adding nci-openmpi to https://github.com/ACCESS-NRI/spack_packages ? If you would like to, please create a PR.

Installation instructions v1

Copy the ACCESS-NRI Spack package repository:

$ git clone https://github.com/ACCESS-NRI/spack_packages.git
$ ACCESS-FULLPATH=$(readlink -f spack_packages)

Copy the Spack repository and setup environment variables (https://spack.readthedocs.io/en/latest/getting_started.html):

$ git clone -c feature.manyFiles=true https://github.com/spack/spack.git --branch releases/v0.20
$ cd spack
$ . share/spack/setup-env.sh

Add the ACCESS-NRI Spack package repository to the Spack repository:

$ spack repo add $ACCESS-FULLPATH

Enable compilers:

$ module load intel-compiler/2019.5.281
$ spack compiler find
$ spack compiler list
$ ACCESS_COMPILER=$(spack compiler list | grep '^intel.*281$')

Edit ~/.spack/linux/compilers.yaml and enable automatic module loading of intel-compiler/2019.5.281:

      modules: [intel-compiler/2019.5.281]

Edit ~/.spack/packages.yaml and add:

packages:
  all:
    providers:
      mpi: [nci-openmpi, openmpi]
  perl:
    externals:
    - spec<EMAIL_ADDRESS>      prefix: /usr
    buildable: false
  nci-openmpi:
    externals:
    - spec<EMAIL_ADDRESS>      prefix: /apps/openmpi/4.0.2
      modules:
      - openmpi/4.0.2
    buildable: false

[OPTIONAL] Edit ~/.spack/concretizer.yaml and add:

concretizer:
  targets:
    granularity: generic

Build ACCESS-OM2:

$ spack install access-om2<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>%$ACCESS_COMPILER

It's the Intel 2019.5.281 compiler that represents itself as <IP_ADDRESS>1 (i.e. Not a Spack bug!):
$ module load intel-compiler/2019.5.281
$ ifort --version
ifort (IFORT) <IP_ADDRESS>1 20190815
Copyright (C) 1985-2019 Intel Corporation.  All rights reserved.

$ module load intel-compiler/2021.5.0
$ ifort --version
ifort (IFORT) 2021.5.0 20211109
Copyright (C) 1985-2021 Intel Corporation.  All rights reserved.

Installation instructions on Gadi v1

Thanks @harshula. No criticism, but I think we really want to get to a point where people can use spack to build their own versions of packages without having to clone spack.
I guess something like this, or a development of this
https://forum.access-hive.org.au/t/shared-access-spack-configuration/227/

@aidanheerdegen You should open a separate issue for that instead adding additional requests on a closed issue.