AppSurface Search
Example

Complete neutral security fixtures

Source of truth

View source Edit this page

Last updated

These are the exact retained neutral Security recipes for arm64 and amd64, with independent host policies, portable bindings, material receipts, raw upstream indexes, and the previously inspected final-image identity. Both cover all three operation families. The production qualification records 887/888 checks. No binary material or secrets are included. The public owner approval reference describes this historical fixture; another host must independently accept its policy and availability before use.

Input arm64 amd64
Complete recipe recipe.json recipe.json
Independent exact policy policy.json policy.json
Portable local bindings bindings.json bindings.json
All material lengths/digests/origins materials.json materials.json
Retained final image (observation only) target-platform.json target-platform.json

Canonical recipe SHA256: arm64 fb7e99c8334a93c57d9dd626a92c6851cf8e044af5e332355e28b8f2b2719c4f; amd64 a3a809007eba3feadf626712c75bfe89543d451d228d6c27225a07516b3fbd83. Recipe files are the exact canonical serializer output. Binding path changes do not alter identity. target-platform.json is a retained observation, never an expected ID for a fresh build; the sample resolves the actual new local image itself.

Acquire the exact materials

Work from the repository root. The sample resolves each relative localPath against the directory containing bindings.json. The receipt path fields use the same base. The preparer runs from the repository root and prefixes each declared destination with that platform fixture directory. After resolution, task-owned captures remain under .gstack/tmp/issue-887-neutral/arm64/ or amd64/, named by material ID. Never commit that binary directory. Every filename, exact byte length and SHA256 is in the platform's materials.json.

  1. Copy the checked-in raw source-index.json, runtime-index.json and frontend-index.json into the corresponding task-owned paths without reserializing them. Their bytes hash to the original index digests. The neutral text theme is already checked in at shared/theme.properties; preserve its exact 19 bytes and no BOM. The signed keyring is captured from /usr/share/keyrings/ubuntu-archive-keyring.gpg in the retained Temurin graph and must hash to 80a36b0a6de2f69f49d2df75ef473ccde121e9e190b9ea01d20a4f63778d5c31 (3,607 bytes). Never discover/trust a replacement key from a live server.
  2. Obtain the exact source-oci, runtime-oci, and frontend-oci archive objects from the consumer material owner's retained store, verify each materials.json hash/length, and preserve them unchanged. Their upstream registry authorities are quay.io/keycloak/keycloak, docker.io/library/eclipse-temurin, and docker.io/docker/dockerfile; exact indexes/manifests/configs/diff IDs are in recipe.json. The frontend selected manifest is arm64 in both retained recipes. Pulling a tag or running docker save anew is not a way to reproduce the exact tar hash. If retained bytes are unavailable, stop and apply the rebuild-availability policy. A newly captured graph/archive requires explicit reviewed material/policy/recipe identities and fresh proof.
  3. Acquire every non-host material from its exact HTTPS URI in materials.json to its material-ID path. Verify SHA256 and byte length before capture. The table below lists the arm64 URLs; amd64 uses its complete receipt for its platform-specific package index and three Debian URLs. Do not follow an unapproved redirect, use a moved snapshot, or substitute a Maven mirror. The SDK repeats provenance and signed-index verification even for local cache bindings.
  4. Verify all 41 bound material IDs are present, their lengths do not exceed maxBytes, and every digest matches. All 41 local bindings intentionally remain in CapturedHostInputs; only materials explicitly marked capturedHostInput: true omit HTTPS URI. Downloaded/cached materials still require the policy's exact origin/namespace authorization. Never mark an unavailable downloadable material as host-captured to bypass authorization.

No retained store URL is invented here: distribution is host-owned and availability is an explicit prerequisite. The receipt supplies exact authorities and bytes, while the owner supplies restricted storage access privately. This fixture makes a missing capture actionable; it does not promise upstream indefinite retention or a one-command download of private archive objects.

Material ID (arm64) Exact bytes SHA256 Exact HTTPS URI
maven-8c5623b98f32d5f7 594782 8c5623b98f32d5f7e1287ff61ed50e08ab7b11381e991fff89327faabba42261 https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-core/2.21.7/jackson-core-2.21.7.jar
maven-1290c2795e93e8a6 1709095 1290c2795e93e8a6861a6c4d9ff0d844d32f5ea178362cb2721edf5561e828b1 https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.21.7/jackson-databind-2.21.7.jar
maven-e36f5237c1267983 1547706 e36f5237c1267983e5b88dc2169f6b9d7e50eceec6dc1ca31018e3877e14af66 https://repo.maven.apache.org/maven2/com/microsoft/sqlserver/mssql-jdbc/13.4.0.jre11/mssql-jdbc-13.4.0.jre11.jar
maven-0fac87dddd78f122 1859003 0fac87dddd78f1223139e8ef88e819c7f483c0a3835cdf5982ad5e4576d1d896 https://repo.maven.apache.org/maven2/org/freemarker/freemarker/2.3.35/freemarker-2.3.35.jar
maven-45aff76226830db2 51749 45aff76226830db257f4bc39a5bcff83d633e572fee9dc4e45cfa12af9a0a49a https://repo.maven.apache.org/maven2/io/micrometer/micrometer-commons/1.16.6/micrometer-commons-1.16.6.jar
maven-1957ef2deaffbc1f 910984 1957ef2deaffbc1fb98cebfd0f5b3109ecf19c994d7e5378598c20747ba8d68b https://repo.maven.apache.org/maven2/io/micrometer/micrometer-core/1.16.6/micrometer-core-1.16.6.jar
maven-4c0826d5e7c8522a 83925 4c0826d5e7c8522a8e111470b4e77f77b0a10f520eb5502ddd143fdbcedb2340 https://repo.maven.apache.org/maven2/io/micrometer/micrometer-observation/1.16.6/micrometer-observation-1.16.6.jar
maven-5f665369724caa8f 45408 5f665369724caa8ffbb3f83a492b02d1de17a1420758e4a55debcb6ee2bd5e2a https://repo.maven.apache.org/maven2/io/micrometer/micrometer-registry-prometheus-simpleclient/1.16.6/micrometer-registry-prometheus-simpleclient-1.16.6.jar
maven-f474b14c7734f15e 365383 f474b14c7734f15e0540394cb6f39d67777b7581a42919e4ac89d253d4efd929 https://repo.maven.apache.org/maven2/io/netty/netty-buffer/4.1.137.Final/netty-buffer-4.1.137.Final.jar
maven-9987b6a660b0a6b1 360116 9987b6a660b0a6b1f0d791485dae33180b3d1c63687c006fe6d3fd025e9e3798 https://repo.maven.apache.org/maven2/io/netty/netty-codec/4.1.137.Final/netty-codec-4.1.137.Final.jar
maven-2d9a33ce41bd9f6f 68663 2d9a33ce41bd9f6f607df95039e42518a1fca16f83c9bbfe72beb57df6e2489f https://repo.maven.apache.org/maven2/io/netty/netty-codec-dns/4.1.137.Final/netty-codec-dns-4.1.137.Final.jar
maven-5ffa58b94c5ac48f 38542 5ffa58b94c5ac48fb7e41843c18acf7a268e90b5b85423987829c9291ce3a5df https://repo.maven.apache.org/maven2/io/netty/netty-codec-haproxy/4.1.137.Final/netty-codec-haproxy-4.1.137.Final.jar
maven-0535bb5a736472be 692573 0535bb5a736472bef5c948d15eb273c4ab9f796656fc7c5d6b982ad92bddbd49 https://repo.maven.apache.org/maven2/io/netty/netty-codec-http/4.1.137.Final/netty-codec-http-4.1.137.Final.jar
maven-576ddcfb51b78e86 505543 576ddcfb51b78e86f145c9a52b60e500b1a1d5a257cafec8aa5416ffba044b49 https://repo.maven.apache.org/maven2/io/netty/netty-codec-http2/4.1.137.Final/netty-codec-http2-4.1.137.Final.jar
maven-4a6190e08988c058 121963 4a6190e08988c058bfeef2b5965e71946439c771abf721c68f4039b4e7b023e8 https://repo.maven.apache.org/maven2/io/netty/netty-codec-socks/4.1.137.Final/netty-codec-socks-4.1.137.Final.jar
maven-d31926b01adcc07a 740314 d31926b01adcc07af86f5e27b81b6d6c115df17d366e835d1fc3f5a1924e7e52 https://repo.maven.apache.org/maven2/io/netty/netty-common/4.1.137.Final/netty-common-4.1.137.Final.jar
maven-d0e4c6ee4779f59f 588804 d0e4c6ee4779f59f6ab2fb5d388e4f57147c82270164b37945764bb9bda96a44 https://repo.maven.apache.org/maven2/io/netty/netty-handler/4.1.137.Final/netty-handler-4.1.137.Final.jar
maven-843de10c4cef34cb 25841 843de10c4cef34cbc1a5344090f1b57db532fbebf141559862da675f6b656df4 https://repo.maven.apache.org/maven2/io/netty/netty-handler-proxy/4.1.137.Final/netty-handler-proxy-4.1.137.Final.jar
maven-b4cf2aeedd9fc7c8 37907 b4cf2aeedd9fc7c8c439bbfe574f63cfe5b83392e88bbc07ca0e8424b7cff955 https://repo.maven.apache.org/maven2/io/netty/netty-resolver/4.1.137.Final/netty-resolver-4.1.137.Final.jar
maven-898d63ca62ed68ff 188777 898d63ca62ed68ff46543c5344f969424b417f1e8d082fe2bb0181ba10144194 https://repo.maven.apache.org/maven2/io/netty/netty-resolver-dns/4.1.137.Final/netty-resolver-dns-4.1.137.Final.jar
maven-6251adc2a2921572 521982 6251adc2a2921572382732a2db188d4f4f2251fd6ebb49c5d44bbf33d6bfb1a7 https://repo.maven.apache.org/maven2/io/netty/netty-transport/4.1.137.Final/netty-transport-4.1.137.Final.jar
maven-55049554b799dc8e 147751 55049554b799dc8e53bf234fffa36e001f7b5b65c32994b9bd59fc6356f1c52f https://repo.maven.apache.org/maven2/io/netty/netty-transport-classes-epoll/4.1.137.Final/netty-transport-classes-epoll-4.1.137.Final.jar
maven-8056e7637f9948f9 44328 8056e7637f9948f953314894cf995ab664711b66c73c4cd5b593ae84f0b1048c https://repo.maven.apache.org/maven2/io/netty/netty-transport-native-unix-common/4.1.137.Final/netty-transport-native-unix-common-4.1.137.Final.jar
maven-82fb63a2dc90c0bd 42889 82fb63a2dc90c0bddb81e04065a1c06fb4c5be722ad5d64b46491daf8b6f9a01 https://repo.maven.apache.org/maven2/io/netty/netty-transport-native-epoll/4.1.137.Final/netty-transport-native-epoll-4.1.137.Final-linux-aarch_64.jar
maven-185db6053e0e9573 41506 185db6053e0e9573d36fa4eb6567b26139afaa4daa7bf5a068e661568304542b https://repo.maven.apache.org/maven2/io/netty/netty-transport-native-epoll/4.1.137.Final/netty-transport-native-epoll-4.1.137.Final-linux-x86_64.jar
maven-20af26bf6060bb80 10321819 20af26bf6060bb8005cc2389916812c1e0e998dc48d2ced7131b89461b54cff7 https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk18on/1.85/bcprov-jdk18on-1.85.jar
maven-c9f82b2d4e99c4bb 1315409 c9f82b2d4e99c4bbdfccf684e52cc06ea06a0b567bfd0d08f9c5a3f417055996 https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk18on/1.85/bcpkix-jdk18on-1.85.jar
maven-590f55ed5d685292 718812 590f55ed5d68529239898a4a5c4f730b6e37f45d1cfa3fbe51f8485abe32c42d https://repo.maven.apache.org/maven2/org/bouncycastle/bcutil-jdk18on/1.85/bcutil-jdk18on-1.85.jar
signed-release 137401 041541bfe3fd47a76c6ec9f560a0fd3905acbe8a6baa1a021fc3565077c6e9c1 https://snapshot.ubuntu.com/ubuntu/20261002T000000Z/dists/resolute-updates/InRelease
package-index 908295 4b46267e511cfe3a4d672c2f8840a55872befed0ceb27e964158f109cb640484 https://snapshot.ubuntu.com/ubuntu/20261002T000000Z/dists/resolute-updates/main/binary-arm64/Packages.gz
deb-libssl3t64 2769448 9fe87b6beec5de636a70e4fb6076517a39f5053c7e23e628c9459b94f85c75ff https://snapshot.ubuntu.com/ubuntu/20261002T000000Z/pool/main/o/openssl/libssl3t64_3.5.5-1ubuntu3.7_arm64.deb
deb-openssl 1222930 623ea7ec0eb80da3f40e89e3318a4e82d4c64146d206c90cabbce6998d822fa8 https://snapshot.ubuntu.com/ubuntu/20261002T000000Z/pool/main/o/openssl/openssl_3.5.5-1ubuntu3.7_arm64.deb
deb-openssl-provider-legacy 38424 757ec89120fe3f418a842342b3a0c596b89b0e3fb0ba770347dda1219f219bbd https://snapshot.ubuntu.com/ubuntu/20261002T000000Z/pool/main/o/openssl/openssl-provider-legacy_3.5.5-1ubuntu3.7_arm64.deb

Execute and reject a wrong identity

Use the complete commands in the example README. They use fresh task-owned snapshots/context/evidence paths. Choose a supported host/frontend combination and platform explicitly; the target platform alone is not a host compatibility promise. --wrong-identity uses a fresh capture directory, changes only the actual resolved config identity and must reject without evidence. Compare evidence by exact immutable identity and operation checks, never by the local tag or a fresh build's equality to target-platform.json.

Prepare portable bindings without changing the recipe

The optional prepare.sh uses POSIX shell plus sha256sum (Linux) or shasum -a 256 (macOS); it needs no Python, jq or SDK build. The host first places each exact retained/downloaded non-index object in its private digest store under its lowercase SHA256 filename. Index JSON and the text theme come from this checkout. The script verifies exact length and hash before copying, checks copied bytes, preserves existing mismatched destinations, and checks the canonical recipe digest before and after preparation. A failed preparation may leave earlier verified cache objects, but creates no accepted SDK snapshot or passing evidence. Retry only after classifying any partial owned copy.

sh examples/auth-keycloak-security-recipes/fixtures/prepare.sh arm64 /owned/digest-store

/owned/digest-store is the host's private storage argument, not a checked-in path or a supplied distribution endpoint. Run this from the repository root and use the same working directory for the sample commands. Every destination is the platform fixture directory joined with the relative path in bindings.json; for example ../../../../.gstack/tmp/issue-887-neutral/arm64/source-oci resolves to the repository-root cache, and ../shared/theme.properties resolves to the checked-in theme. Run the preparer and documented sample commands from the repository root; changing their working directory would break command-line project/JSON paths even though binding paths remain relative to their JSON file. For amd64 select amd64. The arm64 preparer and portable path layout have now passed actual execution: all 41 bound materials matched their declared lengths and hashes, and the canonical recipe remained unchanged. The compiled sample then passed the complete build/resolve/inspect/evidence flow with 887 checks; its wrong-identity control rejected without forbidden passing evidence. See the integrated v3 qualification for the retained receipt, 16 stage events and actual Docker/buildx observations. This seeded material-store run is not a cold-cache or human novice measurement; the amd64 portable preparer is not claimed executed by this arm64 proof.