open-standards/wai/wai-sink-swift/TestHost/WaiSinkTestHost.xcodeproj/project.pbxproj
Transaction Science 83cf8952e7 A sink's model policy held to a corpus: every decode through the C interface and each wrapper
`live-conformance/model-sink/cases.json`, written by `wai_model_policy_vectors sink gen` from fixed
seeds and the committed integer vectors, which it names and never copies: the operator's policy and
its successor (which drops one set), a key log whose second revision revokes a set by its digest,
another under the listing of its one member and a sealed set's opened bytes, a device attestation,
two configurations, five a sink must refuse to hold, decode cases over the committed vectors at
their instants (permitted sets, a payload the decoder refuses, a set outside the class, a set for
another capability, a capability that runs no set, the revoked sets, the successor's start, both
ends of the span, an attestation that has lapsed), every object of a frame stream permitted and
refused, gate cases over a page's WebNN paths and a sealed set, the run reports a sink signs and the
operator's roll-up. Every outcome is stated by the generator, never copied from the check.

- `tests/model_sink_corpus.rs` (feature `model_policy`): the file regenerates byte for byte, and
  the reference's check gives every configuration, gate, decode and frame case its outcome, every
  code native-sink §14 names refusing one.
- `tests/model_sink.rs` (`sink_decode`, `ffi`): every case through the C interface, the GPU
  offered and on the CPU alone; decoded cases give the bytes of a decoder with no policy, refused
  ones no bytes and the code; the reports hold exactly the decodes stated; the roll-up's class lines
  are the corpus's, units aside; both periods' bundles verify (`wai_model_verify`). With
  `WAI_MODEL_SINK_OUT` the bundles are written for `wai model verify` and the second
  implementation.
- The Swift package's `ModelPolicyTests` and the Kotlin library's `ModelPolicyTest` (host JVM,
  through the JNI layer) run the corpus through their wrappers; scripts/build-xcframework.sh stages
  it, and TestHost bundles it.
- `wai-web`'s `model_gate` gives every gate case its outcome and names every set as the corpus does.
- `live-conformance/model_sink_verify.py`, the second implementation, written from the texts and
  sharing no code with wai-rs, gives every case its outcome, verifies the bundles a test wrote
  (`--bundles`), and catches 12 of 12 mutated copies and 18 of 18 weakened verifiers.
- CI: the conformance step `model-sink` (its unit tests, the corpus test, wai-web's tests and the
  independent verifier); wai-sink-android.yml's JVM job runs tests/model_sink.rs before the Kotlin
  tests and requires ModelPolicyTest to run; both sink workflows trigger on the corpus.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-11 21:11:15 -05:00

402 lines
15 KiB
Text

// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 60;
objects = {
/* Begin PBXBuildFile section */
C6CE8C7E4938817BF4BCABFF /* TestHostApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1041B7906D7B096E3643B1B /* TestHostApp.swift */; };
544DBACF461758F6B2FDC039 /* CorpusTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A5E60253615E824114566F5 /* CorpusTests.swift */; };
D30365AA749292E9326EB7C3 /* RelayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88FDFFE145C54F5A505BBCD2 /* RelayTests.swift */; };
9A7F4044E2A395589B191B7F /* PlayerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F9CE7F3619129CB4B9B8D4F /* PlayerTests.swift */; };
3D0C2A6E8F51B7A40E9D1C21 /* IntDecodeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4E19C25A0D63F81C2E9A44 /* IntDecodeTests.swift */; };
6D1A40C2E57B93F08A2C4E15 /* ModelPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F8B2D60A1C3E579B0D2F846 /* ModelPolicyTests.swift */; };
B9D61AF752DC4EAAC6FBA797 /* TestOrigin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65F7CE59F63D57CB1DCD29F7 /* TestOrigin.swift */; };
9E2F61B03C7A4D58A1B6E0F3 /* int in Resources */ = {isa = PBXBuildFile; fileRef = 2C8D4A17E6F0935B7A1D2E68 /* int */; };
8C3E5A71D0B24F96E1A7C352 /* model in Resources */ = {isa = PBXBuildFile; fileRef = 2A9F6C04B8E1D357A4C0B9E1 /* model */; };
5CA5ADA6C9E913D5906597DA /* vectors.json in Resources */ = {isa = PBXBuildFile; fileRef = 80C3A35220EAC539D552CC16 /* vectors.json */; };
F72ECBAE9C8D2F2356C8EBF0 /* WaiSink in Frameworks */ = {isa = PBXBuildFile; productRef = 5E334103A819FD92FEA7DDC7 /* WaiSink */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
40BDE8EEA9AC9C0554879BBA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = A04707B9142B2156A9C4937B /* Project object */;
proxyType = 1;
remoteGlobalIDString = FBBD6B7BA102E6050DCFEFA7;
remoteInfo = WaiSinkTestHost;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
C1041B7906D7B096E3643B1B /* TestHostApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHostApp.swift; sourceTree = "<group>"; };
E5A931286D88630980B3F829 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
7A5E60253615E824114566F5 /* CorpusTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CorpusTests.swift; sourceTree = "<group>"; };
88FDFFE145C54F5A505BBCD2 /* RelayTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayTests.swift; sourceTree = "<group>"; };
8F9CE7F3619129CB4B9B8D4F /* PlayerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerTests.swift; sourceTree = "<group>"; };
65F7CE59F63D57CB1DCD29F7 /* TestOrigin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestOrigin.swift; sourceTree = "<group>"; };
7B4E19C25A0D63F81C2E9A44 /* IntDecodeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntDecodeTests.swift; sourceTree = "<group>"; };
4F8B2D60A1C3E579B0D2F846 /* ModelPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelPolicyTests.swift; sourceTree = "<group>"; };
2C8D4A17E6F0935B7A1D2E68 /* int */ = {isa = PBXFileReference; lastKnownFileType = folder; path = int; sourceTree = "<group>"; };
2A9F6C04B8E1D357A4C0B9E1 /* model */ = {isa = PBXFileReference; lastKnownFileType = folder; path = model; sourceTree = "<group>"; };
80C3A35220EAC539D552CC16 /* vectors.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = vectors.json; sourceTree = "<group>"; };
318E03F14E590262332C94CB /* WaiSinkTestHost.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WaiSinkTestHost.app; sourceTree = BUILT_PRODUCTS_DIR; };
10BBA89921478B03732BAEC9 /* WaiSinkDeviceTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WaiSinkDeviceTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
96879C3466C281C394C8002A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
89424F3B974ADA5FFD0BBCF8 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
F72ECBAE9C8D2F2356C8EBF0 /* WaiSink in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
9810E6C49F4800B33D8EB323 = {
isa = PBXGroup;
children = (
97847F8E009EA1F7DE942A4F,
3288A55BC89EF9027D5B30F6,
02DD1ECD20830A9672A2189E,
);
sourceTree = "<group>";
};
97847F8E009EA1F7DE942A4F = {
isa = PBXGroup;
children = (
C1041B7906D7B096E3643B1B,
E5A931286D88630980B3F829,
);
path = App;
sourceTree = "<group>";
};
3288A55BC89EF9027D5B30F6 = {
isa = PBXGroup;
children = (
7A5E60253615E824114566F5,
88FDFFE145C54F5A505BBCD2,
8F9CE7F3619129CB4B9B8D4F,
65F7CE59F63D57CB1DCD29F7,
7B4E19C25A0D63F81C2E9A44,
4F8B2D60A1C3E579B0D2F846,
E64D067B2A6601FFFF8AABEA,
);
name = WaiSinkTests;
path = ../Tests/WaiSinkTests;
sourceTree = "<group>";
};
E64D067B2A6601FFFF8AABEA = {
isa = PBXGroup;
children = (
80C3A35220EAC539D552CC16,
2C8D4A17E6F0935B7A1D2E68,
2A9F6C04B8E1D357A4C0B9E1,
);
path = Resources;
sourceTree = "<group>";
};
02DD1ECD20830A9672A2189E = {
isa = PBXGroup;
children = (
318E03F14E590262332C94CB,
10BBA89921478B03732BAEC9,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
FBBD6B7BA102E6050DCFEFA7 /* WaiSinkTestHost */ = {
isa = PBXNativeTarget;
buildConfigurationList = BA9DE0DC5B069A5AE0018414;
buildPhases = (
0A6FB99DEE19961C494CC760 /* Sources */,
96879C3466C281C394C8002A /* Frameworks */,
83757C9F1A7E13F90E845924 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = WaiSinkTestHost;
productName = WaiSinkTestHost;
productReference = 318E03F14E590262332C94CB /* WaiSinkTestHost.app */;
productType = "com.apple.product-type.application";
};
7ED98ED206A81222663D2681 /* WaiSinkDeviceTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 49851C86906C78FE3E20F5E4;
buildPhases = (
107A2265737DFCE0776A2769 /* Sources */,
89424F3B974ADA5FFD0BBCF8 /* Frameworks */,
9007C5A298B9B03330FDDD18 /* Resources */,
);
buildRules = (
);
dependencies = (
E81D85F5892D009FED75E8F8 /* PBXTargetDependency */,
);
name = WaiSinkDeviceTests;
packageProductDependencies = (
5E334103A819FD92FEA7DDC7 /* WaiSink */,
);
productName = WaiSinkDeviceTests;
productReference = 10BBA89921478B03732BAEC9 /* WaiSinkDeviceTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
A04707B9142B2156A9C4937B /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1500;
LastUpgradeCheck = 1500;
TargetAttributes = {
7ED98ED206A81222663D2681 = {
TestTargetID = FBBD6B7BA102E6050DCFEFA7;
};
};
};
buildConfigurationList = 97F7C54C58FC3D1A6EE88FE9;
compatibilityVersion = "Xcode 15.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 9810E6C49F4800B33D8EB323;
packageReferences = (
699A4E1E8E46E81D12855AF6 /* XCLocalSwiftPackageReference ".." */,
);
productRefGroup = 02DD1ECD20830A9672A2189E /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
FBBD6B7BA102E6050DCFEFA7 /* WaiSinkTestHost */,
7ED98ED206A81222663D2681 /* WaiSinkDeviceTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
83757C9F1A7E13F90E845924 = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
9007C5A298B9B03330FDDD18 = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
5CA5ADA6C9E913D5906597DA,
9E2F61B03C7A4D58A1B6E0F3,
8C3E5A71D0B24F96E1A7C352,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
0A6FB99DEE19961C494CC760 = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
C6CE8C7E4938817BF4BCABFF,
);
runOnlyForDeploymentPostprocessing = 0;
};
107A2265737DFCE0776A2769 = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
544DBACF461758F6B2FDC039,
D30365AA749292E9326EB7C3,
9A7F4044E2A395589B191B7F,
B9D61AF752DC4EAAC6FBA797,
3D0C2A6E8F51B7A40E9D1C21,
6D1A40C2E57B93F08A2C4E15,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
E81D85F5892D009FED75E8F8 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = FBBD6B7BA102E6050DCFEFA7 /* WaiSinkTestHost */;
targetProxy = 40BDE8EEA9AC9C0554879BBA /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
775A56EB7A864A49D082DC97 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_TESTABILITY = YES;
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = auto;
SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,3";
TVOS_DEPLOYMENT_TARGET = 16.0;
};
name = Debug;
};
6A2E875F2D18C9B63FB856EF /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_TESTABILITY = NO;
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
ONLY_ACTIVE_ARCH = NO;
SDKROOT = auto;
SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator";
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,3";
TVOS_DEPLOYMENT_TARGET = 16.0;
};
name = Release;
};
A34B0A48ACE51FBA037C0699 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = App/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "WAI sink tests";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
LD_RUNPATH_SEARCH_PATHS = ("$(inherited)", "@executable_path/Frameworks");
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = science.transaction.wai.sink-test-host;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = NO;
};
name = Debug;
};
E3C28B6F3BB0CD785E0296A1 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = App/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "WAI sink tests";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
LD_RUNPATH_SEARCH_PATHS = ("$(inherited)", "@executable_path/Frameworks");
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = science.transaction.wai.sink-test-host;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = NO;
};
name = Release;
};
EC325C8F2E8493636267291E /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = ("$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks");
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = science.transaction.wai.sink-test-host.tests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = NO;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/WaiSinkTestHost.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/WaiSinkTestHost";
};
name = Debug;
};
36927F45B6EEBE46164AFB89 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = ("$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks");
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = science.transaction.wai.sink-test-host.tests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = NO;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/WaiSinkTestHost.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/WaiSinkTestHost";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
97F7C54C58FC3D1A6EE88FE9 = {
isa = XCConfigurationList;
buildConfigurations = (
775A56EB7A864A49D082DC97 /* Debug */,
6A2E875F2D18C9B63FB856EF /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
BA9DE0DC5B069A5AE0018414 = {
isa = XCConfigurationList;
buildConfigurations = (
A34B0A48ACE51FBA037C0699 /* Debug */,
E3C28B6F3BB0CD785E0296A1 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
49851C86906C78FE3E20F5E4 = {
isa = XCConfigurationList;
buildConfigurations = (
EC325C8F2E8493636267291E /* Debug */,
36927F45B6EEBE46164AFB89 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCLocalSwiftPackageReference section */
699A4E1E8E46E81D12855AF6 /* XCLocalSwiftPackageReference ".." */ = {
isa = XCLocalSwiftPackageReference;
relativePath = ..;
};
/* End XCLocalSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
5E334103A819FD92FEA7DDC7 /* WaiSink */ = {
isa = XCSwiftPackageProductDependency;
package = 699A4E1E8E46E81D12855AF6 /* XCLocalSwiftPackageReference ".." */;
productName = WaiSink;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = A04707B9142B2156A9C4937B /* Project object */;
}