@xemahq/xema 0.59.0 → 0.59.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2599,355 +2599,355 @@
2599
2599
  },
2600
2600
  {
2601
2601
  "package": "@xemahq/xema",
2602
- "version": "0.59.0",
2602
+ "version": "0.59.1",
2603
2603
  "path": "edition/adapter-host-versions.mjs",
2604
2604
  "sha256": "sha256:1b7ebd3592f4da1225fba74aaba912e7d85fbceeb1626f7dcdac83491cbb4d69"
2605
2605
  },
2606
2606
  {
2607
2607
  "package": "@xemahq/xema",
2608
- "version": "0.59.0",
2608
+ "version": "0.59.1",
2609
2609
  "path": "edition/authorization-base.mjs",
2610
2610
  "sha256": "sha256:815c9be9f71731dcc805d85da2d733350ddb6fbdf32b6f1cf34f228ce6381c7c"
2611
2611
  },
2612
2612
  {
2613
2613
  "package": "@xemahq/xema",
2614
- "version": "0.59.0",
2614
+ "version": "0.59.1",
2615
2615
  "path": "edition/build-ledger.mjs",
2616
2616
  "sha256": "sha256:05202cbdd606aee086c8e9c62d28be68c429653a8b1d73a289ed0fe4ff14da85"
2617
2617
  },
2618
2618
  {
2619
2619
  "package": "@xemahq/xema",
2620
- "version": "0.59.0",
2620
+ "version": "0.59.1",
2621
2621
  "path": "edition/canonical-evidence-json.mjs",
2622
2622
  "sha256": "sha256:3b32f6786c9fb1c0deadf2f687077356a503b0db766392d2e0254aa1ab78feec"
2623
2623
  },
2624
2624
  {
2625
2625
  "package": "@xemahq/xema",
2626
- "version": "0.59.0",
2626
+ "version": "0.59.1",
2627
2627
  "path": "edition/canonical-repository-url.mjs",
2628
2628
  "sha256": "sha256:f36e4f7cbe7849789422ec2f0ebce2d62f7dc3684afecc3ac51a32560e72d8a1"
2629
2629
  },
2630
2630
  {
2631
2631
  "package": "@xemahq/xema",
2632
- "version": "0.59.0",
2632
+ "version": "0.59.1",
2633
2633
  "path": "edition/collected-refusals.mjs",
2634
2634
  "sha256": "sha256:ae21c069dbff0afa9aca18b7b909d5de405df2277f6431bc3fda20528115bcd1"
2635
2635
  },
2636
2636
  {
2637
2637
  "package": "@xemahq/xema",
2638
- "version": "0.59.0",
2638
+ "version": "0.59.1",
2639
2639
  "path": "edition/connector-source-authority.mjs",
2640
2640
  "sha256": "sha256:ea94475f4324737673accd7de1303c44db1cbc4dac61a865a06cd83abe310164"
2641
2641
  },
2642
2642
  {
2643
2643
  "package": "@xemahq/xema",
2644
- "version": "0.59.0",
2644
+ "version": "0.59.1",
2645
2645
  "path": "edition/cosign-certificate-constraints.mjs",
2646
2646
  "sha256": "sha256:bb9ba7038f1de9211c9cbcf99f02255f3623ce72d86c71fdcfa146a4e0edbd9a"
2647
2647
  },
2648
2648
  {
2649
2649
  "package": "@xemahq/xema",
2650
- "version": "0.59.0",
2650
+ "version": "0.59.1",
2651
2651
  "path": "edition/develop-graph.mjs",
2652
2652
  "sha256": "sha256:decebd437c9f4c8bdd6bee3baabfdc340fd7b9d175aca7e702cb330e912708d5"
2653
2653
  },
2654
2654
  {
2655
2655
  "package": "@xemahq/xema",
2656
- "version": "0.59.0",
2656
+ "version": "0.59.1",
2657
2657
  "path": "edition/dispatched-runtime-components.mjs",
2658
2658
  "sha256": "sha256:9712823d183a60108cd002b2d36a9e5c0867b9d576dd02825264a18f7b8ece69"
2659
2659
  },
2660
2660
  {
2661
2661
  "package": "@xemahq/xema",
2662
- "version": "0.59.0",
2662
+ "version": "0.59.1",
2663
2663
  "path": "edition/distribution-paths.mjs",
2664
2664
  "sha256": "sha256:d78a5c8405bc6c25d36fcec61b0030e1fdacac7d528e698adb96f906f4b70279"
2665
2665
  },
2666
2666
  {
2667
2667
  "package": "@xemahq/xema",
2668
- "version": "0.59.0",
2668
+ "version": "0.59.1",
2669
2669
  "path": "edition/edition-artifact.mjs",
2670
2670
  "sha256": "sha256:937f9e2fd289fc704bf7b2115e0567a22ed70ba4dd3c0f9fd86e71143a894dfa"
2671
2671
  },
2672
2672
  {
2673
2673
  "package": "@xemahq/xema",
2674
- "version": "0.59.0",
2674
+ "version": "0.59.1",
2675
2675
  "path": "edition/edition-channel.mjs",
2676
2676
  "sha256": "sha256:3c0c1564dc50be133cad500452d953353aa5beb703142c05a17bbce8175ba9f3"
2677
2677
  },
2678
2678
  {
2679
2679
  "package": "@xemahq/xema",
2680
- "version": "0.59.0",
2680
+ "version": "0.59.1",
2681
2681
  "path": "edition/edition-chart-set.mjs",
2682
2682
  "sha256": "sha256:f9f16b58279c8c2619a39c5cc92bdbc334543d1a324304cd5d3b120d66dc8f3a"
2683
2683
  },
2684
2684
  {
2685
2685
  "package": "@xemahq/xema",
2686
- "version": "0.59.0",
2686
+ "version": "0.59.1",
2687
2687
  "path": "edition/edition-config.mjs",
2688
2688
  "sha256": "sha256:58af55e9a2b36ca23485246d44a295260afa240bcdc0649c697563b36085ddaa"
2689
2689
  },
2690
2690
  {
2691
2691
  "package": "@xemahq/xema",
2692
- "version": "0.59.0",
2692
+ "version": "0.59.1",
2693
2693
  "path": "edition/edition-constants.mjs",
2694
2694
  "sha256": "sha256:c86da7209e072b85128dc4b84f3bc78dac5d5390eaa26365e8af794699aa0c70"
2695
2695
  },
2696
2696
  {
2697
2697
  "package": "@xemahq/xema",
2698
- "version": "0.59.0",
2698
+ "version": "0.59.1",
2699
2699
  "path": "edition/edition-contract-parse.mjs",
2700
2700
  "sha256": "sha256:68b5a47cdfac33419546c8955f7753fafbd15c8f3207cb084002e65feb75d66c"
2701
2701
  },
2702
2702
  {
2703
2703
  "package": "@xemahq/xema",
2704
- "version": "0.59.0",
2704
+ "version": "0.59.1",
2705
2705
  "path": "edition/edition-contract.json",
2706
2706
  "sha256": "sha256:578913058d4341bb1ae197b45c52b2a0eb8c59980464973c45233d4062b2c7a6"
2707
2707
  },
2708
2708
  {
2709
2709
  "package": "@xemahq/xema",
2710
- "version": "0.59.0",
2710
+ "version": "0.59.1",
2711
2711
  "path": "edition/edition-kind.mjs",
2712
2712
  "sha256": "sha256:b4f3358ffa81bbafb8c37d158b9e01032a7358c38b9d6e5aca409091f989e47a"
2713
2713
  },
2714
2714
  {
2715
2715
  "package": "@xemahq/xema",
2716
- "version": "0.59.0",
2716
+ "version": "0.59.1",
2717
2717
  "path": "edition/edition-protocol.mjs",
2718
2718
  "sha256": "sha256:f02ea6427e2fd7ceea2c3cb49f3fa6d85b982870e487082a7466f8037cd2bed9"
2719
2719
  },
2720
2720
  {
2721
2721
  "package": "@xemahq/xema",
2722
- "version": "0.59.0",
2722
+ "version": "0.59.1",
2723
2723
  "path": "edition/edition-publisher.mjs",
2724
2724
  "sha256": "sha256:8803b41067d81acbc35a8974426f606b5b8168b7a9c2581c16586a86f36db50f"
2725
2725
  },
2726
2726
  {
2727
2727
  "package": "@xemahq/xema",
2728
- "version": "0.59.0",
2728
+ "version": "0.59.1",
2729
2729
  "path": "edition/edition-source-pins.mjs",
2730
2730
  "sha256": "sha256:b141474fff33b06734fb62cd2552752b991c8267bb1c9bccb22a81dd80e91c6c"
2731
2731
  },
2732
2732
  {
2733
2733
  "package": "@xemahq/xema",
2734
- "version": "0.59.0",
2734
+ "version": "0.59.1",
2735
2735
  "path": "edition/edition-workspace.mjs",
2736
2736
  "sha256": "sha256:892b360f9f80d2308b0b12f9b99658ae06173878d9b71cf5d6fc8bd717b3c86e"
2737
2737
  },
2738
2738
  {
2739
2739
  "package": "@xemahq/xema",
2740
- "version": "0.59.0",
2740
+ "version": "0.59.1",
2741
2741
  "path": "edition/evidence-checkout.mjs",
2742
2742
  "sha256": "sha256:31fb669769b31de4c6f2b2501bb96959548172ef166e7568edbbfed7f5079a11"
2743
2743
  },
2744
2744
  {
2745
2745
  "package": "@xemahq/xema",
2746
- "version": "0.59.0",
2746
+ "version": "0.59.1",
2747
2747
  "path": "edition/evidence-grammars.mjs",
2748
2748
  "sha256": "sha256:4bea69437af5a36c139b5b41d0ecf2d1ddcf3f871e10c78e3d351f608eedca3b"
2749
2749
  },
2750
2750
  {
2751
2751
  "package": "@xemahq/xema",
2752
- "version": "0.59.0",
2752
+ "version": "0.59.1",
2753
2753
  "path": "edition/evidence-trust-pin.mjs",
2754
2754
  "sha256": "sha256:eb46e4d6a79dfac5536b7a439ab9df7dd4b03af369bdcfa9fcdd522aa1aab8dd"
2755
2755
  },
2756
2756
  {
2757
2757
  "package": "@xemahq/xema",
2758
- "version": "0.59.0",
2758
+ "version": "0.59.1",
2759
2759
  "path": "edition/first-party-source-ids.mjs",
2760
2760
  "sha256": "sha256:20cb1ad7cfb8c6e6686a6be5a51289da4bba76c20b58d9c1b5b6b3813a38dc1c"
2761
2761
  },
2762
2762
  {
2763
2763
  "package": "@xemahq/xema",
2764
- "version": "0.59.0",
2764
+ "version": "0.59.1",
2765
2765
  "path": "edition/fulcio-certificate-extensions.mjs",
2766
2766
  "sha256": "sha256:6f1f5a8ea110a489f7aff4bfb8e0b2d058919fe3e8ba4a1e5e8396fca24861b7"
2767
2767
  },
2768
2768
  {
2769
2769
  "package": "@xemahq/xema",
2770
- "version": "0.59.0",
2770
+ "version": "0.59.1",
2771
2771
  "path": "edition/git-json.mjs",
2772
2772
  "sha256": "sha256:d0d25cda0c19007becabc9a2827c3dcf759b295cd0b41596eb4480c9549a1f21"
2773
2773
  },
2774
2774
  {
2775
2775
  "package": "@xemahq/xema",
2776
- "version": "0.59.0",
2776
+ "version": "0.59.1",
2777
2777
  "path": "edition/git-source-auth.mjs",
2778
2778
  "sha256": "sha256:c1b32aa6f7d59798db58238d632cafeadbd4f07376396a31acdeb5f0ac56dcac"
2779
2779
  },
2780
2780
  {
2781
2781
  "package": "@xemahq/xema",
2782
- "version": "0.59.0",
2782
+ "version": "0.59.1",
2783
2783
  "path": "edition/image-delivery-entitlement-descriptor.mjs",
2784
2784
  "sha256": "sha256:4726b66116f01bf2523fafe2b7a356591eca8fb5ca6bd8b154dd4821873e921b"
2785
2785
  },
2786
2786
  {
2787
2787
  "package": "@xemahq/xema",
2788
- "version": "0.59.0",
2788
+ "version": "0.59.1",
2789
2789
  "path": "edition/image-evidence-replay-state.mjs",
2790
2790
  "sha256": "sha256:eba0cf1d38af0ab2f00c5099fa8bc2edc543136ce92f895544d4d284b3d6af0f"
2791
2791
  },
2792
2792
  {
2793
2793
  "package": "@xemahq/xema",
2794
- "version": "0.59.0",
2794
+ "version": "0.59.1",
2795
2795
  "path": "edition/image-evidence.mjs",
2796
2796
  "sha256": "sha256:9258d05e03d797cb1fbed8651b9738990ebf106a142a5bd633a98ef4a1136aad"
2797
2797
  },
2798
2798
  {
2799
2799
  "package": "@xemahq/xema",
2800
- "version": "0.59.0",
2800
+ "version": "0.59.1",
2801
2801
  "path": "edition/image-subject-identity.mjs",
2802
2802
  "sha256": "sha256:6a64e44f9865f68484540e3264a1d87040ae021dfa6ee4b79239e66805754ac1"
2803
2803
  },
2804
2804
  {
2805
2805
  "package": "@xemahq/xema",
2806
- "version": "0.59.0",
2806
+ "version": "0.59.1",
2807
2807
  "path": "edition/kernel-capability-domain.mjs",
2808
2808
  "sha256": "sha256:3ecf887dd8d399e91a8285f6f115f6e418fb59bbf3f004539fe65ec667219356"
2809
2809
  },
2810
2810
  {
2811
2811
  "package": "@xemahq/xema",
2812
- "version": "0.59.0",
2812
+ "version": "0.59.1",
2813
2813
  "path": "edition/kernel-contract-authority.mjs",
2814
2814
  "sha256": "sha256:9de2645dca22274cad9fa68d0364bf57e4de704e9d49a8bbadde0e322ae317df"
2815
2815
  },
2816
2816
  {
2817
2817
  "package": "@xemahq/xema",
2818
- "version": "0.59.0",
2818
+ "version": "0.59.1",
2819
2819
  "path": "edition/kernel-contract-source-path-set.mjs",
2820
2820
  "sha256": "sha256:bc4756f217d80fd8f802932f47da71ab14e782873fa9fa977002a94e058d8a9e"
2821
2821
  },
2822
2822
  {
2823
2823
  "package": "@xemahq/xema",
2824
- "version": "0.59.0",
2824
+ "version": "0.59.1",
2825
2825
  "path": "edition/kernel-package.mjs",
2826
2826
  "sha256": "sha256:e97a9491991d8332a4feed14ac48fe393e44d12c63bdfec89fac8b5b4ea2a574"
2827
2827
  },
2828
2828
  {
2829
2829
  "package": "@xemahq/xema",
2830
- "version": "0.59.0",
2830
+ "version": "0.59.1",
2831
2831
  "path": "edition/lib.mjs",
2832
2832
  "sha256": "sha256:f98c9eb6c50dbaf6c89c5fa9d42f682042265a2d41687a9d2b35f16c0b139326"
2833
2833
  },
2834
2834
  {
2835
2835
  "package": "@xemahq/xema",
2836
- "version": "0.59.0",
2836
+ "version": "0.59.1",
2837
2837
  "path": "edition/no-follow-file.mjs",
2838
2838
  "sha256": "sha256:c17bdf5e441f3c079aa06d4b48bbed05cad087855b9ad2a5e6dc43d5ee2b17c3"
2839
2839
  },
2840
2840
  {
2841
2841
  "package": "@xemahq/xema",
2842
- "version": "0.59.0",
2842
+ "version": "0.59.1",
2843
2843
  "path": "edition/operation-requirements.mjs",
2844
2844
  "sha256": "sha256:d3b6807953f162ab4204dcd1a0f752e0f9b447726fc17a12534d28abe8e570b0"
2845
2845
  },
2846
2846
  {
2847
2847
  "package": "@xemahq/xema",
2848
- "version": "0.59.0",
2848
+ "version": "0.59.1",
2849
2849
  "path": "edition/pin-source.mjs",
2850
2850
  "sha256": "sha256:0b2bc0de8e2fb2a39a3604434d2eb35a7470562c9363bc631511cec809e3ec13"
2851
2851
  },
2852
2852
  {
2853
2853
  "package": "@xemahq/xema",
2854
- "version": "0.59.0",
2854
+ "version": "0.59.1",
2855
2855
  "path": "edition/sigstore-bundle-media-type.mjs",
2856
2856
  "sha256": "sha256:e0aa5a3992f0385ddbbe69eb0307d642ac428ef516c8394816ac4fd52e0ac39c"
2857
2857
  },
2858
2858
  {
2859
2859
  "package": "@xemahq/xema",
2860
- "version": "0.59.0",
2860
+ "version": "0.59.1",
2861
2861
  "path": "edition/source-authority.mjs",
2862
2862
  "sha256": "sha256:9c351f60e8ea838f445f89c3709c60b7f13b021b78d6e40eaef91350a793f0ff"
2863
2863
  },
2864
2864
  {
2865
2865
  "package": "@xemahq/xema",
2866
- "version": "0.59.0",
2866
+ "version": "0.59.1",
2867
2867
  "path": "edition/strict-json.mjs",
2868
2868
  "sha256": "sha256:f95778396df7f38b086f55d2ec4f3b6644a8aeff2b32282a62829145fb544562"
2869
2869
  },
2870
2870
  {
2871
2871
  "package": "@xemahq/xema",
2872
- "version": "0.59.0",
2872
+ "version": "0.59.1",
2873
2873
  "path": "edition/string-order.mjs",
2874
2874
  "sha256": "sha256:b3210cd273e4b2e01fb8b1a91e28734cd211d4010c080d0ce95f5e5ff631cffb"
2875
2875
  },
2876
2876
  {
2877
2877
  "package": "@xemahq/xema",
2878
- "version": "0.59.0",
2878
+ "version": "0.59.1",
2879
2879
  "path": "edition/third-party-admission.mjs",
2880
2880
  "sha256": "sha256:7e32f631a8948e2b93a5cfa163390d52d2a8d9ade87a637c7fe1fc6351fe5974"
2881
2881
  },
2882
2882
  {
2883
2883
  "package": "@xemahq/xema",
2884
- "version": "0.59.0",
2884
+ "version": "0.59.1",
2885
2885
  "path": "edition/third-party-certificate-extensions.mjs",
2886
2886
  "sha256": "sha256:3293267b09452199f605001d8c14070d1c822b77390caee4088e17b059b7b05d"
2887
2887
  },
2888
2888
  {
2889
2889
  "package": "@xemahq/xema",
2890
- "version": "0.59.0",
2890
+ "version": "0.59.1",
2891
2891
  "path": "edition/third-party-source-pins.mjs",
2892
2892
  "sha256": "sha256:6f12feb9061bd4ea3e5aeab3f369c081ab58da335c0d281e21b250251e1c0dd9"
2893
2893
  },
2894
2894
  {
2895
2895
  "package": "@xemahq/xema",
2896
- "version": "0.59.0",
2896
+ "version": "0.59.1",
2897
2897
  "path": "edition/trust-policy-arming.mjs",
2898
2898
  "sha256": "sha256:f6ed96ee1d0b7698b1eea5066ba10abef1babeede8403a7c481bba53636cb1a5"
2899
2899
  },
2900
2900
  {
2901
2901
  "package": "@xemahq/xema",
2902
- "version": "0.59.0",
2902
+ "version": "0.59.1",
2903
2903
  "path": "edition/trust-policy-image-ownership.mjs",
2904
2904
  "sha256": "sha256:be0c787c6a75124f0143fc0ce3b127a94e3bb7f6aa64e282c91dd84e566e550e"
2905
2905
  },
2906
2906
  {
2907
2907
  "package": "@xemahq/xema",
2908
- "version": "0.59.0",
2908
+ "version": "0.59.1",
2909
2909
  "path": "edition/trusted-executable.mjs",
2910
2910
  "sha256": "sha256:37d46cdbc999ddd55d4ea8aeed4850ddd1efde89ed7b532f5a2ddec87105d796"
2911
2911
  },
2912
2912
  {
2913
2913
  "package": "@xemahq/xema",
2914
- "version": "0.59.0",
2914
+ "version": "0.59.1",
2915
2915
  "path": "edition/verifier-binding.mjs",
2916
2916
  "sha256": "sha256:80732658617f5255258c538eeb2383331ec8553b44b58d552b567845a7b916aa"
2917
2917
  },
2918
2918
  {
2919
2919
  "package": "@xemahq/xema",
2920
- "version": "0.59.0",
2920
+ "version": "0.59.1",
2921
2921
  "path": "edition/verifier-files.mjs",
2922
2922
  "sha256": "sha256:cdd14a20a63f0f194a8abb55680a5a7e3ced1f09f8b210a90d349e655f6de0c0"
2923
2923
  },
2924
2924
  {
2925
2925
  "package": "@xemahq/xema",
2926
- "version": "0.59.0",
2926
+ "version": "0.59.1",
2927
2927
  "path": "edition/verifier-provenance.mjs",
2928
2928
  "sha256": "sha256:3e2fb8e07cf1f66b8ad6c7ac2555fe3af64ec7abeb07cecbaf1939a18c2b3663"
2929
2929
  },
2930
2930
  {
2931
2931
  "package": "@xemahq/xema",
2932
- "version": "0.59.0",
2932
+ "version": "0.59.1",
2933
2933
  "path": "edition/verify-catalogue-evidence.mjs",
2934
2934
  "sha256": "sha256:156d0ee39210658ec489609629c5b9cddd3ce5b3938d8980dcf8282ae4be60bb"
2935
2935
  },
2936
2936
  {
2937
2937
  "package": "@xemahq/xema",
2938
- "version": "0.59.0",
2938
+ "version": "0.59.1",
2939
2939
  "path": "edition/verify-image-evidence.mjs",
2940
2940
  "sha256": "sha256:958360f7889985c48abb048852c5bbba349cd7353ce4b532c4511b4902380fac"
2941
2941
  },
2942
2942
  {
2943
2943
  "package": "@xemahq/xema",
2944
- "version": "0.59.0",
2944
+ "version": "0.59.1",
2945
2945
  "path": "edition/workspace-sections.mjs",
2946
2946
  "sha256": "sha256:1d2aff08bcd9e94b644c85c5b55c90c05b6b02bab662731fe3fcd53fcdf86e93"
2947
2947
  },
2948
2948
  {
2949
2949
  "package": "@xemahq/xema",
2950
- "version": "0.59.0",
2950
+ "version": "0.59.1",
2951
2951
  "path": "scripts/build-evidence-verifier.mjs",
2952
2952
  "sha256": "sha256:5a688d20c47dc88aff37aa0c6cc02daf2c370a5bc610fef8446ce7be222d4c0b"
2953
2953
  },
@@ -475,6 +475,9 @@ export async function deriveSubjectSourceIdentity({
475
475
  // The kernel's `RuntimeImageSubjectKind.ComposedProcess`, passed in for the
476
476
  // reason `platformSubjectKind` is. Undefined: no subject is a composed one.
477
477
  composedProcessSubjectKind = undefined,
478
+ // The kernel's `DEFAULT_COMPOSED_IMAGE_CLASS`: the class directory a
479
+ // composed-process image is declared in. Required with `composedProcessSubjectKind`.
480
+ defaultComposedImageClass = undefined,
478
481
  declaration,
479
482
  }) {
480
483
  const { kind, id, repo, path, sourceCommit } = declaration;
@@ -524,13 +527,18 @@ export async function deriveSubjectSourceIdentity({
524
527
  };
525
528
  } else if (composedProcessSubjectKind !== undefined && kind === composedProcessSubjectKind) {
526
529
  // The composed-process image of one build: a Dockerfile-only image at the
527
- // repository's `infra/composed-process/`, whose declaration is its
528
- // `image-build-inputs.json` — exactly the shape resolve-images.mjs names
529
- // in the lock (`readComposedProcessDeclarations`).
530
- if (path !== `${repo}/${COMPOSED_PROCESS_IMAGE_PATH}`) {
530
+ // repository's `infra/composed-process/<default class>/` (or, at a commit
531
+ // that predates the per-class layout, the legacy `infra/composed-process/`),
532
+ // whose declaration is its `image-build-inputs.json` — exactly the shape
533
+ // resolve-images.mjs names in the lock (`readComposedProcessDeclarations`).
534
+ const composedPaths = [
535
+ `${repo}/${COMPOSED_PROCESS_IMAGE_PATH}/${defaultComposedImageClass}`,
536
+ `${repo}/${COMPOSED_PROCESS_IMAGE_PATH}`,
537
+ ];
538
+ if (!composedPaths.includes(path)) {
531
539
  throw new Error(
532
540
  `subject ${kind}:${id} declares source path "${path}", but a composed-process ` +
533
- `image is built from "${repo}/${COMPOSED_PROCESS_IMAGE_PATH}"`,
541
+ `image is built from "${composedPaths.join('" or "')}"`,
534
542
  );
535
543
  }
536
544
  const expectedId = composedProcessSubjectId(firstPartySourceId(repo));
@@ -539,7 +547,7 @@ export async function deriveSubjectSourceIdentity({
539
547
  `subject ${kind}:${id} is not the composed-process subject of "${repo}" ("${expectedId}")`,
540
548
  );
541
549
  }
542
- manifestRepoRelativePath = `${COMPOSED_PROCESS_IMAGE_PATH}/${COMPOSED_PROCESS_DECLARATION_FILE}`;
550
+ manifestRepoRelativePath = `${path.slice(repo.length + 1)}/${COMPOSED_PROCESS_DECLARATION_FILE}`;
543
551
  subjectForServicePath = {
544
552
  ...subjectForServicePath,
545
553
  sourceManifestPath: manifestRepoRelativePath,
@@ -1177,6 +1185,7 @@ export async function assembleProducerInput({
1177
1185
  ),
1178
1186
  platformSubjectKind: schemas.RuntimeImageSubjectKind.Platform,
1179
1187
  composedProcessSubjectKind: schemas.RuntimeImageSubjectKind.ComposedProcess,
1188
+ defaultComposedImageClass: schemas.DEFAULT_COMPOSED_IMAGE_CLASS,
1180
1189
  declaration: {
1181
1190
  kind: subjectKind,
1182
1191
  id: subjectId,
@@ -947,16 +947,24 @@ export function structureSubjects(structure) {
947
947
  * entrypoint, owned by the biomes whose services it carries. Neither the kernel
948
948
  * nor the SDK fixes WHERE a repository builds it, so this plane does, once:
949
949
  *
950
- * - the image directory is `infra/composed-process/` at the repository root,
951
- * holding its own `Dockerfile` and an `image-build-inputs.json` whose
950
+ * - the image directory is the per-class directory
951
+ * `infra/composed-process/<class>/` at the repository root (`<class>` a
952
+ * kernel `ComposedImageClass`; an edition addresses one composed subject
953
+ * per repository, of the kernel's `DEFAULT_COMPOSED_IMAGE_CLASS`). A commit
954
+ * that predates the per-class layout declares it at the legacy root
955
+ * `infra/composed-process/`, which stays readable because committed release
956
+ * locks still pin such commits. Both at once, or a declaration in another
957
+ * class directory, is refused (`composedProcessDeclarationDir`). The
958
+ * directory holds its own `Dockerfile` and an `image-build-inputs.json` whose
952
959
  * `workspacePackages` lists every member service's workspace package
953
960
  * directory — the Dockerfile-only image shape `hashImageBuildInputs`
954
961
  * already reads (`opencode-worker` is the other one). Its tag is therefore
955
962
  * an ordinary `xema-image-input-sha256-v2` key, computed by the one
956
963
  * implementation every producer uses, with `SERVICE` = the subject id and
957
964
  * `SERVICE_PATH` = this directory;
958
- * - the DECLARATION is that `image-build-inputs.json` existing at the pinned
959
- * commit. A repository that declares none has no composed image, and an
965
+ * - the DECLARATION is that `image-build-inputs.json` existing in that
966
+ * directory at the pinned commit. A repository that declares none (and has
967
+ * no `infra/composed-process/` tree at all) has no composed image, and an
960
968
  * edition carries no composed subject for it — which the deploy plane
961
969
  * reports as "the producer builds no composed-process image at that
962
970
  * commit". That is an honest absence, not a skipped subject: a DECLARED
@@ -1045,8 +1053,8 @@ function declaredImageClass(declared, subject, enums) {
1045
1053
  return parsed.data;
1046
1054
  }
1047
1055
 
1048
- function composedProcessCarriage(structure, enums, repo, sourceCommit, locate) {
1049
- const inputsPath = `${COMPOSED_PROCESS_IMAGE_PATH}/${COMPOSED_PROCESS_DECLARATION_FILE}`;
1056
+ function composedProcessCarriage(structure, enums, repo, sourceCommit, locate, declarationDir) {
1057
+ const inputsPath = `${declarationDir}/${COMPOSED_PROCESS_DECLARATION_FILE}`;
1050
1058
  const { dir } = locate(repo);
1051
1059
  let members;
1052
1060
  try {
@@ -1098,6 +1106,60 @@ function composedProcessCarriage(structure, enums, repo, sourceCommit, locate) {
1098
1106
  .sort((a, b) => compareStrings(a.biomeId, b.biomeId));
1099
1107
  }
1100
1108
 
1109
+ function gitPathExistsAtCommit(dir, sourceCommit, repoPath) {
1110
+ try {
1111
+ execFileSync('git', ['-C', dir, 'cat-file', '-e', `${sourceCommit}:${repoPath}`], {
1112
+ stdio: ['ignore', 'ignore', 'ignore'],
1113
+ });
1114
+ return true;
1115
+ } catch {
1116
+ return false;
1117
+ }
1118
+ }
1119
+
1120
+ /**
1121
+ * The repo-relative directory holding a repository's composed-process
1122
+ * DECLARATION at one commit, or null when it declares none. The default class's
1123
+ * directory and the legacy root are the two places an edition reads; a
1124
+ * declaration it cannot address (both present, another class, an
1125
+ * `infra/composed-process/` tree without a recognised one) is refused, because
1126
+ * a declaration the resolver cannot find must never read as "declares nothing".
1127
+ */
1128
+ function composedProcessDeclarationDir(dir, sourceCommit, enums) {
1129
+ const defaultClass = enums.DEFAULT_COMPOSED_IMAGE_CLASS;
1130
+ const classDir = `${COMPOSED_PROCESS_IMAGE_PATH}/${defaultClass}`;
1131
+ const declares = (candidate) =>
1132
+ gitPathExistsAtCommit(dir, sourceCommit, `${candidate}/${COMPOSED_PROCESS_DECLARATION_FILE}`);
1133
+ const inClassDir = declares(classDir);
1134
+ const atLegacyRoot = declares(COMPOSED_PROCESS_IMAGE_PATH);
1135
+ if (inClassDir && atLegacyRoot) {
1136
+ throw new ComposedProcessInputsError(
1137
+ `ambiguous composed-process declaration at ${sourceCommit}: both "${classDir}/${COMPOSED_PROCESS_DECLARATION_FILE}" ` +
1138
+ `and the legacy "${COMPOSED_PROCESS_IMAGE_PATH}/${COMPOSED_PROCESS_DECLARATION_FILE}" exist`,
1139
+ );
1140
+ }
1141
+ const otherClasses = enums.ComposedImageClassSchema.options
1142
+ .filter((candidate) => candidate !== defaultClass)
1143
+ .filter((candidate) => declares(`${COMPOSED_PROCESS_IMAGE_PATH}/${candidate}`));
1144
+ if (otherClasses.length > 0) {
1145
+ throw new ComposedProcessInputsError(
1146
+ `composed-process declaration at ${sourceCommit} is in the "${otherClasses.join('", "')}" class ` +
1147
+ `director${otherClasses.length > 1 ? 'ies' : 'y'}, but an edition addresses one composed-process subject per ` +
1148
+ `repository, of the default class "${defaultClass}"; a "${otherClasses[0]}" image has no subject naming yet`,
1149
+ );
1150
+ }
1151
+ if (inClassDir) {return classDir;}
1152
+ if (atLegacyRoot) {return COMPOSED_PROCESS_IMAGE_PATH;}
1153
+ if (gitPathExistsAtCommit(dir, sourceCommit, COMPOSED_PROCESS_IMAGE_PATH)) {
1154
+ throw new ComposedProcessInputsError(
1155
+ `"${COMPOSED_PROCESS_IMAGE_PATH}" exists at ${sourceCommit} but declares no composed-process image the edition can ` +
1156
+ `read: looked at "${classDir}/${COMPOSED_PROCESS_DECLARATION_FILE}" and ` +
1157
+ `"${COMPOSED_PROCESS_IMAGE_PATH}/${COMPOSED_PROCESS_DECLARATION_FILE}"`,
1158
+ );
1159
+ }
1160
+ return null;
1161
+ }
1162
+
1101
1163
  /**
1102
1164
  * Read each repository's composed-process DECLARATION at the commit the
1103
1165
  * edition builds its services from. Only repositories that contribute a
@@ -1119,7 +1181,6 @@ export function readComposedProcessDeclarations(
1119
1181
  const declarations = [];
1120
1182
  for (const [repo, sourceCommit] of [...commits].sort(([a], [b]) => compareStrings(a, b))) {
1121
1183
  const { dir, base } = locate(repo);
1122
- const declarationPath = `${COMPOSED_PROCESS_IMAGE_PATH}/${COMPOSED_PROCESS_DECLARATION_FILE}`;
1123
1184
  // ABSENCE IS ONLY AN ANSWER ABOUT A COMMIT THAT WAS READ. A repository
1124
1185
  // missing from this layout, or one lacking the pinned commit, would
1125
1186
  // otherwise read as "declares nothing", and `dist-check` would grade a lock
@@ -1135,21 +1196,17 @@ export function readComposedProcessDeclarations(
1135
1196
  'before resolving',
1136
1197
  );
1137
1198
  }
1138
- try {
1139
- execFileSync('git', ['-C', dir, 'cat-file', '-e', `${sourceCommit}:${declarationPath}`], {
1140
- stdio: ['ignore', 'ignore', 'ignore'],
1141
- });
1142
- } catch {
1143
- continue; // declares no composed-process image at this commit
1144
- }
1199
+ const declarationDir = composedProcessDeclarationDir(dir, sourceCommit, enums);
1200
+ if (declarationDir === null) {continue;} // declares no composed-process image at this commit
1201
+ const declarationPath = `${declarationDir}/${COMPOSED_PROCESS_DECLARATION_FILE}`;
1145
1202
  const sourceId = sourceIds.get(repo);
1146
1203
  const repoRelative = relative(base, dir).split(sep).join('/');
1147
1204
  declarations.push({
1148
1205
  repo,
1149
1206
  sourceId,
1150
1207
  sourceCommit,
1151
- carriage: composedProcessCarriage(structure, enums, repo, sourceCommit, locate),
1152
- path: `${repoRelative}/${COMPOSED_PROCESS_IMAGE_PATH}`,
1208
+ carriage: composedProcessCarriage(structure, enums, repo, sourceCommit, locate, declarationDir),
1209
+ path: `${repoRelative}/${declarationDir}`,
1153
1210
  sourceManifestPath: `${repoRelative}/${declarationPath}`,
1154
1211
  sourceManifestHash: exactSourceManifestHash(dir, declarationPath, sourceCommit),
1155
1212
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xemahq/xema",
3
- "version": "0.59.0",
3
+ "version": "0.59.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/xema-dev/xema-cli.git",
@@ -100,7 +100,7 @@
100
100
  "typecheck": "tsc --noEmit"
101
101
  },
102
102
  "xemaRelease": {
103
- "sourceDigest": "sha256:bdd50b327d2da70bdc17c4cdcfce8ed38500fbd68aea8f23029c53d45ddbcb86",
104
- "sha": "9e648fd62243cb0fc9df74680ce6c2a110a901ad"
103
+ "sourceDigest": "sha256:f02866c7d95e9f1f32bbbf2879720aa6c6a4ff30ea4c7ac306047775483f31bd",
104
+ "sha": "36535b2452d6413f38a32eafc2544ba463c41f62"
105
105
  }
106
106
  }