SVT: Application keeps on restarting in Dev mode without making any changes to the app

I have the ACME application - that I imported in my workspace and start using the Start menu of the Liberty Dashboard.
After starting the application - I see that the app was started, but it keeps on restarting and updating, even though I do not make any changes to my application or the configuration.
c:\eclipse-workspace\acme-ee10\acme-ee\AcmeWebEjbEar>mvn liberty:dev
I get some of the following output:
[INFO] [AUDIT   ] CWWKF0012I: The server installed the following features: [appClientSupport-2.0, appSecurity-5.0, cdi-4.0, connectors-2.1, distributedMap-1.0, enterpriseBeans-4.0, enterpriseBeansHome-4.0, enterpriseBeansLite-4.0, enterpriseBeansPersistentTimer-4.0, enterpriseBeansRemote-4.0, expressionLanguage-5.0, federatedRegistry-1.0, jdbc-4.2, jndi-1.0, json-1.0, jsonb-3.0, jsonp-2.1, jwt-1.0, ldapRegistry-3.0, localConnector-1.0, mdb-4.0, messaging-3.1, messagingClient-3.0, messagingSecurity-3.0, messagingServer-3.0, microProfile-6.0, monitor-1.0, mpConfig-3.0, mpFaultTolerance-4.0, mpHealth-4.0, mpJwt-2.1, mpMetrics-5.0, mpOpenAPI-3.1, mpRestClient-3.0, mpTelemetry-1.0, pages-3.1, persistence-3.1, persistenceContainer-3.1, restfulWS-3.1, restfulWSClient-3.1, servlet-6.0, ssl-1.0, transportSecurity-1.0, xmlBinding-4.0, xmlWS-4.0].
[INFO] [AUDIT   ] CWWKF0011I: The defaultServer server is ready to run a smarter planet. The defaultServer server started in 57.247 seconds.
[INFO] CWWKM2015I: Match number: 1 is [11/9/23, 14:18:25:609 PST] 00000034 com.ibm.ws.kernel.feature.internal.FeatureManager            A CWWKF0011I: The defaultServer server is ready to run a smarter planet. The defaultServer server started in 57.247 seconds..
[INFO] ************************************************************************
[INFO] *    Liberty is running in dev mode.
[INFO] *        Automatic generation of features: [ Off ]
[INFO] *        h - see the help menu for available actions, type 'h' and press Enter.
[INFO] *        q - stop the server and quit dev mode, press Ctrl-C or type 'q' and press Enter.
[INFO] *
[INFO] *    Liberty server port information:
[INFO] *        Liberty server HTTP port: [ 9080 ]
[INFO] *        Liberty debug port: [ 7777 ]
[INFO] ************************************************************************

[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityEJB3JAXWS/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityEJB3JAXWS_CDI/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityWeb/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS20/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS11M1/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS11M2/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityPojoWSes/
[INFO] [AUDIT   ] CWWKZ0001I: Application AcmeWebEjbEar started in 64.139 seconds.
[INFO] [WARNING ] Settings: Could not parse struts.locale setting, substituting default VM locale

However, if I use the Liberty Tools to do the same thing - I see that the app doesn't start, and immediately, and it keeps on restarting
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/ibm/api/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/jwt/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/health/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/metrics/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/openapi/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/openapi/ui/
[INFO] [AUDIT   ] CWWKZ0022W: Application AcmeWebEjbEar has not started in 30.002 seconds.
[INFO] [AUDIT   ] CWWKF0012I: The server installed the following features: [appClientSupport-2.0, appSecurity-5.0, cdi-4.0, connectors-2.1, distributedMap-1.0, enterpriseBeans-4.0, enterpriseBeansHome-4.0, enterpriseBeansLite-4.0, enterpriseBeansPersistentTimer-4.0, enterpriseBeansRemote-4.0, expressionLanguage-5.0, federatedRegistry-1.0, jdbc-4.2, jndi-1.0, json-1.0, jsonb-3.0, jsonp-2.1, jwt-1.0, ldapRegistry-3.0, localConnector-1.0, mdb-4.0, messaging-3.1, messagingClient-3.0, messagingSecurity-3.0, messagingServer-3.0, microProfile-6.0, monitor-1.0, mpConfig-3.0, mpFaultTolerance-4.0, mpHealth-4.0, mpJwt-2.1, mpMetrics-5.0, mpOpenAPI-3.1, mpRestClient-3.0, mpTelemetry-1.0, pages-3.1, persistence-3.1, persistenceContainer-3.1, restfulWS-3.1, restfulWSClient-3.1, servlet-6.0, ssl-1.0, transportSecurity-1.0, xmlBinding-4.0, xmlWS-4.0].
[INFO] [AUDIT   ] CWWKF0011I: The defaultServer server is ready to run a smarter planet. The defaultServer server started in 48.562 seconds.
[INFO] CWWKM2015I: Match number: 1 is [11/9/23, 14:25:13:565 PST] 0000002a com.ibm.ws.kernel.feature.internal.FeatureManager            A CWWKF0011I: The defaultServer server is ready to run a smarter planet. The defaultServer server started in 48.562 seconds..
[INFO] ************************************************************************
[INFO] *    Liberty is running in dev mode.
[INFO] *        Automatic generation of features: [ Off ]
[INFO] *        h - see the help menu for available actions, type 'h' and press Enter.
[INFO] *        q - stop the server and quit dev mode, press Ctrl-C or type 'q' and press Enter.
[INFO] *
[INFO] *    Liberty server port information:
[INFO] *        Liberty server HTTP port: [ 9080 ]
[INFO] *        Liberty server HTTPS port: [ 9443 ]
[INFO] *        Liberty debug port: [ 7777 ]
[INFO] ************************************************************************
.
.
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityEJB3JAXWS/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityEJB3JAXWS_CDI/
[INFO] Running unit tests for acme-ee10 ...
Downloading from sonatype-nexus-snapshots: https://oss.sonatype.org/content/repositories/snapshots/org/apache/maven/plugins/maven-surefire-plugin/maven-metadata.xml
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityWeb/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS20/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS11M1/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS11M2/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityPojoWSes/
[INFO] No tests to run.
[INFO] [WARNING ] Settings: Could not parse struts.locale setting, substituting default VM locale
[INFO] Rendering content with org.apache.maven.skins:maven-default-skin:jar:1.3 skin.
[INFO] Unit tests for acme-ee10 finished.
[INFO]
[INFO] Waiting up to 30 seconds to find the application start up or update message...
[INFO] CWWKM2010I: Searching for (CWWKZ0001I:|CWWKZ0003I:) in C:\eclipse-workspace\acme-ee10\acme-ee\AcmeWebEjbEar\target\liberty\wlp\usr\servers\defaultServer\logs\messages.log. This search will timeout after 30 seconds.
[INFO] [AUDIT   ] CWWKZ0001I: Application AcmeWebEjbEar started in 122.664 seconds.
[INFO] CWWKM2015I: Match number: 1 is [11/9/23, 14:26:45:938 PST] 00000031 com.ibm.ws.app.manager.AppMessageHelper                      A CWWKZ0001I: Application AcmeWebEjbEar started in 122.664 seconds..
.
.
[INFO] [AUDIT   ] CWWKZ0003I: The application AcmeWebEjbEar updated in 108.886 seconds.
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://mum1.fyre.ibm.com:9080/AnnuityPojoWSes/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS11M2/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS11M1/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS20/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityWeb/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityEJB3JAXWS_CDI/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityEJB3JAXWS/
[INFO] [AUDIT   ] CWWKZ0009I: The application AcmeWebEjbEar has stopped successfully.

It goes through this cycle a couple of times before the application is finally available. During these times - if I try to access the app url - I get Context Root not found.
Finally - when I see this message:
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityEJB3JAXWS/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityEJB3JAXWS_CDI/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityWeb/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS20/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS11M1/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS11M2/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityPojoWSes/
[INFO] [WARNING ] Settings: Could not parse struts.locale setting, substituting default VM locale
[INFO] [AUDIT   ] CWWKZ0003I: The application AcmeWebEjbEar updated in 106.687 seconds.

then the app is finally stable and I can access the app url.

The prev errors were on Eclipse.
I do see the same errors in VScode as well.
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AcmeAnnuityWeb/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AnnuityJAXRS20/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AnnuityJAXRS11M1/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AnnuityJAXRS11M2/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AnnuityPojoWSes/
4 warnings
.
.
INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://localhost:9080/AnnuityPojoWSes/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://localhost:9080/AnnuityJAXRS11M2/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://localhost:9080/AnnuityJAXRS11M1/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://localhost:9080/AnnuityJAXRS20/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://localhost:9080/AcmeAnnuityWeb/
[INFO] [AUDIT   ] CWWKZ0009I: The application AcmeWebEjbEar has stopped successfully.
.
.
4 warnings
[INFO] AcmeAnnuityWeb source compilation was successful.
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AcmeAnnuityWeb/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AnnuityJAXRS20/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AnnuityJAXRS11M1/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AnnuityJAXRS11M2/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AnnuityPojoWSes/
.
.

INFO] [AUDIT   ] CWWKZ0003I: The application AcmeWebEjbEar updated in 0.863 seconds.
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://localhost:9080/AnnuityPojoWSes/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://localhost:9080/AnnuityJAXRS11M2/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://localhost:9080/AnnuityJAXRS11M1/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://localhost:9080/AnnuityJAXRS20/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://localhost:9080/AcmeAnnuityWeb/
[INFO] [AUDIT   ] CWWKZ0009I: The application AcmeWebEjbEar has stopped successfully.
[INFO] [WARNING ] SRVE9967W: The manifest class path commons-dbcp-1.2.2.jar can not be found in jar file file:/Users/rumanahaque/Documents/Acme_ee10/acme-ee/AcmeAnnuityCommon/target/classes/ or its parent.
[INFO] [WARNING ] SRVE9967W: The manifest class path commons-pool-1.3.jar can not be found in jar file file:/Users/rumanahaque/Documents/Acme_ee10/acme-ee/AcmeAnnuityCommon/target/classes/ or its parent.
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AcmeAnnuityWeb/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AnnuityJAXRS20/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AnnuityJAXRS11M1/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AnnuityJAXRS11M2/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://localhost:9080/AnnuityPojoWSes/
[INFO] [WARNING ] CWNEN0046W: The jakarta.jms.ConnectionFactory type specified on the resource-ref, resource-env-ref, or message-destination-ref with the jms/ACMEAnnuityJMSConnectionFactory name in the AcmeAnnuityWeb.war module could not be loaded. Compatibility type checking will not be performed for this resource reference.
[INFO] [ERROR   ] SRVE0321E: The [struts2] filter did not load during start up.
[INFO] Filter [struts2]: org.apache.struts2.dispatcher.FilterDispatcher was found, but is missing another required class.
[INFO]
[INFO] [AUDIT   ] CWWKZ0003I: The application AcmeWebEjbEar updated in 0.643 seconds.

Could be related to #699? Although Rumana did say she did not see the same behavior from the command line. Need to try and recreate from the cmd line ourselves to see.

Update about command line. I just retried, and I see the same behavior from the command line as well. The issue is where I run the mvn liberty:dev command from.
If I run within the root - i.e - c:\eclipse-workspace\acme-ee10\acme-ee>mvn liberty:dev - I see the same problem as I see using the Liberty Tools Start - where it keeps on recompiling.
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityEJB3JAXWS/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityEJB3JAXWS_CDI/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityWeb/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS20/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS11M1/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS11M2/
[INFO] [AUDIT   ] CWWKT0016I: Web application available (default_host): http://mum1.fyre.ibm.com:9080/AnnuityPojoWSes/
[INFO] [AUDIT   ] CWWKZ0003I: The application AcmeWebEjbEar updated in 22.712 seconds.
[INFO] [WARNING ] Settings: Could not parse struts.locale setting, substituting default VM locale
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://mum1.fyre.ibm.com:9080/AnnuityPojoWSes/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS11M2/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS11M1/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://mum1.fyre.ibm.com:9080/AnnuityJAXRS20/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityWeb/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityEJB3JAXWS_CDI/
[INFO] [AUDIT   ] CWWKT0017I: Web application removed (default_host): http://mum1.fyre.ibm.com:9080/AcmeAnnuityEJB3JAXWS/
[INFO] [AUDIT   ] CWWKZ0009I: The application AcmeWebEjbEar has stopped successfully.

However - if I run within the project AcmeWebEjbEar
c:\eclipse-workspace\acme-ee10\acme-ee\AcmeWebEjbEar>mvn liberty:dev
then it starts it only once and does not recompile.

I've been experimenting with the CargoTracker Jakarta sample:  https://github.com/eclipse-ee4j/cargotracker/
There seems to be a similar "thrashing" behavior where the app continually restarts upon update.
I accounted for the issue: https://github.com/OpenLiberty/ci.maven/issues/699  by building a local snapshot and hard-coding disabling the initial compile (the one we do AFTER the compile mojo runs).   While this simplified the initial startup, I still experienced the same thing after later making an update once the app had been up and started.
There seems to be something app-related in play here.   The cargo tracker uses EJB persistent timers and its JPA runs a startup script... not sure if either of those are related.

@rumanaHaque can you please try to recreate with this trace:  <logging traceSpecification="*=info:applications=all  and please capture both:

the terminal/console log (mvn output)
a server dump /.../wlp/bin/server dump    (or I guess just the 'logs' dir within but might as well ask for the whole dump)

I saw something similar w/ the cargotracker app...there I suspect it is some failures related to messaging & MDB init causing the thrashing..combined with the fact that restarting some of these messaging components forces an app recycle.     I'm not too familiar with this from the runtime perspective.. so possibly we'd need a couple rounds of tracing to get to the bottom of this.  Thank you !

I added the server trace string as you mentioned in my server.xml file-
<logging traceSpecification="*=info:applications=all"  maxFileSize="100" maxFiles="20" traceFileName="server_trace.log" />
I did an mvn clean, and started my server using the Liberty Tools dashboard.
I did not see any trace files generated.
These are the logs for the server after I started, and it also has the console.txt file where I tried to capture most of the console output.
logs.zip
I also got the server dump as you requested - by running this command.
c:\IBM\WAS\profiles\AppSrv02>C:\eclipse-workspace\acme-ee10\acme-ee\AcmeWebEjbEar\target\liberty\wlp\bin\server dump
Dumping server defaultServer.
Server defaultServer is not running.
Server defaultServer dump complete in C:\eclipse-workspace\acme-ee10\acme-ee\AcmeWebEjbEar\target\liberty\wlp\usr\servers\defaultServer\defaultServer.dump-23.12.11_10.32.56.zip.

Here is the server dump.
defaultServer.dump-23.12.11_10.32.56.zip

It looks to me like the <logging> element is not enabled in the server dump.  That would be a big help.  Could you please try again with the trace enabled?

Hi @scottkurz - Yes - sorry I had put the trace string in a diff server.xml in my workspace.
Here are the log files after I enabled trace in the correct server.xml.
logs.zip

Discussed this more in DXDI call today: https://github.com/orgs/OpenLiberty/projects/23/views/3?pane=issue&itemId=50131096
I'm going to share some sketched out, incomplete thoughts here, though this doesn't even include detailed analysis of the captured trace, just some guesses based on a preliminary look at the logs captured back in Dec.
THOUGHTS
I wonder if this issue raises a weakness with the design assumption that we don't need an mbean notification on app update, (like we used in WDT/LDT).
This would potentially allow us to do a single app restart rather than multiple ones.
That said, I wouldn't think the app would just keep restarting if this were the core issue.  I'd think it'd eventually settle down...but this is just a guess.
Looking into it a bit, it seems WDT builds a set of changed files and invokes the FileNotificationMBean passing this set, after which the Liberty runtime then (re)starts the app.
I also wonder if bumping up the polling rate could reduce the chance for this kind of situation.  E.g. if we switched from 500ms to 5s would the mbean not be as important?
<applicationMonitor pollingRate="5s"/>
CONCLUSION
That's all for now, I'm not asking anyone to rerun anything, just sharing some of my own notes on the subject here.

We encountered the same problem with our apps going through several restarts at the initial liberty:dev execution (@scottkurz please note that Rumana does not speak of continually restarting but instead says "It goes through this cycle a couple of times before the application is finally available").
I took the suggestion from your previous comment and experimented with the applicationMonitor pollingRate. Setting it to more than what is required for the application startup time plus all the module's 'source compilation was successful/tests compilation was successful' calls indeed prevents the multiple restarts.
This however will make the liberty:dev experience a lot less responsive to code changes. The mbean notification mechanism would be my preferred solution, but perhaps an extra one letter command to restart the application is an easy to implement alternative.
Ofcourse, getting rid of the initial compile calls as described in #699 would also help.

@m-schutte-ohra-nl, though I don't have any further updates on this issue, I just wanted to thank you for sharing your experience here.

@scottkurz This is still a real problem for us, can we expect progress to be made on this issue ?


Improve testing with stats and errors per test section

Add some basic test stats to the test runner output for both SimpleReport and JUnitReport:

number of tests that pass/fail
% of success
number of assertions within each test that pass / fail

Thanks for the PR! FYI: I probably won't get around to reviewing this until after our 0.26 release is out in early June.

@bioball no worries! I actually submitted the PR too early :S  I'm re-doing it all because (1) I didn't realize I had a bunch of tests failing and (2) the failures and other stuff made me re-think it all.
I'm currently thinking about how to best approach things... I might close the PR and re-open a new one once I have something that 100% works. E.g. I thought I was going to be able to change some of the XML format, thinking it was a bit freeform and I'm now learning about the different XML schemas for unit testing 😅  Still not sure which one Pkl is using and/or if I can change it to add more of the information I'd like to have, etc.
Anyway, TL;DR no rush :)  Thanks!!

OK, I think I finally got it done :) I've refactored a bunch of stuff and fixed my original commit, here's the summary:

TestRunner: separated the running of each "section" of a test into its own try-catch so that we can evaluate each section separately even if another section failed (e.g. evaluate all examples even if one test in "facts" throws an exception). I've added tests that exercise this "new feature".

TestResults: refactored it a bit so that TestResults now has the three sections and the old TestResults becomes TestSectionResults. Also, TestSectionResults now has only one error, since that's what we get when there's an exception evaluating the Pkl code.

SimpleReport:

Added a "stats line" to the module and section levels that reports how many tests / assertions pass/fail. Note that, when reporting errors, there's no stats for the section since the error is all the info we get. Similarly, when examples fail, there's no stats because each example is converted into its own test so there are no failed assertions to report, it's all-or-nothing.
For the examples converted to tests, when multiple examples share the same name I've also added a counter ("# 1" and so on) so that it's easier to identify which one is failing.

JUnitReport: fixed the reporting of failures as it wasn't consistent with "tests": the tests were the number of tests that we run but "failures" were the number of assertions that failed.

Here's some outputs that show these new features:

Some facts pass, some fail and some examples pass, with stats:

module test1 ❌ 66.7% pass [2 passed, 1 failed] (file:///private/tmp/wut/test1.pkl, line 1)
  facts ❌ 0.0% pass [0 passed, 1 failed]
    foo ❌ 50.0% pass [1 passed, 1 failed]
      10 == 11 ❌ (file:///private/tmp/wut/test1.pkl, line 6)
  examples ✅ 100.0% pass [2 passed]
    user 0✍
    user 1✍

Facts throws an error but now, we can still evaluate examples passing and failing:

module test ❌ 33.3% pass [1 passed, 2 failed] (file:///tmp/test.pkl, line 1)
  facts ❌
    Error:
    –– Pkl Error ––
    exception1

    9 | throw("exception1")
        ^^^^^^^^^^^^^^^^^^^
    at test#facts["error1"][#1] (file:///tmp/test.pkl, line 9)

    3 | facts {
        ^^^^^^^
    at test#facts (file:///tmp/test.pkl, line 3)
  examples ❌ 50.0% pass [1 passed, 1 failed]
    user 0 ✅
    user 1 #0 ❌
      (file:///tmp/test.pkl, line 25)
      Expected: (file:///tmp/test.pkl-expected.pcf, line 9)
      new {
        name = "Pigeon"
        age = 41
      }
      Actual: (file:///tmp/test.pkl-actual.pcf, line 9)
      new {
        name = "Pigeon"
        age = 40
      }

Ah, so I don't forget... I've been trying to find out if there's an XSD to validate the JUnitReport and I eventually found Jenkins' xUnit plugin that lists a bunch of supported tools. In that list, I saw it mentions JUnit support for two schemas: Ant junit and Maven Surefire.
I checked both and Maven Surefire is the closest to the XML JUnitReport produces... however, it does not validate against the XSD (many elements are missing required attributes).
Is there a tool that loads the XML report that could serve as a validator of sorts? :-?

I've tried many times to look for a schema, but as far as I can tell, there's no real schema for JUnit reports. And, the many tools that create JUnit reports all differ in minor ways.
Tools like Jenkins that accept JUnit-style reports tend to just make a best-effort attempt to parse them, so, we just do the best we can to be conformant to what's out there.

Arrrg CI failed because of linting! I could have sworn I did a final gw spotlessApply before commiting :(  Anyway, I've just re-committed it, hopefully it'll all be fine now!

Tests failed for  gradle-check-jdk17-windows!? 😮  Any help to repro these would be very welcomed, I've read the CI output and I'm not too sure what's failing / what's going on... especially since the tests seem to be the same tests that pass other CI runs and pass on my laptop! :-?

Regarding JUnit XML reports; this README is a good writeup.
As for the CI failure;
> Task :pkl-gradle:test

TestsTest > JUnit reports with error() FAILED
    java.nio.file.NoSuchFileException: C:\Users\circleci\AppData\Local\Temp\junit15390432245720982242\build\test.xml
        at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
        at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
        at java.base/sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:234)
        at java.base/java.nio.file.Files.newByteChannel(Files.java:379)
        at java.base/java.nio.file.Files.newByteChannel(Files.java:431)
        at java.base/java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:420)
        at java.base/java.nio.file.Files.newInputStream(Files.java:159)
        at kotlin.io.path.PathsKt__PathReadWriteKt.readText(PathReadWrite.kt:155)
        at kotlin.io.path.PathsKt__PathReadWriteKt.readText$default(PathReadWrite.kt:154)
        at org.pkl.gradle.TestsTest.JUnit reports with error(TestsTest.kt:260)

TestsTest > full example with error() FAILED
    java.lang.AssertionError:
    Expecting actual:
      "> Task :evalTest FAILED
    module test ? 25.0% pass [1 passed, 3 failed] (file:///file, line x)
      facts ?
        Error:
         Pkl Error
        exception

        9 | throw("exception")
            ^^^^^^^^^^^^^^^^^^
        at test#facts["error"][#1] (file:///file, line x)

        3 | facts {
            ^^^^^^^
        at test#facts (file:///file, line x)
      examples ? 33.3% pass [1 passed, 2 failed]
        user 0 ?
        user 1 #0 ?
          (file:///file, line x)
          Expected: (file:///file, line x)
          new {
            name = "Pigeon"
            age = 40
          }
          Actual: (file:///file, line x)
          new {
            name = "Pigeon"
            age = 41
          }
        user 1 #1 ?
          (file:///file, line x)
          Expected: (file:///file, line x)
          new {
            name = "Parrot"
            age = 35
          }
          Actual: (file:///file, line x)
          new {
            name = "Welma"
            age = 35
          }

    FAILURE: Build failed with an exception.

    * What went wrong:
    Execution failed for task ':evalTest'.
    > Tests failed.

    * Try:
    > Run with --info or --debug option to get more log output.
    > Run with --scan to get full insights.
    > Get more help at https://help.gradle.org.

    * Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':evalTest'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:130)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:128)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:116)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:331)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:318)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:314)
        at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:80)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:314)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:303)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
    Caused by: Tests failed.
        at org.pkl.cli.CliTestRunner.evalTest(CliTestRunner.kt:100)
        at org.pkl.cli.CliTestRunner.doRun(CliTestRunner.kt:39)
        at org.pkl.commons.cli.CliCommand.run(CliCommand.kt:39)
        at org.pkl.gradle.task.TestTask.doRunTask(TestTask.java:44)
        at org.pkl.gradle.task.ModulesTask.runTask(ModulesTask.java:155)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
        at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:244)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:229)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:212)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:195)
        at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:162)
        at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:105)
        at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:44)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:59)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:56)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:56)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:44)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
        at org.gradle.internal.execution.steps.PreCreateOutputParentsStep.execute(PreCreateOutputParentsStep.java:50)
        at org.gradle.internal.execution.steps.PreCreateOutputParentsStep.execute(PreCreateOutputParentsStep.java:28)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:67)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:37)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:61)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:26)
        at org.gradle.internal.execution.steps.CaptureOutputsAfterExecutionStep.execute(CaptureOutputsAfterExecutionStep.java:67)
        at org.gradle.internal.execution.steps.CaptureOutputsAfterExecutionStep.execute(CaptureOutputsAfterExecutionStep.java:45)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:40)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:29)
        at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:189)
        at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)
        at org.gradle.internal.Either$Right.fold(Either.java:175)
        at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:62)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:46)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:35)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:76)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:54)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:54)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
        at org.gradle.internal.execution.steps.ResolveIncrementalCachingStateStep.executeDelegate(ResolveIncrementalCachingStateStep.java:49)
        at org.gradle.internal.execution.steps.ResolveIncrementalCachingStateStep.executeDelegate(ResolveIncrementalCachingStateStep.java:27)
        at org.gradle.internal.execution.steps.AbstractResolveCachingStateStep.execute(AbstractResolveCachingStateStep.java:71)
        at org.gradle.internal.execution.steps.AbstractResolveCachingStateStep.execute(AbstractResolveCachingStateStep.java:39)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:65)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:36)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:106)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:55)
        at org.gradle.internal.execution.steps.AbstractCaptureStateBeforeExecutionStep.execute(AbstractCaptureStateBeforeExecutionStep.java:64)
        at org.gradle.internal.execution.steps.AbstractCaptureStateBeforeExecutionStep.execute(AbstractCaptureStateBeforeExecutionStep.java:43)
        at org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.executeWithNonEmptySources(AbstractSkipEmptyWorkStep.java:125)
        at org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.execute(AbstractSkipEmptyWorkStep.java:56)
        at org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.execute(AbstractSkipEmptyWorkStep.java:36)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:36)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:23)
        at org.gradle.internal.execution.steps.HandleStaleOutputsStep.execute(HandleStaleOutputsStep.java:75)
        at org.gradle.internal.execution.steps.HandleStaleOutputsStep.execute(HandleStaleOutputsStep.java:41)
        at org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.lambda$execute$0(AssignMutableWorkspaceStep.java:35)
        at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:289)
        at org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.execute(AssignMutableWorkspaceStep.java:31)
        at org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.execute(AssignMutableWorkspaceStep.java:22)
        at org.gradle.internal.execution.steps.ChoosePipelineStep.execute(ChoosePipelineStep.java:40)
        at org.gradle.internal.execution.steps.ChoosePipelineStep.execute(ChoosePipelineStep.java:23)
        at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.lambda$execute$2(ExecuteWorkBuildOperationFiringStep.java:67)
        at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.execute(ExecuteWorkBuildOperationFiringStep.java:67)
        at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.execute(ExecuteWorkBuildOperationFiringStep.java:39)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:46)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:34)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:48)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:35)
        at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:61)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:127)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:116)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:331)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:318)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:314)
        at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:80)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:314)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:303)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)

    BUILD FAILED in 113ms
    1 actionable task: 1 executed
    "
    to start with:
      "> Task :evalTest FAILED
    module test ? 25.0% pass [1 passed, 3 failed] (file:///file, line x)
      facts ?
        Error:
         Pkl Error
        exception

        9 | throw("exception")
            ^^^^^^^^^^^^^^^^^^
        at test#facts["error"][#1] (file:///file, line x)

        3 | facts {
            ^^^^^^^
        at test#facts (file:///file, line x)
      examples ? 33.3% pass [1 passed, 2 failed]
        user 0 ?
        user 1 #0 ?
          (file:///file, line x)
          Expected: (file:///file, line x)
          new {
            name = "Pigeon"
            age = 40
          }
          Actual: (file:///file, line x)
          new {
            name = "Pigeon"
            age = 41
          }
        user 1 #1 ?
          (file:///file, line x)
          Expected: (file:///file, line x)
          new {
            name = "Parrot"
            age = 35
          }
          Actual: (file:///file, line x)
          new {
            name = "Welma"
            age = 35
          }"
        at org.pkl.gradle.TestsTest.full example with error(TestsTest.kt:144)

TestsTest > full example() FAILED
    java.lang.AssertionError:
    Expecting actual:
      "> Task :evalTest FAILED
    pkl: TRACE: 8 = 8 (file:///file, line x)
    module test ? 50.0% pass [3 passed, 3 failed] (file:///file, line x)
      facts ? 66.7% pass [2 passed, 1 failed]
        sum numbers ? 100.0% pass [2 passed]
        divide numbers ? 100.0% pass [2 passed]
        fail ? 0.0% pass [0 passed, 2 failed]
          4 == 9 ? (file:///file, line x)
          "foo" == "bar" ? (file:///file, line x)
      examples ? 33.3% pass [1 passed, 2 failed]
        user 0 ?
        user 1 #0 ?
          (file:///file, line x)
          Expected: (file:///file, line x)
          new {
            name = "Pigeon"
            age = 40
          }
          Actual: (file:///file, line x)
          new {
            name = "Pigeon"
            age = 41
          }
        user 1 #1 ?
          (file:///file, line x)
          Expected: (file:///file, line x)
          new {
            name = "Parrot"
            age = 35
          }
          Actual: (file:///file, line x)
          new {
            name = "Welma"
            age = 35
          }

    FAILURE: Build failed with an exception.

    * What went wrong:
    Execution failed for task ':evalTest'.
    > Tests failed.

    * Try:
    > Run with --info or --debug option to get more log output.
    > Run with --scan to get full insights.
    > Get more help at https://help.gradle.org.

    * Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':evalTest'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:130)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:128)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:116)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:331)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:318)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:314)
        at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:80)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:314)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:303)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
    Caused by: Tests failed.
        at org.pkl.cli.CliTestRunner.evalTest(CliTestRunner.kt:100)
        at org.pkl.cli.CliTestRunner.doRun(CliTestRunner.kt:39)
        at org.pkl.commons.cli.CliCommand.run(CliCommand.kt:39)
        at org.pkl.gradle.task.TestTask.doRunTask(TestTask.java:44)
        at org.pkl.gradle.task.ModulesTask.runTask(ModulesTask.java:155)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
        at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:244)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:229)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:212)
        at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:195)
        at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:162)
        at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:105)
        at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:44)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:59)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:56)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:56)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:44)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
        at org.gradle.internal.execution.steps.PreCreateOutputParentsStep.execute(PreCreateOutputParentsStep.java:50)
        at org.gradle.internal.execution.steps.PreCreateOutputParentsStep.execute(PreCreateOutputParentsStep.java:28)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:67)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:37)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:61)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:26)
        at org.gradle.internal.execution.steps.CaptureOutputsAfterExecutionStep.execute(CaptureOutputsAfterExecutionStep.java:67)
        at org.gradle.internal.execution.steps.CaptureOutputsAfterExecutionStep.execute(CaptureOutputsAfterExecutionStep.java:45)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:40)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:29)
        at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:189)
        at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)
        at org.gradle.internal.Either$Right.fold(Either.java:175)
        at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:62)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:46)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:35)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:76)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:54)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:54)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
        at org.gradle.internal.execution.steps.ResolveIncrementalCachingStateStep.executeDelegate(ResolveIncrementalCachingStateStep.java:49)
        at org.gradle.internal.execution.steps.ResolveIncrementalCachingStateStep.executeDelegate(ResolveIncrementalCachingStateStep.java:27)
        at org.gradle.internal.execution.steps.AbstractResolveCachingStateStep.execute(AbstractResolveCachingStateStep.java:71)
        at org.gradle.internal.execution.steps.AbstractResolveCachingStateStep.execute(AbstractResolveCachingStateStep.java:39)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:65)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:36)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:106)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:55)
        at org.gradle.internal.execution.steps.AbstractCaptureStateBeforeExecutionStep.execute(AbstractCaptureStateBeforeExecutionStep.java:64)
        at org.gradle.internal.execution.steps.AbstractCaptureStateBeforeExecutionStep.execute(AbstractCaptureStateBeforeExecutionStep.java:43)
        at org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.executeWithNonEmptySources(AbstractSkipEmptyWorkStep.java:125)
        at org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.execute(AbstractSkipEmptyWorkStep.java:56)
        at org.gradle.internal.execution.steps.AbstractSkipEmptyWorkStep.execute(AbstractSkipEmptyWorkStep.java:36)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:36)
        at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:23)
        at org.gradle.internal.execution.steps.HandleStaleOutputsStep.execute(HandleStaleOutputsStep.java:75)
        at org.gradle.internal.execution.steps.HandleStaleOutputsStep.execute(HandleStaleOutputsStep.java:41)
        at org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.lambda$execute$0(AssignMutableWorkspaceStep.java:35)
        at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:289)
        at org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.execute(AssignMutableWorkspaceStep.java:31)
        at org.gradle.internal.execution.steps.AssignMutableWorkspaceStep.execute(AssignMutableWorkspaceStep.java:22)
        at org.gradle.internal.execution.steps.ChoosePipelineStep.execute(ChoosePipelineStep.java:40)
        at org.gradle.internal.execution.steps.ChoosePipelineStep.execute(ChoosePipelineStep.java:23)
        at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.lambda$execute$2(ExecuteWorkBuildOperationFiringStep.java:67)
        at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.execute(ExecuteWorkBuildOperationFiringStep.java:67)
        at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.execute(ExecuteWorkBuildOperationFiringStep.java:39)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:46)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:34)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:48)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:35)
        at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:61)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:127)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:116)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:331)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:318)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:314)
        at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:80)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:314)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:303)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)

    BUILD FAILED in 139ms
    1 actionable task: 1 executed
    "
    to start with:
      "> Task :evalTest FAILED
    pkl: TRACE: 8 = 8 (file:///file, line x)
    module test ? 50.0% pass [3 passed, 3 failed] (file:///file, line x)
      facts ? 66.7% pass [2 passed, 1 failed]
        sum numbers ? 100.0% pass [2 passed]
        divide numbers ? 100.0% pass [2 passed]
        fail ? 0.0% pass [0 passed, 2 failed]
          4 == 9 ? (file:///file, line x)
          "foo" == "bar" ? (file:///file, line x)
      examples ? 33.3% pass [1 passed, 2 failed]
        user 0 ?
        user 1 #0 ?
          (file:///file, line x)
          Expected: (file:///file, line x)
          new {
            name = "Pigeon"
            age = 40
          }
          Actual: (file:///file, line x)
          new {
            name = "Pigeon"
            age = 41
          }
        user 1 #1 ?
          (file:///file, line x)
          Expected: (file:///file, line x)
          new {
            name = "Parrot"
            age = 35
          }
          Actual: (file:///file, line x)
          new {
            name = "Welma"
            age = 35
          }"
        at org.pkl.gradle.TestsTest.full example(TestsTest.kt:76)

Gradle Test Executor 17 finished executing tests.

> Task :pkl-gradle:test FAILED

I've rebased the branch and fixed the conflicts. @holzensp thanks for the trace! I'll have a look and see if I can spot what's going on in there 😄

OK, I think I've fixed the tests in Windows.
I've tested it in a Windows 11 VM, I think the issue was with the .trimIndent() not preserving the original line endings.
Hopefully it'll all run fine now!

Wow, I don't know WTH is going on with the commits! I've been trying to update the branch and I think I've messed it up... 😬 gonna try & clean it 😓

@holzensp / @bioball do the CI jobs stay on "pending" until one of you approves it? If so, could you let it run and see if it comes all green?
Thanks!

@holzensp / @bioball looks like all tests have passed! :D can I get a review? 🙏 😄  Thanks!!

Will take a look this week!

@bioball I've pushed a bunch of changes that I think will addressed all your comments.
The only additional thing is that I've also added the assertion count to the the summary line. Let me know what you think!
Here's the output of a "real life project" I'm working on with a bunch of "forced failures" to see how it all would look like:
# Pkl 0.27.0-dev+45738dd (macOS 14.5, native)

module pkl.dockerfile.tests.Dockelfile
  facts
    ✅ VariableName
    ✅ Variable
    ✅ Platform
    ✅ ImageTag
    ❌ Digest
       "0000" is dkl.Digest (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:46:5)
       "sha256:" + "foo".sha256.replaceFirst("f", "g") is dkl.Digest (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:47:5)
    ✅ ImageDigest
    ✅ ImageTagPinned
    ✅ HereDocDelim
    ✅ HereDoc
    ✅ UnixUserGroup
    ✅ OctalDigit
    ✅ UnixPerm
    ✅ UnixSignal
    ✅ Port
    ✅ dfmt
    ✅ HealthcheckDuration
    ✅ HardcodedDirective
    ✅ Directive
    ✅ Arg
    ✅ Image
    ✅ From
    ✅ CommandShell
    ✅ ShellDelim
    ✅ CommandShellGrouped
    ✅ CommandExec
    ✅ Command
    ✅ Shell
    ✅ Cmd
    ✅ Healthcheck
    ✅ Add
    ✅ Copy
    ✅ Run
    ✅ KV
    ✅ KVs
    ✅ Label
    ✅ Env
    ✅ Expose
    ✅ Entrypoint
    ✅ Volume
    ✅ User
    ✅ Workdir
    ✅ OnBuild
    ✅ StopSignal
  examples
    ❌ ex1.Dockerfile
       (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:672:7)
       Expected: (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl-expected.pcf:3:5)
       """
         # syntax=docker/dockerfile:1-labs

         FROM scratcX

         """
       Actual: (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl-actual.pcf:3:5)
       """
         # syntax=docker/dockerfile:1-labs

         FROM scratch

         """
    ✅ ex2.Dockerfile
❌ 95.6% tests pass [2/45 failed], 98.3% asserts pass [3/178 failed]

module pkl.dockerfile.tests.stringify
  facts
    ✅ listify
    ✅ listifyOrNull
    ✅ Stringy
    ✅ Stringies
    ✅ LStringies
    ✅ sPrefix
    ✅ sDelim
    ✅ sKEQVs
✅ 100.0% tests pass [8 passed], 100.0% asserts pass [29 passed]

Thanks!

@bioball what do you think about the last output I pasted? Is it now OK (re. your comment about the output having noise and maybe not being helpful)?
Thanks!

Apologies for dropping the ball here! It's not an excuse, but the LSP work has sucked all my attention.
I think your revised output looks pretty good! There's some merge conflicts to deal with; apologies for that. Can you address those? Once you do, I'll review this again and let's work towards getting this merged 😁

@bioball no worries :) I'll go over the merge conflicts and will update the PR. Thanks a ton!

@bioball OK, I finally managed to rebase my branch against latest main. I've made a few more minor changes that clean the output quite a bit and I changed a couple tests with examples to have a wider test (e.g. one example with one assert that passes and then one example with one assert that passes and another that fails).
I'm going to compile a binary and run the suite of tests for one of my personal projects, forcing a failure, etc, and will paste the output here.
Please review the branch when you have a minute and let me know if there's anything I should change!

OK, I've added back an extra line at the end of the modules but only if there's more than one module in the test. Now, the output matches the previous output but I don't have to modify the expected test outputs.
Here's the "new look", like the last one I pasted but I've removed an additional Error: line before the –– Pkl Error –– because IMHO it was redundant:
# Pkl 0.27.0-dev+c74d92a (macOS 14.6.1, native)

module pkl.dockerfile.tests.Dockelfile
  facts
    ✅ VariableName
    ✅ Variable
    ✅ Platform
    ✅ ImageTag
    ❌ Digest
       ("0000" is dkl.Digest) (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:46:5)
       ("sha256:" + "foo".sha256.replaceFirst("f", "g") is dkl.Digest) (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:47:5)
    ✅ ImageDigest
    ✅ ImageTagPinned
    ✅ HereDocDelim
    ❌ HereDoc
       –– Pkl Error ––
       some error

       130 | throw("some error")
             ^^^^^^^^^^^^^^^^^^^
       at pkl.dockerfile.tests.Dockelfile#facts["HereDoc"][#5] (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:130:5)
    ✅ UnixUserGroup
    ✅ OctalDigit
    ✅ UnixPerm
    ✅ UnixSignal
    ✅ Port
    ✅ dfmt
    ✅ HealthcheckDuration
    ✅ HardcodedDirective
    ✅ Directive
    ✅ Arg
    ✅ Image
    ✅ From
    ✅ CommandShell
    ✅ ShellDelim
    ✅ CommandShellGrouped
    ✅ CommandExec
    ✅ Command
    ✅ Shell
    ✅ Cmd
    ✅ Healthcheck
    ✅ Add
    ✅ Copy
    ✅ Run
    ✅ KV
    ✅ KVs
    ✅ Label
    ✅ Env
    ✅ Expose
    ✅ Entrypoint
    ✅ Volume
    ✅ User
    ✅ Workdir
    ✅ OnBuild
    ✅ StopSignal
  examples
    ❌ ex1.Dockerfile
       (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:674:7)
       Expected: (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl-expected.pcf:3:5)
       """
         # syntax=docker/dockerfile:1-labs

         FROM debian12

         """
       Actual: (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl-actual.pcf:3:5)
       """
         # syntax=docker/dockerfile:1-labs

         FROM scratch

         """
    ✅ ex2.Dockerfile
❌ 93.3% tests pass [3/45 failed], 97.8% asserts pass [4/181 failed]

module pkl.dockerfile.tests.stringify
  facts
    ✅ listify
    ✅ listifyOrNull
    ✅ Stringy
    ✅ Stringies
    ✅ LStringies
    ✅ sPrefix
    ✅ sDelim
    ✅ sKEQVs
✅ 100.0% tests pass [8 passed], 100.0% asserts pass [29 passed]

And this is how it looks with a module-level error:
Error evaluating module /Users/jjmaestro/Work/PKL/pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:
–– Pkl Error ––
Mismatched input: `"`. Expected one of: `{`, `=`, `:`

5 | amendz "pkl:test"
           ^
at Dockelfile (/Users/jjmaestro/Work/PKL/pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:5:8)

module pkl.dockerfile.tests.stringify
  facts
    ✅ listify
    ✅ listifyOrNull
    ✅ Stringy
    ✅ Stringies
    ✅ LStringies
    ✅ sPrefix
    ✅ sDelim
    ✅ sKEQVs
✅ 100.0% tests pass [8 passed], 100.0% asserts pass [29 passed]

OK, I've added back an extra line at the end of the modules but only if there's more than one module in the test. Now, the output matches the previous output but I don't have to modify the expected test outputs.
Here's the "new look", like the last one I pasted but I've removed an additional Error: line before the –– Pkl Error –– because IMHO it was redundant:
# Pkl 0.27.0-dev+c74d92a (macOS 14.6.1, native)

module pkl.dockerfile.tests.Dockelfile
  facts
    ✅ VariableName
    ✅ Variable
    ✅ Platform
    ✅ ImageTag
    ❌ Digest
       ("0000" is dkl.Digest) (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:46:5)
       ("sha256:" + "foo".sha256.replaceFirst("f", "g") is dkl.Digest) (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:47:5)
    ✅ ImageDigest
    ✅ ImageTagPinned
    ✅ HereDocDelim
    ❌ HereDoc
       –– Pkl Error ––
       some error

       130 | throw("some error")
             ^^^^^^^^^^^^^^^^^^^
       at pkl.dockerfile.tests.Dockelfile#facts["HereDoc"][#5] (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:130:5)
    ✅ UnixUserGroup
    ✅ OctalDigit
    ✅ UnixPerm
    ✅ UnixSignal
    ✅ Port
    ✅ dfmt
    ✅ HealthcheckDuration
    ✅ HardcodedDirective
    ✅ Directive
    ✅ Arg
    ✅ Image
    ✅ From
    ✅ CommandShell
    ✅ ShellDelim
    ✅ CommandShellGrouped
    ✅ CommandExec
    ✅ Command
    ✅ Shell
    ✅ Cmd
    ✅ Healthcheck
    ✅ Add
    ✅ Copy
    ✅ Run
    ✅ KV
    ✅ KVs
    ✅ Label
    ✅ Env
    ✅ Expose
    ✅ Entrypoint
    ✅ Volume
    ✅ User
    ✅ Workdir
    ✅ OnBuild
    ✅ StopSignal
  examples
    ❌ ex1.Dockerfile
       (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:674:7)
       Expected: (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl-expected.pcf:3:5)
       """
         # syntax=docker/dockerfile:1-labs

         FROM debian12

         """
       Actual: (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl-actual.pcf:3:5)
       """
         # syntax=docker/dockerfile:1-labs

         FROM scratch

         """
    ✅ ex2.Dockerfile
❌ 93.3% tests pass [3/45 failed], 97.8% asserts pass [4/181 failed]

module pkl.dockerfile.tests.stringify
  facts
    ✅ listify
    ✅ listifyOrNull
    ✅ Stringy
    ✅ Stringies
    ✅ LStringies
    ✅ sPrefix
    ✅ sDelim
    ✅ sKEQVs
✅ 100.0% tests pass [8 passed], 100.0% asserts pass [29 passed]

And this is how it looks with a module-level error:
Error evaluating module pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:
–– Pkl Error ––
Mismatched input: `"`. Expected one of: `{`, `=`, `:`

5 | amendz "pkl:test"
           ^
at Dockelfile (pkl-docker/pkl.dockerfile/tests/Dockelfile.pkl:5:8)

module pkl.dockerfile.tests.stringify
  facts
    ✅ listify
    ✅ listifyOrNull
    ✅ Stringy
    ✅ Stringies
    ✅ LStringies
    ✅ sPrefix
    ✅ sDelim
    ✅ sKEQVs
✅ 100.0% tests pass [8 passed], 100.0% asserts pass [29 passed]

I've rebased the latest main and addressed the commit message rewording.
@bioball There's "one change requested" re. the output of the tests and I believe I've addressed it. Can you mark it as resolved so merging is not blocked?
Also, @bioball or @holzensp, can you unblock CI? The job is on hold, I believe the CI jobs don't run unless authorized? :-?
Thanks!

@bioball cool, thanks! 😄

Follow-up PR: https://github.com/apple/pkl/pull/738

Follow-up PR: #738

I've commented in the new PR, IMHO there's a big change that removes a feature that I added in this PR. Let's discuss in there!


Add flexvolume framwork

Add flexvolume framwork

It is a good example for flex volume ,thanks.
I will merge it and looking forward to improvement action in future.


Kernel size calculation & folding workflow in your code

Hi,
I have read your paper and code recently, while the result and idea in tis paper seems amazing.
However, due to inefficiency in knowledge of convolution networks, I was confused when I saw the follow code:

   if stride == 1:
       self.new_conv = conv(in_channels, out_channels, stride, kernel=5, bias=True)
   else:
       self.new_conv = conv(in_channels, out_channels, stride, kernel=7, bias=True)

in ResNet post fold file.
Could you please tell me how to set the kernel size properly as which was set to 5 and 7 in your code.
Also, the code of calculate new kernel seems difficult for me to understand, I would appreciate it if you could explain in a detailed way.
Thanks in adv!

While combining 2 kernel with size of 3x3, the new kernel has size of 5x5.
But, in the same case, if the stride is equal to 2, the receptive field had grown, and then the new kernel must have shape of 7x7.


Unable to connect to postgresSQL on azure with version update on 7.1.5 ubuntu 18

System information:

Operating system (distribution) and version : Ubuntu 18.04
DBeaver version: 7.1.5
Additional extensions: none

Connection specification:

Database name and version : postgres 10
Driver name
Do you use tunnels or proxies (SSH, SOCKS, etc)? yes, VPN

Describe the problem you're observing:
connection issue over vpn however its working fine with 7.1.4
Steps to reproduce, if exist:
connection issue over vpn however its working fine with 7.1.4
Include any warning/errors/backtraces from the logs

Hi @sujeet1
could you provide logs and error message?

Issue closed - no updates for a long time.
If it is still actual - feel free to reopen the ticket


Building fails with no errors

Hi,
Currently trying to build my Golang program which can be found here so I can distribute binaries without making VMs to cross-compile. I've installed the Docker Toolkit on my MacBook Pro (OSX 10.11.4) and got the Docker image downloaded. However, when I try to compile my program, it appears that everything works fine as there are no errors. When I inspect the Darwin builds they seem to have text in them:
!<arch>
__.PKGDEF       0           0     0     644     108       `
go object darwin amd64 go1.6 X:none
build id "b349f3108598f995f677263a00b751e7d64cc27f"

$$
package dca

$$
_go_.o          0           0     0     644     57        `
go object darwin amd64 go1.6 X:none

!

Hmmm, nice :) Will look into this.

Hah, found it :)
So, xgo can only build a single target, which you need to point it to. If you command, that target was actually an empty Go package, thus why it's a simple Go library object file what it produced. However if you point xgo to the proper command:
xgo \
    -out builds/dca-v0.1.0 \
    --targets=darwin/*,windows/* \
    --deps=http://downloads.xiph.org/releases/opus/opus-1.1.2.tar.gz \
    github.com/uniquoooo/dca/cmd/dca

It will result in:
-rwxr-xr-x  1 root     root     3082872 Apr 13 12:54 dca-darwin-10.6-386
-rwxr-xr-x  1 root     root     3719720 Apr 13 12:54 dca-darwin-10.6-amd64
-rwxr-xr-x  1 root     root     3112399 Apr 13 12:57 dca-windows-4.0-386.exe
-rwxr-xr-x  1 root     root     3845286 Apr 13 12:56 dca-windows-4.0-amd64.exe

There seems to be an issue with building for linux/arm though, I'll need to investigate that.

Thanks! Seems to work now.

Looked into the ARM issue. Seems that the upstream gopus package you are using uses some strange pkg-config approach to gather dependent libs on some platforms, however they seem to not return everything needed to link. I've modified xgo to gather pkg-config stuff, but my bet is that it also needs some fixes in gopus to make it build when it hits this file: https://github.com/layeh/gopus/blob/master/opus_shared.go


feat: add a schema for validate-pyproject

Adding a schema, generation from our dataclass-based config system, and the expected plugin.

CC @abravalheri if you'd like to take a look. :)

Sorry for the delay @henryiii.
I had a look on the parts that I have some knowledge (and I admit I skipped the implementation details to generate a JSON schema 😝), but things look fine to me.
Specifically, I believe that "validate_pyproject.tool_schema".scikit-build = "scikit_build_core.settings.skbuild_schema:get_skbuild_schema" should work fine with validate-pyproject.
If you want to add any integration test something you can try is (ref):
    def test_valid(valid_example: dict):
        validator = validate_pyproject.api.Validator()
        assert validator(valid_example) is not None

    def test_invalid(invalid_example: dict):
        validator = validate_pyproject.api.Validator()
        with pytest.raises(Exception):
            validator(invalid_example)

sphinx-jsonschema is the best I could find in sphinx space for JSON schemas, but sometimes it still can be difficult to read the generated HTML.
There might be better alternatives in the javascript universe, but that is difficult to integrate with sphinx or with pip install[^1].
[^1]: It there is something I hate doing is setting up a nodejs environment in the CI just to be able to run a couple nodejs-based CLI tools...


Callback doesn't wait for typing to complete

When I call typistRemove:
$("target").typistRemove( 30, myCallback );
It doesn't wait for the typing to finish before doing the callback, it calls it immediately.

Hmm, I will check it.

Please, check your reports.
Callback called exactly at the end of removing.


Doesn't work.

Hello, I tryed to use the tool but every time give me error as in my last time I think the error from interface!
Also I tryed to search about the proplem an I didn't found it.
-I use nethunter with root  it may be proplem there Idk.
This is photo of proplem

Work for windows,

install all requirements
install nmap from official site nmap.org > set environtment to system name "nmap" value is your location installation
close, resrtart cmd run again


Exclude bundles from osgiRuntime

Hi
Is it possible to instruct osgi-run to not install some bundles in started OSGi container? I have a big dependency tree with some packages nor needed actually, but calculated as necessary.

Hi!
Have you tried excluding the dependencies in the gradle file?
Something like this:
dependencies {
    osgiRuntime "my-bundle:with-transitive-dependencies:1.0", {
        exclude group: 'bundl-group-to-be-excluded'
    }
}

I've never tried this , but I expect this to work because osgi-run uses Gradle's configurations to figure out dependencies and install bundles in the OSGi runtime.
If it doesn't work, I think it can be considered a bug.

That didn't work in my case (osgiRuntime was correct and runtime contained unwanted dependencies), but you pointed me in right direction and I've found the solution, thank you :)
My solution was to add:
configurations {
    ...
    runtime.exclude group: 'org.apache.poi' // unwanted dep.
    runtime.exclude group: 'org.mockito'  // unwanted dep.
}

@thugcee cool!


feat: handle cases with direct string arrays

Fixes #23

This only adds support for complex string array wrappers (base64 and RC4) around direct string arrays. Don't have a sample with simple (no encoding) wrappers around direct string arrays.


Display the "Save Changes" button inactive

[Setting pipelines] Display the "Save Changes" button inactive until the name and description of the pipeline is changed.
Arguments:
Inactive "Save Changes" button is helped to understand that the user didn't put new changes
This will get rid of unnecessary sending requests to the server

Duplicate of #579


feature: Autoclose sidebar when applying all changes (pressing 'A')

Feature request
Close the sidebar view after pressing 'A' to apply all changes. The same as title.
Motivation
In general I don't like splits in any editor. So, I need to manually close the sidebar everytime I'm applying changes to have the view with one buffers that I like (for the same reasons I like if the sidebar can be floating, but I see other issue open for that).
Other
No response

I think this would be a nice feature behind a configuration flag. Should this only take effect when applying all via A, but not when applying a single diff via a?

I think this would be a nice feature behind a configuration flag. Should this only take effect when applying all via A, but not when applying a single diff via a?

Actually, I was thinking of a flag for that feature. I've been getting only 2-3 hours of sleep for the past few days, and my brain is foggy. I edited the issue to express it better.
Regarding the single diff via a, I'm not sure what the best approach is. Maybe we could add two new keymaps to the sidebar mappings: "apply_all_and_hide" and "apply_cursor_and_hide".


Problem graphic bar

Currently I have the following graph in the bar with the period in months at the time of filtering by period I do not have any problem as indicated by the image.

FM 2016 [{"x": "1", "y": "0.03588040"}, {"x": "2", "y": "0.01324414"}, {"x": "3", "y ":" 0.00130007 "}, {" x ":" 4 "," y ":" 0.01163179 "}, {" x ":" 5 "," y ":" 0.06656267 "}, {" x ":" 6 "," and ":" 0.08537658 "}, {" x ":" 7 "," y ":" 0.02707211 "}, {" x ":" 8 "," y ":" 0.01226149 "}, {" x ":" 9 "," y ":" 0.00644247 "}, {" x ":" 10 "," y ":" 0.01332091 "}, {" x ":" 11 "," y ":" 0.00123339 "} , {"x": "12", "y": "0.00000000"}]
FM 2017 [{"x": "1", "y": "0.08749976"}, {"x": "2", "y": "0.03264113"}, {"x": "3", "y ":" 0.03304874 "}, {" x ":" 4 "," y ":" 0.01301472 "}, {" x ":" 5 "," and ":" 0.01777132 "}, {" x ":" 6 "," and ":" 0.03099226 "}, {" x ":" 7 "," y ":" 0.00082941 "}, {" x ":" 8 "," y ":" 0.02864722 "}, {" x ":" 9 "," and ":" 0.02278618 "}, {" x ":" 10 "," and ":" 0.02503932 "}]
But when filtering January

The error is that having this code
FM 2016 [{"x": "1", "y": "0.03588040"}, {"x": "2", "y": "0.01324414"}, {"x": "3", "y ":" 0.00130007 "}, {" x ":" 4 "," y ":" 0.01163179 "}, {" x ":" 5 "," y ":" 0.06656267 "}, {" x ":" 6 "," and ":" 0.08537658 "}, {" x ":" 7 "," y ":" 0.02707211 "}, {" x ":" 8 "," y ":" 0.01226149 "}, {" x ":" 9 "," y ":" 0.00644247 "}, {" x ":" 10 "," y ":" 0.01332091 "}, {" x ":" 11 "," y ":" 0.00123339 "} , {"x": "12", "y": "0.00000000"}]
FM 2017 [{"x": "1", "and": "0.08749976"}]
#Error
The bara of the month of January runs to another position
Expected behavior
Bar appears on the x axis: 1
Cod:
var barChartData = {
labels: mes_id_year,
    datasets: [

     {
        // fill: false,
         type: 'bar',
         label: 'FUERZA MAYOR ' + anioperiodo1,
         backgroundColor: color(window.chartColors.red).alpha(0.5).rgbString(),
         borderColor: window.chartColors.red,
         borderWidth: 1,
         stack: "s1", // si se usan con el mismo string se agrupan, en el caso que se han distinto se unen
         data: FM1

     },

      {
          fill: false,
          type: 'bar',
          label: 'FUERZA MAYOR ' + anioperiodo2,
          backgroundColor: color(window.chartColors.red).alpha(0.5).rgbString(),
          borderColor: window.chartColors.red,
         // borderWidth: 1,
         stack: "s",
          //fill: true,
         data: FM2

      },

       {
           fill: false,
           type: 'line',
           label: "AÑO 2016",
           backgroundColor: color(window.chartColors.Azul_lejania).alpha(0.8).rgbString(),
           borderColor: window.chartColors.Azul_lejania,
           data: regLineal_2016

       },
       {
           fill: false,
           type: 'line',
           label: "AÑO 2017",
           backgroundColor: color(window.chartColors.orange).alpha(0.8).rgbString(),
           borderColor: window.chartColors.orange,
           data: regLineal_2017

       },

    ]

};

var chartgraph = new Chart('BarraAlim', {
    type: 'bar',
    data: barChartData,

    options: {
       // responsive: true,
        title: {
            display: true,
            text: texto
        },

        legend: {
            display: true,
            labels: {
                //usePointStyle: true,
                filter: function (legendItem, chartData) {
                    debugger
                    //var contarChartLine1 = chartData.datasets[6].data.length;
                    //var contarChartLine2 = chartData.datasets[7].data.length;
                    //var tipo = chartData.datasets[legendItem.datasetIndex].type;
                    //if ((contarChartLine1 > 1) || (contarChartLine2 > 1)) {
                    if(tipo == "line")
                      {
                           return true;
                        }
                    }
                    //}
                }

            },

            scales: {
                xAxes: [{
                   stacked: true,
                   // display: true,
                   // display: true,
                    scaleLabel: {
                        //display: true,
                        labelString: "PERIODOS"
                    },

                    //ticks: {
                    //    //stepSize:1,
                    //    //min: 0.0000000,
                    //    // max: 100,
                    //   // display: true,
                    //}

                }],
                yAxes: [{
                    stacked: true,
                    scaleLabel: {
                        display: true,
                        labelString: tipo + " [ h ]"
                    },

                    ticks: {
                        display: true,

                    }

                }]
            }

            }

        });

@lmarimanc is it possible to create a fiddle with the broken chart in it for debugging?

I do not understand what you're referring to

I do not understand, the only thing I would like to know because because the graphic of the month knowing that the vector is fine

@etimberg , this is what I have:
Vector 2016
FM 2016 [{"x":"ENE","y":"0.03588040"},{"x":"FEB","y":"0.01324414"},{"x":"MAR","y":"0.00130007"},{"x":"ABR","y":"0.01163179"},{"x":"MAY","y":"0.06656267"},{"x":"JUN","y":"0.08537658"},{"x":"JUL","y":"0.02707211"},{"x":"AGO","y":"0.01226149"},{"x":"SEP","y":"0.00644247"},{"x":"OCT","y":"0.01332091"},{"x":"NOV","y":"0.00123339"},{"x":"DIC","y":"0.00000000"}]
Vector 2017
FM 2017 [{"x":"ENE","y":"0.08749976"}]
["ENE","FEB","MAR","ABR","MAY","JUN","JUL","AGO","SEP","OCT","NOV","DIC"]
Please helpme

This is the problem that I have when selecting only the first month, I do not understand why I draw well when I make the filter with the other months, please help as it is more or less urgent

This is the problem that I have when selecting only the first month, I do not understand why I draw well when I make the filter with the other months, please help as it is more or less urgent

The problem is when making the filter with a bar as the bar automatically becomes larger by default
categoryPercentage: 0.5,
barPercentage: 1,

my solution was to decrease the
categoryPercentage: 0.005,
barPercentage: 0.25,

the problem is that to play with the percentage the bars of the months are not seen.
THAT I AM ADVISED TO DO

@Memo211985 what version of Chart.js are you using?
@benmccann @simonbrunel any ideas?

@etimberg
the last version that is 2.7.2, but the problem is the use of the categoryPercentage and barPercentage attributes because when a month was chosen, the design of the bars was unconfigured
@benmccann @simonbrunel estimated help took more than 1 week watching the topic


Newtype support

It looks like this crate has all the needed machinery in place to be extended to work with any newtypes and not just smart pointers, allowing traits to opt-in to easily work with anything that implements From<T> + Deref<Target = T> (which all the smart pointers also already fit).
One approach could be to generate blanket implementation with trait bounds specified above, but another could be having an explicit internal wrapper which would be used by #[auto_impl(newtype)] on one side and by something like #[derive(AutoImplNewtype)] on another.
Either way, this could allow to solve the common issues with reimplementing traits for each newtype.

I could play on a fork and make a PR if that helps?

Sure, if you already want to play with the code: go ahead. I thought about first discussing what we want, but already trying things out can help a lot! However, please don't invest a lot of time in implementing a solution you like without talking with us about that solution beforehand. Just in case we don't agree with the solution, we don't want you to waste your time :)

Well in the worst case I can always go back to original plan and publish it as a separate crate later in case our views don't align. For now just trying to solve some specific cases I run into in myself all the time.

Coming back through some triage. In the intervening years the impl-tools project has sprung up which I think should support this use-case through its more programmatic #[autoimpl] syntax.

Oh wow, it's been a while. I wonder what happened to that side-project and where I left it 😅

Come back to it 4 years later and close all the issues in the name of “triage”.


merge request

making a changes that will allow the project to work with other currency

Unfortunately, other than project members, we are not allowing any changes to the source code or any pull requests from other parties even though it has been open sourced.
This is a joint ownership after all.


update import of terms documentation

@matentzn could you please review this documentation update? Thank you!

@nicolevasilevsky and @twhetzel
Please see the update to the "import term for logical definition" document.
I personally think we should remove the "alternate instructions" and stick to one that will work and be "clean" (ie term hanging out under "thing"). Any thoughts? Thank you!

@sabrinatoro definitely agree we should remove the alternate instructions and just have one

@nicolevasilevsky and @twhetzel
Please re-review this documentation update. Feel free to merge if you think it is ok.
Thank you!

@twhetzel
Could you please update this documentation/PR and add,remove, edit as you see fit?
I don't understand what is needed at this point.
Thank you!

@sabrinatoro sure, I'll sort out the final bits.


Don't get stats for cgroups that don't exist.

Signed-off-by: Victor Marmol<EMAIL_ADDRESS>

LGTM