I would like to share my
                    thoughts on this topic with a little example:
                    
                    Project structure:
                    
                    Jakarta
                        Jakarta Spec A
                            Spec A Document
                            Spec A API
                            Spec A TCK
                        Jakarta Spec B
                            Spec B Document
                            Spec B API
                            Spec B TCK
                        Jakarta Spec C
                            Spec C Document
                            Spec C API
                            Spec C TCK
                    
                    Implementation Project X
                        Implementation X_A
                        Implementation X_B
                    
                    Implementation Project Y
                        Implementation Y_A
                        Implementation Y_C
                    
                    
                    Dependency graph:
                    
                    Jakarta Spec A
                        Jakarta Spec B
                        Jakarta Spec C
                    
                    
                    In this example Jakarta Spec A is an umbrella spec
                    (in a general sense, see below) and Jakarta Spec B
                    and Jakarta Spec C could be independent component
                    specs.
                    
                    I think, we agree that only final artefacts reflect
                    a version, that is intended to be used by common
                    application developers (end users).
                    And these final versions need to end up in Maven
                    Central (as sync point for end users).
                    
                    We want to have one single version for a single
                    Jakarta spec (meaning for the spec document, API and
                    TCK of the spec) to show what belongs together.
                    That version (and only that) is under control of the
                    Jakarta spec project and governance of the Jakarta
                    EE Specification Committee - implementation projects
                    versions are not.
                    To be clear: If an implementation project decided
                    not to use SemVer and orders versions by approaching
                    Euler, Pi or use a count down, they are free to do
                    so - even when this is not reflecting common user
                    expectations ;-)
                    However, it is a good idea to ensure SemVer for all
                    of the Jakarta specs (including the
                    platform/profile/umbrella specs on my opinion, but
                    that might be a different discussion).
                    
                    By the way, the same is true for implementation
                    project structure changes: I.e. renaming
                    implementation X_A to A_X would be out of scope and
                    therefore control of Jakarta.
                    
                    One requirement for a Jakarta spec to become final
                    is, that at least one implementation passes the
                    required TCK (or in some cases TCKs, exactly spec
                    TCK + global TCK part at the currently for some
                    specs, but let's assume this fact is covered in the
                    spec TCK itself) successfully to ensure that a spec
                    is implementable and therefore useful at all.
                    
                    In the example above that means one of
                    implementation X_A or implementation Y_A at least
                    has to pass the Jakarta Spec A required TCK
                    successfully.
                    To achieve that, the artefacts need to be
                    referenceable and loadable by the implementation
                    projects at minimum, but not necessarily from Maven
                    Central.
                    
                    This artefact repo should be permanent:
                    
                    Reproducibility is important!
                    Out of scope and control of Jakarta there might be
                    issues, that are influenced by the environment:
                    Jenkins, Maven, Java SE, Container Runtime, OS, VM,
                    Hardware, physical environment etc.
                    Even when they are rare, they are usually hard to
                    find - being able to exclude the issue is within
                    Jakarta itself, it is very helpful to be able
                    reproduce it at any time.
                    That requirement results in the exact implementation
                    artefact need to be available permanently too.
                    
                    Side note: The cooperation with Adoptium could help
                    regarding Java SE and to some degree OS changes.
                    
                    Staging is not fulfilling the requirement at the
                    moment, so pushing Ms and RCs to Maven Central as a
                    sync point may be a workaround.
                    For the future, me might put these artefacts to a
                    Maven repo under governance of EF to achieve that
                    permanently without confusing end users (but that's
                    another discussion too).
                    
                    As David pointed out, we need to define the TCK
                    process and it's technical implementation not for
                    the happy path only - tests will fail and the root
                    cause may be in ANY artefact involved, that might
                    need to be fixed!
                    So I am with Emily, even the TCK could not be final
                    at the beginning, when we want to be able to fix it
                    and end up with one single version for the single
                    Jakarta spec version.
                    When the TCK run is successful, a final spec version
                    can be released with a ballot approves it.
                    
                    Having final artefacts available somewhere (like in
                    Staging) before the TCK has been passed could cause
                    other problems too: It is quite best practice to
                    cache Maven - on the organisational border and
                    locally at the devs machine - most of them is out of
                    control of Jakarta to withdraw a version and
                    invalidate caches!
                    So better try not to do that in any case.
                    
                    We want to have the requirement that final versions
                    of a spec have only final dependencies (that is not
                    fulfilled in Jakarta EE 9.1 Platform, unfortunately
                    - as discussed yesterday in the platform call), but
                    an M or RC release could have M, RC or final version
                    dependencies.
                    
                    That results in releasing final spec releases from
                    the leaf to root in the dependency tree, where
                    another source of final release dependencies might
                    result from unchanged final spec dependencies of
                    earlier releases.
                    
                    In the example above this means, Jakarta Spec B and
                    Jakarta Spec C need to become final before Jakarta
                    Spec A can be.
                    
                    We also want to ensure in a more complex dependency
                    tree, that multiple versions of one spec are not
                    allowed, especially major versions not (that's not
                    fulfilled in 9.1 too)!
                    
                    Both requirements could be ensured by automatic
                    testing in the future.
                    
                    TCKs should be able to reference tests from TCKs of
                    dependent specs to ensure compatibility (may be
                    partly) - therefore references need to be stable.
                    
                    One option to achieve that would be code duplication
                    (antipattern) or executing the dependent tests
                    directly (that in fact what the platform TCK might
                    do in the future, partly now and therefore my vote
                    for a clean project structure with resulting clean
                    namespaces - but again, that will be discussed
                    somewhere else... ;-) ).
                    
                    One theoretical example, for having to fix a
                    dependent final spec (including one of the involved
                    TCKs) might be if only the combination of multiple
                    dependent specs result in an issue that prevents the
                    technical combination of the two technologies at all
                    at the higher level. I.e. Jakarta Spec A can not
                    combine successful already released Jakarta Spec B
                    and Jakarta Spec C final versions. This results in a
                    new final release need to be done at least at one of
                    the leaf dependent specs to be able to combine them
                    in Jakarta Spec A. When they are in a M or RC state,
                    it can be fixed easier with another RC before all
                    could become final at least.
                    
                    Note: This all is true for all specs with
                    dependencies, which make them to (or let them behave
                    like) umbrella specs like the profiles (Platform aka
                    Full Profile, Web Profile and Core Profile including
                    profiles and optional Jakarta specs like NoSQL) to
                    some degree (!)
                    
                    I hope this will be helpful for clarifying the TCK
                    process and implementation.
                  
                  
                  May be, it's worth to
                    think about a change in the Eclipse Foundation
                    Technology Compatibility Kit License (
https://www.eclipse.org/legal/tck.php),
                    if this is necessary with the split up TCKs?
                  
 
                  
                    Best,
                    
                    Jan
                  
                  
                  
                  
                  
                  Am 26.01.22 um 15:10
                    schrieb Scott Stark:
                  
                  
                     Because TCKs and APIs are not the
                      same thing. You cannot make a compatibility claim
                      using APIs. You do not get essential patent rights
                      based on your API version. Both of those things
                      are done under the current TCK process using the
                      final TCK that has the Eclipse Foundation
                      Technology Compatibility Kit License (
https://www.eclipse.org/legal/tck.php)
                      which only the final version of the TCK should
                      have bundled. This is the current TCK process and
                      to allow ratifying compatible implementations to
                      use non-final TCKs would require some EFSP
                      change. 
 
                    
                    
                    You can release a TCK whenever you
                      want. I don't see what benefit you are deriving
                      from ratifying using a non-final TCK. Both the
                      scope of scope of essential patents and grant of
                      those patents derive from the final specification
                      and final TCK. The benefit of non-final APIs is
                      that it simplifies the circular nature of having
                      to produce a compatible implementation to ratify
                      the final API, spec and TCK. The final TCK becomes
                      the source of truth relative to whether the
                      compatible implementation has appropriate APIs and
                      behavior.
                      
                      
                        
                        
                          
                            Why can't TCKs adopt the same process
                              as the APIs? As long as we prove the RC is
                              the same as the final staging artifact, we
                              are all good. This is what I suggested:
                            Raise a RC for both APIs and TCKs - let
                              compatible implementation to ratify the
                              artifacts with CCRs
                            Stage final APIs and TCKs - ballot open
                              with the above CCRs to vote the staged
                              artifacts.
                            
                            
                            I think the current process of staging
                              TCK final is ok because TCKs and specs are
                              in separate repos. Once they all end up
                              under one repo, the api and tcks will be
                              released together. When you do a RC for
                              API, you will have a RC for TCK. I don't
                              get why using the same release of TCK RC
                              is not acceptable.
                            Thanks
                            Emily
                            
                            
                            
                           
                          
                          
                            
                            
                              
                                 The TCK cannot be an RC
                                  as it is part of the specification
                                  commit project PR that is being
                                  balloted on for final ratification. At
                                  that point there needs to be a staged
                                  final API artifact, specifications,
                                  java doc, and TCK. The compatibility
                                  request is verified against the final
                                  candidate TCK referenced in the PR. If
                                  the ratification ballot passes, the
                                  staged TCK is promoted to the final
                                  TCK without modification. All that
                                  process does is add the signing
                                  signatures of the specification
                                  committee.
                                
                                
                                
                                
                                
                                  
                                  
                                    
                                    
                                      
                                        +1 on clarifying this.
                                        For rectifying a spec, the
                                          viable solution is to use
                                          release candidates for both
                                          APIs and TCKs to avoid chicken
                                          egg situations.
                                        
                                        
                                        
                                          It has been a requirement
                                            that the TCK used for
                                            certification was the
                                            proposed final TCK, but not
                                            the APIs.
                                        
                                        Based on what I said above,
                                          TCKs used for ratifying a spec
                                          can be a RC as well. This will
                                          certainly help with the specs
                                          that contain both APIs and
                                          TCKs.
                                        Thanks
                                        Emily
                                        
                                       
                                      
                                      
                                        
                                        Agree. 
                                          If the signature tests pass,
                                          all is fine and the vendor is
                                          allowed to use their own API
                                          jars.  In some cases those API
                                          jars are implementations:
                                          Faces, Activation, Mail, etc. 
                                          There are other situations
                                          like JACC where the API jar
                                          can't really be considered an
                                          implementation, but there is
                                          definitely significant code
                                          there.
                                          
                                          We'd likely want to document
                                          those requirements in the JESP
                                          as the EFSP is what currently
                                          holds the open source
                                          requirement.
                                          
                                          We may need to add some
                                          clarification on the API jars
                                          produced by specification
                                          projects as people are
                                          increasingly referring to them
                                          as "the official" jars,
                                          implying 1) all other jars are
                                          not official or lesser and 2)
                                          they must be used by the
                                          compatible implementation used
                                          for ratification.  Neither is
                                          the case.  We need some
                                          explicit text that says we
                                          have no concept of "the
                                          official" jars and any jars
                                          that pass the TCK and
                                          signature tests are
                                          equivalent.
                                          
                                          For Jakarta EE 8 our
                                          compatible implementation was
                                          a pre-Eclipse version of
                                          GlassFish that did not ship
                                          the jars produced by the
                                          Specification Projects.  We
                                          did do some work to ensure the
                                          Specification Project-produced
                                          jars could pass a TCK run.  If
                                          we have thoughts that this
                                          should or does not need to
                                          happen again if a compatible
                                          implementation does not use
                                          the Specification
                                          Project-produced jars, we
                                          should write that down too.
                                          
                                          
                                          -- 
                                          David Blevins
                                          http://twitter.com/dblevins
                                          http://www.tomitribe.com
                                          
                                          > On Jan 25, 2022, at 9:28
                                          AM, Scott Stark <starksm64@xxxxxxxxx>
                                          wrote:
                                          > 
                                          > An issue that came up
                                          during the platform call was
                                          what are the requirements for
                                          the compatible implementation
                                          that is used to ratify a
                                          specification. A specification
                                          team had decided that they
                                          could not produce an RC that
                                          could be used for such a
                                          ratification based on their
                                          interpretation of the
                                          following two document
                                          statements:
                                          > 
                                          >       • According to https://www.eclipse.org/projects/handbook/#specifications-implementations
                                          “Compatible Implementations
                                          may only claim compatibility
                                          with a final specification.
                                          ... No claims regarding
                                          compatibility may be made for
                                          an implementation milestone
                                          build or unratified
                                          specification version."
                                          >       • https://github.com/jakartaee/specifications/blob/master/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md,
                                          which states, "For a Release
                                          Review, a summary that a
                                          Compatible Implementation is
                                          complete, passes the TCK, and
                                          that the TCK includes
                                          sufficient coverage of the
                                          specification."
                                          > 
                                          > If I look really
                                          pedantically at these two
                                          statements, maybe I could read
                                          that only final APIs can be
                                          used by a compatible
                                          implementation, but this is
                                          also ignoring other
                                          discussions we have had about
                                          the special nature of the
                                          compatible implementation used
                                          to ratify a specification.
                                          > 
                                          > We need to make a clear
                                          statement about the
                                          requirements for the initial
                                          compatible implement(s) used
                                          to ratify a specification as
                                          well as any additional
                                          constraints on post
                                          ratification compatible
                                          implementation claims.
                                          > 
                                          > It has been common
                                          practice in EE and MP to use
                                          ratifying compatible
                                          implementations that do depend
                                          on release candidate APIs. It
                                          has been a requirement that
                                          the TCK used for certification
                                          was the proposed final TCK,
                                          but not the APIs. By virtue of
                                          passing the TCK signature
                                          tests, whatever API versions
                                          the compatible implementation
                                          used, they have been validated
                                          as compatible as determined by
                                          the final TCK. This should be
                                          a sufficient validation of the
                                          compatible implementation.
                                          > 
                                          > Let's discuss tomorrow.
                                          > 
                                          >
                                          _______________________________________________
                                          > jakarta.ee-spec mailing
                                          list
                                          > jakarta.ee-spec@xxxxxxxxxxx
                                          > To unsubscribe from this
                                          list, visit https://www.eclipse.org/mailman/listinfo/jakarta.ee-spec
                                          
_______________________________________________
                                          jakarta.ee-spec mailing list
                                          jakarta.ee-spec@xxxxxxxxxxx
                                          To unsubscribe from this list,
                                          visit https://www.eclipse.org/mailman/listinfo/jakarta.ee-spec
                                        
                                       
                                      
                                      
                                      -- 
                                      
                                      
                                    
                                   
                                 
                               
                            
                           
                          
                          
                          -- 
                          
                          
                        
                       
                     
                    
                    
                    _______________________________________________
jakartaee-platform-dev mailing list
jakartaee-platform-dev@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/jakartaee-platform-dev