From 4d026bb3d9617266650404e4dd14301c3bf1b244 Mon Sep 17 00:00:00 2001 From: midiakiasat Date: Sat, 18 Jul 2026 20:08:05 +0200 Subject: [PATCH] Close Move 141 public surface backlink fanout --- README.md | 31 +++ ...VE142_SURFACE_BACKLINK_FANOUT_CLOSURE.json | 54 +++++ package.json | 9 +- ...2-surface-backlink-fanout-closure-audit.sh | 125 ++++++++++ ...ove142-surface-backlink-fanout-closure.mjs | 220 ++++++++++++++++++ ...2-surface-backlink-fanout-closure.test.mjs | 27 +++ 6 files changed, 463 insertions(+), 3 deletions(-) create mode 100644 control/ANTIMATTERIUM_CONTROL_MOVE142_SURFACE_BACKLINK_FANOUT_CLOSURE.json create mode 100755 scripts/move142-surface-backlink-fanout-closure-audit.sh create mode 100755 scripts/verify-move142-surface-backlink-fanout-closure.mjs create mode 100644 tests/move142-surface-backlink-fanout-closure.test.mjs diff --git a/README.md b/README.md index 3b33c2c..bfd0941 100644 --- a/README.md +++ b/README.md @@ -1694,3 +1694,34 @@ Boundary: - No current production claim: true - No starship claim: true - No physical production instructions: true + +## Move 142 — CONTROL closes Move 141 public surface backlink fanout + +CONTROL v0.2.69 closes the Move 141 public-surface backlink fanout. + +Source authority: + +- CONTROL v0.2.68 release: https://github.com/ANTIMATTERIUM/CONTROL/releases/tag/v0.2.68-antimatterium-control-move139-surface-closure +- Successful verify CI: https://github.com/ANTIMATTERIUM/CONTROL/actions/runs/29654567950 +- Main SHA: 1b72f44cd0887ae62c23499274b1d023df35a9d1 +- Closure ID: d952f0926fbb5036879e354b301b8a17a77bb1088a133be7494590ad69de2b1e + +Bound public surfaces: + +- Core v0.2.83: https://github.com/ANTIMATTERIUM/ANTIMATTERIUM/releases/tag/v0.2.83-antimatterium-control-v0268-backlink +- WWW v0.1.79: https://github.com/ANTIMATTERIUM/WWW/releases/tag/v0.1.79-antimatterium-www-control-v0268-backlink +- Org profile v0.0.77: https://github.com/ANTIMATTERIUM/.github/releases/tag/v0.0.77-antimatterium-org-profile-control-v0268-backlink + +Move 142 closure ID: + +- 63c59d3b79e4d34cec2f33f72fc898aba3e8a1311f664f62b247107054b2b31d + +Boundary: + +- Exact public tag commits required: true +- External replay required: true +- Short public tag required: true +- No local root required: true +- No current production claim: true +- No starship claim: true +- No physical production instructions: true diff --git a/control/ANTIMATTERIUM_CONTROL_MOVE142_SURFACE_BACKLINK_FANOUT_CLOSURE.json b/control/ANTIMATTERIUM_CONTROL_MOVE142_SURFACE_BACKLINK_FANOUT_CLOSURE.json new file mode 100644 index 0000000..fd2f7cd --- /dev/null +++ b/control/ANTIMATTERIUM_CONTROL_MOVE142_SURFACE_BACKLINK_FANOUT_CLOSURE.json @@ -0,0 +1,54 @@ +{ + "schema": "antimatterium.control_surface_backlink_fanout_closure.v1", + "move": 124, + "package": { + "name": "@antimatterium/control", + "version": "0.2.69", + "tag": "v0.2.69-antimatterium-control-move141-surface-closure", + "release": "https://github.com/ANTIMATTERIUM/CONTROL/releases/tag/v0.2.69-antimatterium-control-move141-surface-closure" + }, + "source_authority": { + "control_version": "0.2.68", + "control_tag": "v0.2.68-antimatterium-control-move139-surface-closure", + "control_release": "https://github.com/ANTIMATTERIUM/CONTROL/releases/tag/v0.2.68-antimatterium-control-move139-surface-closure", + "verify_ci_run": "https://github.com/ANTIMATTERIUM/CONTROL/actions/runs/29654567950", + "main_sha": "1b72f44cd0887ae62c23499274b1d023df35a9d1", + "closure_id": "d952f0926fbb5036879e354b301b8a17a77bb1088a133be7494590ad69de2b1e" + }, + "surface_fanout": { + "core": { + "version": "0.2.83", + "tag": "v0.2.83-antimatterium-control-v0268-backlink", + "release": "https://github.com/ANTIMATTERIUM/ANTIMATTERIUM/releases/tag/v0.2.83-antimatterium-control-v0268-backlink", + "main_sha": "e28113708a52bd404bb321c6b5b786f72990b1c0", + "backlink_id": "1e5f194d9622e0abe5c7316d0d45a5b73f48b9854edc89e943498f52a405ed83" + }, + "www": { + "version": "0.1.79", + "tag": "v0.1.79-antimatterium-www-control-v0268-backlink", + "release": "https://github.com/ANTIMATTERIUM/WWW/releases/tag/v0.1.79-antimatterium-www-control-v0268-backlink", + "main_sha": "d424b8734f5db89a0d177364758d5b9a694e9886", + "backlink_id": "1d50ba398ce01f070a35153e1ad74e7460edb9ae95e97a58b57d5a9b529e3ea6" + }, + "org_profile": { + "version": "0.0.77", + "tag": "v0.0.77-antimatterium-org-profile-control-v0268-backlink", + "release": "https://github.com/ANTIMATTERIUM/.github/releases/tag/v0.0.77-antimatterium-org-profile-control-v0268-backlink", + "main_sha": "35a03a9daeb3c9d117df67685e7d4c8e4dd31e01", + "backlink_id": "dc0832d31542e4d403483a7a213a02992e70950cc3d20c1002af4648a4c16dcc" + } + }, + "closure": { + "move141_surface_backlinks_bound": true, + "exact_public_tag_commits_required": true, + "external_replay_required": true, + "short_public_tag_required": true, + "no_local_root_required": true + }, + "safety": { + "no_current_production_claim": true, + "no_starship_claim": true, + "no_physical_production_instructions": true + }, + "closure_id": "63c59d3b79e4d34cec2f33f72fc898aba3e8a1311f664f62b247107054b2b31d" +} diff --git a/package.json b/package.json index d08917c..3a91ea7 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "audit:rootless-reconstruction": "bash scripts/public-rootless-reconstruction-audit.sh", "replay": "bash scripts/cold-replay.sh", "scan": "node scripts/scan-public-safety.mjs", - "verify": "node scripts/verify-control.mjs && node scripts/scan-public-safety.mjs && node scripts/verify-ci-gate.mjs && node scripts/verify-ci-evidence-seal.mjs && node scripts/verify-bidirectional-public-closure.mjs && node scripts/verify-stranger-final-audit.mjs && node scripts/verify-public-release-matrix.mjs && node scripts/verify-public-stranger-ci.mjs && node scripts/verify-second-order-public-stranger-ci-closure.mjs && node scripts/verify-public-ecosystem-index.mjs && node scripts/verify-public-ecosystem-index-echo-closure.mjs && node scripts/verify-public-rootless-reconstruction-index.mjs && node scripts/verify-rootless-fanout-echo-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure.mjs && node scripts/verify-rootless-fanout-backpropagation-echo-closure.mjs && node scripts/verify-rootless-fanout-backpropagation-echo-fanout-closure.mjs && node scripts/verify-rootless-fanout-backpropagation-echo-fanout-backlink-closure.mjs && node scripts/verify-rootless-fanout-backpropagation-echo-fanout-backlink-closure-backpropagation-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure-backlink-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure-backlink-closure-fanout-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure-backlink-closure-fanout-closure-backlink-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure-backlink-closure-fanout-closure-backlink-closure-backlink-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure-backlink-closure-fanout-closure-backlink-closure-backlink-closure-backlink-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure-backlink-closure-fanout-closure-backlink-closure-backlink-closure-backlink-closure-backlink-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure-backlink-closure-fanout-closure-backlink-closure-backlink-closure-backlink-closure-backlink-closure-backlink-closure.mjs && node scripts/verify-move38-surface-backlink-fanout-closure.mjs && node scripts/verify-move40-surface-backlink-fanout-closure.mjs && node scripts/verify-move42-surface-backlink-fanout-closure.mjs && node scripts/verify-move44-surface-backlink-fanout-closure.mjs && node scripts/verify-move46-surface-backlink-fanout-closure.mjs && node scripts/verify-move48-surface-backlink-fanout-closure.mjs && node scripts/verify-move50-surface-backlink-fanout-closure.mjs && node scripts/verify-move52-surface-backlink-fanout-closure.mjs && node scripts/verify-move54-surface-backlink-fanout-closure.mjs && node scripts/verify-move56-surface-backlink-fanout-closure.mjs && node scripts/verify-move58-surface-backlink-fanout-closure.mjs && node scripts/verify-move60-surface-backlink-fanout-closure.mjs && node scripts/verify-move62-surface-backlink-fanout-closure.mjs && node scripts/verify-move64-surface-backlink-fanout-closure.mjs && node scripts/verify-move66-surface-backlink-fanout-closure.mjs && node scripts/verify-move68-surface-backlink-fanout-closure.mjs && node scripts/verify-move70-surface-backlink-fanout-closure.mjs && node scripts/verify-move72-surface-backlink-fanout-closure.mjs && node scripts/verify-move74-surface-backlink-fanout-closure.mjs && node scripts/verify-move76-surface-backlink-fanout-closure.mjs && node scripts/verify-move78-surface-backlink-fanout-closure.mjs && node scripts/verify-move80-surface-backlink-fanout-closure.mjs && node scripts/verify-move82-surface-backlink-fanout-closure.mjs && node scripts/verify-move84-surface-backlink-fanout-closure.mjs && node scripts/verify-move86-surface-backlink-fanout-closure.mjs && node scripts/verify-move88-surface-backlink-fanout-closure.mjs && node scripts/verify-move90-surface-backlink-fanout-closure.mjs && node scripts/verify-move92-surface-backlink-fanout-closure.mjs && node scripts/verify-move94-surface-backlink-fanout-closure.mjs && node scripts/verify-move96-surface-backlink-fanout-closure.mjs && node scripts/verify-move98-surface-backlink-fanout-closure.mjs && node scripts/verify-move100-surface-backlink-fanout-closure.mjs && node scripts/verify-move102-surface-backlink-fanout-closure.mjs && node scripts/verify-move104-surface-backlink-fanout-closure.mjs && node scripts/verify-move106-surface-backlink-fanout-closure.mjs && node scripts/verify-move108-surface-backlink-fanout-closure.mjs && node scripts/verify-move110-surface-backlink-fanout-closure.mjs && node scripts/verify-move112-surface-backlink-fanout-closure.mjs && node scripts/verify-move114-surface-backlink-fanout-closure.mjs && node scripts/verify-move116-surface-backlink-fanout-closure.mjs && node scripts/verify-move118-surface-backlink-fanout-closure.mjs && node scripts/verify-move120-surface-backlink-fanout-closure.mjs && node scripts/verify-move122-surface-backlink-fanout-closure.mjs && node scripts/verify-move124-surface-backlink-fanout-closure.mjs && node scripts/verify-move126-surface-backlink-fanout-closure.mjs && node scripts/verify-move128-surface-backlink-fanout-closure.mjs && node scripts/verify-move130-surface-backlink-fanout-closure.mjs && node scripts/verify-move132-surface-backlink-fanout-closure.mjs && node scripts/verify-move134-surface-backlink-fanout-closure.mjs && node scripts/verify-move136-surface-backlink-fanout-closure.mjs && node scripts/verify-move138-surface-backlink-fanout-closure.mjs && node scripts/verify-move140-surface-backlink-fanout-closure.mjs", + "verify": "node scripts/verify-control.mjs && node scripts/scan-public-safety.mjs && node scripts/verify-ci-gate.mjs && node scripts/verify-ci-evidence-seal.mjs && node scripts/verify-bidirectional-public-closure.mjs && node scripts/verify-stranger-final-audit.mjs && node scripts/verify-public-release-matrix.mjs && node scripts/verify-public-stranger-ci.mjs && node scripts/verify-second-order-public-stranger-ci-closure.mjs && node scripts/verify-public-ecosystem-index.mjs && node scripts/verify-public-ecosystem-index-echo-closure.mjs && node scripts/verify-public-rootless-reconstruction-index.mjs && node scripts/verify-rootless-fanout-echo-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure.mjs && node scripts/verify-rootless-fanout-backpropagation-echo-closure.mjs && node scripts/verify-rootless-fanout-backpropagation-echo-fanout-closure.mjs && node scripts/verify-rootless-fanout-backpropagation-echo-fanout-backlink-closure.mjs && node scripts/verify-rootless-fanout-backpropagation-echo-fanout-backlink-closure-backpropagation-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure-backlink-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure-backlink-closure-fanout-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure-backlink-closure-fanout-closure-backlink-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure-backlink-closure-fanout-closure-backlink-closure-backlink-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure-backlink-closure-fanout-closure-backlink-closure-backlink-closure-backlink-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure-backlink-closure-fanout-closure-backlink-closure-backlink-closure-backlink-closure-backlink-closure.mjs && node scripts/verify-rootless-fanout-backlink-closure-backpropagation-closure-fanout-backlink-closure-fanout-closure-backlink-closure-fanout-closure-backlink-closure-backlink-closure-backlink-closure-backlink-closure-backlink-closure.mjs && node scripts/verify-move38-surface-backlink-fanout-closure.mjs && node scripts/verify-move40-surface-backlink-fanout-closure.mjs && node scripts/verify-move42-surface-backlink-fanout-closure.mjs && node scripts/verify-move44-surface-backlink-fanout-closure.mjs && node scripts/verify-move46-surface-backlink-fanout-closure.mjs && node scripts/verify-move48-surface-backlink-fanout-closure.mjs && node scripts/verify-move50-surface-backlink-fanout-closure.mjs && node scripts/verify-move52-surface-backlink-fanout-closure.mjs && node scripts/verify-move54-surface-backlink-fanout-closure.mjs && node scripts/verify-move56-surface-backlink-fanout-closure.mjs && node scripts/verify-move58-surface-backlink-fanout-closure.mjs && node scripts/verify-move60-surface-backlink-fanout-closure.mjs && node scripts/verify-move62-surface-backlink-fanout-closure.mjs && node scripts/verify-move64-surface-backlink-fanout-closure.mjs && node scripts/verify-move66-surface-backlink-fanout-closure.mjs && node scripts/verify-move68-surface-backlink-fanout-closure.mjs && node scripts/verify-move70-surface-backlink-fanout-closure.mjs && node scripts/verify-move72-surface-backlink-fanout-closure.mjs && node scripts/verify-move74-surface-backlink-fanout-closure.mjs && node scripts/verify-move76-surface-backlink-fanout-closure.mjs && node scripts/verify-move78-surface-backlink-fanout-closure.mjs && node scripts/verify-move80-surface-backlink-fanout-closure.mjs && node scripts/verify-move82-surface-backlink-fanout-closure.mjs && node scripts/verify-move84-surface-backlink-fanout-closure.mjs && node scripts/verify-move86-surface-backlink-fanout-closure.mjs && node scripts/verify-move88-surface-backlink-fanout-closure.mjs && node scripts/verify-move90-surface-backlink-fanout-closure.mjs && node scripts/verify-move92-surface-backlink-fanout-closure.mjs && node scripts/verify-move94-surface-backlink-fanout-closure.mjs && node scripts/verify-move96-surface-backlink-fanout-closure.mjs && node scripts/verify-move98-surface-backlink-fanout-closure.mjs && node scripts/verify-move100-surface-backlink-fanout-closure.mjs && node scripts/verify-move102-surface-backlink-fanout-closure.mjs && node scripts/verify-move104-surface-backlink-fanout-closure.mjs && node scripts/verify-move106-surface-backlink-fanout-closure.mjs && node scripts/verify-move108-surface-backlink-fanout-closure.mjs && node scripts/verify-move110-surface-backlink-fanout-closure.mjs && node scripts/verify-move112-surface-backlink-fanout-closure.mjs && node scripts/verify-move114-surface-backlink-fanout-closure.mjs && node scripts/verify-move116-surface-backlink-fanout-closure.mjs && node scripts/verify-move118-surface-backlink-fanout-closure.mjs && node scripts/verify-move120-surface-backlink-fanout-closure.mjs && node scripts/verify-move122-surface-backlink-fanout-closure.mjs && node scripts/verify-move124-surface-backlink-fanout-closure.mjs && node scripts/verify-move126-surface-backlink-fanout-closure.mjs && node scripts/verify-move128-surface-backlink-fanout-closure.mjs && node scripts/verify-move130-surface-backlink-fanout-closure.mjs && node scripts/verify-move132-surface-backlink-fanout-closure.mjs && node scripts/verify-move134-surface-backlink-fanout-closure.mjs && node scripts/verify-move136-surface-backlink-fanout-closure.mjs && node scripts/verify-move138-surface-backlink-fanout-closure.mjs && node scripts/verify-move140-surface-backlink-fanout-closure.mjs && node scripts/verify-move142-surface-backlink-fanout-closure.mjs", "verify:bidirectional-closure": "node scripts/verify-bidirectional-public-closure.mjs", "verify:ci": "node scripts/verify-ci-gate.mjs", "verify:ci-evidence": "node scripts/verify-ci-evidence-seal.mjs", @@ -207,8 +207,11 @@ "test:move138-surface-backlink-fanout-closure": "node --test tests/move138-surface-backlink-fanout-closure.test.mjs", "verify:move140-surface-backlink-fanout-closure": "node scripts/verify-move140-surface-backlink-fanout-closure.mjs", "audit:move140-surface-backlink-fanout-closure": "bash scripts/move140-surface-backlink-fanout-closure-audit.sh", - "test:move140-surface-backlink-fanout-closure": "node --test tests/move140-surface-backlink-fanout-closure.test.mjs" + "test:move140-surface-backlink-fanout-closure": "node --test tests/move140-surface-backlink-fanout-closure.test.mjs", + "verify:move142-surface-backlink-fanout-closure": "node scripts/verify-move142-surface-backlink-fanout-closure.mjs", + "audit:move142-surface-backlink-fanout-closure": "bash scripts/move142-surface-backlink-fanout-closure-audit.sh", + "test:move142-surface-backlink-fanout-closure": "node --test tests/move142-surface-backlink-fanout-closure.test.mjs" }, "type": "module", - "version": "0.2.68" + "version": "0.2.69" } diff --git a/scripts/move142-surface-backlink-fanout-closure-audit.sh b/scripts/move142-surface-backlink-fanout-closure-audit.sh new file mode 100755 index 0000000..f5edbea --- /dev/null +++ b/scripts/move142-surface-backlink-fanout-closure-audit.sh @@ -0,0 +1,125 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "=== ANTIMATTERIUM MOVE 142 PUBLIC SURFACE BACKLINK FANOUT CLOSURE AUDIT ===" + +TMP_ROOT="$(mktemp -d)" +trap 'rm -rf "$TMP_ROOT"' EXIT + +clone_exact_tag() { + local label="$1" + local repo="$2" + local tag="$3" + local expected_sha="$4" + local destination="$5" + + echo "=== CLONE ${label} ===" + + git clone --quiet --no-checkout "git@github.com:${repo}.git" "$destination" + + git -C "$destination" fetch --quiet --force origin "refs/tags/${tag}:refs/tags/${tag}" + + local actual_sha + + actual_sha="$( + git -C "$destination" rev-parse "${tag}^{commit}" + )" + + if [[ "$actual_sha" != "$expected_sha" ]]; then + echo "AUDIT_TAG_SHA_MISMATCH=${repo}:${tag}" + echo "EXPECTED=$expected_sha" + echo "ACTUAL=$actual_sha" + exit 1 + fi + + git -C "$destination" checkout --quiet "$expected_sha" + + test "$( + git -C "$destination" rev-parse HEAD + )" = "$expected_sha" + + echo "AUDIT_TAG_SHA_OK=${repo}:${tag}:${actual_sha}" +} + +run_if_script() { + local directory="$1" + local script="$2" + + if ( + cd "$directory" + + node -e ' + const pkg = require("./package.json"); + process.exit( + pkg.scripts && pkg.scripts[process.argv[1]] + ? 0 + : 1 + ); + ' "$script" + ) + then + ( + cd "$directory" + npm run "$script" + ) + else + echo "SKIP_MISSING_SCRIPT=$script" + fi +} + +CONTROL_CLONE="$TMP_ROOT/control-v0268" +CORE_CLONE="$TMP_ROOT/core-v0283" +WWW_CLONE="$TMP_ROOT/www-v0179" +ORG_CLONE="$TMP_ROOT/org-profile-v0077" + +clone_exact_tag "control-v0268" "ANTIMATTERIUM/CONTROL" "v0.2.68-antimatterium-control-move139-surface-closure" "1b72f44cd0887ae62c23499274b1d023df35a9d1" "$CONTROL_CLONE" + +( + cd "$CONTROL_CLONE" + npm run verify:move140-surface-backlink-fanout-closure + npm run test:move140-surface-backlink-fanout-closure +) + +run_if_script "$CONTROL_CLONE" verify:privacy +run_if_script "$CONTROL_CLONE" verify:claims + +clone_exact_tag "core-v0283" "ANTIMATTERIUM/ANTIMATTERIUM" "v0.2.83-antimatterium-control-v0268-backlink" "e28113708a52bd404bb321c6b5b786f72990b1c0" "$CORE_CLONE" + +( + cd "$CORE_CLONE" + npm run verify:move141-control-v0268-backlink + npm run test:move141-control-v0268-backlink +) + +run_if_script "$CORE_CLONE" verify:privacy +run_if_script "$CORE_CLONE" verify:claims + +clone_exact_tag "www-v0179" "ANTIMATTERIUM/WWW" "v0.1.79-antimatterium-www-control-v0268-backlink" "d424b8734f5db89a0d177364758d5b9a694e9886" "$WWW_CLONE" + +( + cd "$WWW_CLONE" + npm run verify:move141-control-v0268-backlink + npm run test:move141-control-v0268-backlink +) + +run_if_script "$WWW_CLONE" verify:privacy +run_if_script "$WWW_CLONE" verify:claims + +clone_exact_tag "org-profile-v0077" "ANTIMATTERIUM/.github" "v0.0.77-antimatterium-org-profile-control-v0268-backlink" "35a03a9daeb3c9d117df67685e7d4c8e4dd31e01" "$ORG_CLONE" + +( + cd "$ORG_CLONE" + npm run verify:move141-control-v0268-backlink + npm run test:move141-control-v0268-backlink +) + +run_if_script "$ORG_CLONE" verify:privacy +run_if_script "$ORG_CLONE" verify:claims + +echo "ANTIMATTERIUM_MOVE142_SURFACE_BACKLINK_FANOUT_CLOSURE_AUDIT_PASS=true" +echo "ANTIMATTERIUM_MOVE141_SURFACE_BACKLINKS_REPLAYED=true" +echo "ANTIMATTERIUM_SHORT_PUBLIC_TAG_REQUIRED=true" +echo "ANTIMATTERIUM_NO_LOCAL_ROOT_REQUIRED=true" +echo "NO_CURRENT_PRODUCTION_CLAIM=true" +echo "NO_STARSHIP_CLAIM=true" +echo "NO_PHYSICAL_PRODUCTION_INSTRUCTIONS=true" diff --git a/scripts/verify-move142-surface-backlink-fanout-closure.mjs b/scripts/verify-move142-surface-backlink-fanout-closure.mjs new file mode 100755 index 0000000..c0e7d1a --- /dev/null +++ b/scripts/verify-move142-surface-backlink-fanout-closure.mjs @@ -0,0 +1,220 @@ +#!/usr/bin/env node +import fs from 'node:fs'; +import crypto from 'node:crypto'; + +function fail(message) { + console.error(message); + process.exit(1); +} + +function stable(value) { + if (Array.isArray(value)) { + return '[' + value.map(stable).join(',') + ']'; + } + + if (value && typeof value === 'object') { + return '{' + Object.keys(value) + .sort() + .map(key => JSON.stringify(key) + ':' + stable(value[key])) + .join(',') + '}'; + } + + return JSON.stringify(value); +} + +const receipt = JSON.parse( + fs.readFileSync("control/ANTIMATTERIUM_CONTROL_MOVE142_SURFACE_BACKLINK_FANOUT_CLOSURE.json", 'utf8') +); + +const expected = { + "schema": "antimatterium.control_surface_backlink_fanout_closure.v1", + "move": 124, + "package": { + "name": "@antimatterium/control", + "version": "0.2.69", + "tag": "v0.2.69-antimatterium-control-move141-surface-closure", + "release": "https://github.com/ANTIMATTERIUM/CONTROL/releases/tag/v0.2.69-antimatterium-control-move141-surface-closure" + }, + "source_authority": { + "control_version": "0.2.68", + "control_tag": "v0.2.68-antimatterium-control-move139-surface-closure", + "control_release": "https://github.com/ANTIMATTERIUM/CONTROL/releases/tag/v0.2.68-antimatterium-control-move139-surface-closure", + "verify_ci_run": "https://github.com/ANTIMATTERIUM/CONTROL/actions/runs/29654567950", + "main_sha": "1b72f44cd0887ae62c23499274b1d023df35a9d1", + "closure_id": "d952f0926fbb5036879e354b301b8a17a77bb1088a133be7494590ad69de2b1e" + }, + "surface_fanout": { + "core": { + "version": "0.2.83", + "tag": "v0.2.83-antimatterium-control-v0268-backlink", + "release": "https://github.com/ANTIMATTERIUM/ANTIMATTERIUM/releases/tag/v0.2.83-antimatterium-control-v0268-backlink", + "main_sha": "e28113708a52bd404bb321c6b5b786f72990b1c0", + "backlink_id": "1e5f194d9622e0abe5c7316d0d45a5b73f48b9854edc89e943498f52a405ed83" + }, + "www": { + "version": "0.1.79", + "tag": "v0.1.79-antimatterium-www-control-v0268-backlink", + "release": "https://github.com/ANTIMATTERIUM/WWW/releases/tag/v0.1.79-antimatterium-www-control-v0268-backlink", + "main_sha": "d424b8734f5db89a0d177364758d5b9a694e9886", + "backlink_id": "1d50ba398ce01f070a35153e1ad74e7460edb9ae95e97a58b57d5a9b529e3ea6" + }, + "org_profile": { + "version": "0.0.77", + "tag": "v0.0.77-antimatterium-org-profile-control-v0268-backlink", + "release": "https://github.com/ANTIMATTERIUM/.github/releases/tag/v0.0.77-antimatterium-org-profile-control-v0268-backlink", + "main_sha": "35a03a9daeb3c9d117df67685e7d4c8e4dd31e01", + "backlink_id": "dc0832d31542e4d403483a7a213a02992e70950cc3d20c1002af4648a4c16dcc" + } + }, + "closure": { + "move141_surface_backlinks_bound": true, + "exact_public_tag_commits_required": true, + "external_replay_required": true, + "short_public_tag_required": true, + "no_local_root_required": true + }, + "safety": { + "no_current_production_claim": true, + "no_starship_claim": true, + "no_physical_production_instructions": true + }, + "closure_id": "63c59d3b79e4d34cec2f33f72fc898aba3e8a1311f664f62b247107054b2b31d" +}; + +function check(path, actual, wanted) { + if (actual !== wanted) { + fail( + 'MOVE142_CHECK_FAILED ' + + path + + ': expected ' + + JSON.stringify(wanted) + + ', got ' + + JSON.stringify(actual) + ); + } +} + +check('schema', receipt.schema, expected.schema); +check('move', receipt.move, 124); + +check( + 'package.name', + receipt.package?.name, + expected.package.name +); + +check( + 'package.version', + receipt.package?.version, + expected.package.version +); + +check( + 'package.tag', + receipt.package?.tag, + expected.package.tag +); + +check( + 'package.release', + receipt.package?.release, + expected.package.release +); + +for (const key of [ + 'control_version', + 'control_tag', + 'control_release', + 'verify_ci_run', + 'main_sha', + 'closure_id' +]) { + check( + 'source_authority.' + key, + receipt.source_authority?.[key], + expected.source_authority[key] + ); +} + +for (const surface of ['core', 'www', 'org_profile']) { + for (const key of [ + 'version', + 'tag', + 'release', + 'main_sha', + 'backlink_id' + ]) { + check( + 'surface_fanout.' + surface + '.' + key, + receipt.surface_fanout?.[surface]?.[key], + expected.surface_fanout[surface][key] + ); + } +} + +for (const key of [ + 'move141_surface_backlinks_bound', + 'exact_public_tag_commits_required', + 'external_replay_required', + 'short_public_tag_required', + 'no_local_root_required' +]) { + check( + 'closure.' + key, + receipt.closure?.[key], + true + ); +} + +for (const key of [ + 'no_current_production_claim', + 'no_starship_claim', + 'no_physical_production_instructions' +]) { + check( + 'safety.' + key, + receipt.safety?.[key], + true + ); +} + +check( + 'closure_id', + receipt.closure_id, + expected.closure_id +); + +const canonical = structuredClone(receipt); +delete canonical.closure_id; + +const recomputed = crypto + .createHash('sha256') + .update(stable(canonical)) + .digest('hex'); + +if (recomputed !== receipt.closure_id) { + fail( + 'MOVE142_CLOSURE_ID_RECOMPUTE_FAILED expected ' + + receipt.closure_id + + ', got ' + + recomputed + ); +} + +console.log( + 'ANTIMATTERIUM_CONTROL_MOVE142_SURFACE_BACKLINK_FANOUT_CLOSURE_VERIFY_PASS=true' +); +console.log('ANTIMATTERIUM_MOVE141_SURFACE_BACKLINKS_BOUND=true'); +console.log('ANTIMATTERIUM_CONTROL_V0268_BOUND=true'); +console.log('ANTIMATTERIUM_CORE_V0283_BOUND=true'); +console.log('ANTIMATTERIUM_WWW_V0179_BOUND=true'); +console.log('ANTIMATTERIUM_ORG_PROFILE_V0077_BOUND=true'); +console.log('ANTIMATTERIUM_SHORT_PUBLIC_TAG_REQUIRED=true'); +console.log('ANTIMATTERIUM_NO_LOCAL_ROOT_REQUIRED=true'); +console.log( + 'MOVE142_SURFACE_BACKLINK_FANOUT_CLOSURE_ID=' + + receipt.closure_id +); +console.log('NO_CURRENT_PRODUCTION_CLAIM=true'); +console.log('NO_STARSHIP_CLAIM=true'); +console.log('NO_PHYSICAL_PRODUCTION_INSTRUCTIONS=true'); diff --git a/tests/move142-surface-backlink-fanout-closure.test.mjs b/tests/move142-surface-backlink-fanout-closure.test.mjs new file mode 100644 index 0000000..3698e96 --- /dev/null +++ b/tests/move142-surface-backlink-fanout-closure.test.mjs @@ -0,0 +1,27 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; +import { spawnSync } from 'node:child_process'; + +test('Move 142 CONTROL closure verifier exits cleanly', () => { + const result = spawnSync( + 'npm', + ['run', 'verify:move142-surface-backlink-fanout-closure'], + { encoding: 'utf8' } + ); + + assert.equal( + result.status, + 0, + result.stderr || result.stdout + ); + + assert.match( + result.stdout, + /ANTIMATTERIUM_CONTROL_MOVE142_SURFACE_BACKLINK_FANOUT_CLOSURE_VERIFY_PASS=true/ + ); + + assert.match( + result.stdout, + /MOVE142_SURFACE_BACKLINK_FANOUT_CLOSURE_ID=[a-f0-9]{64}/ + ); +});