GAL2_RC5_113_LINUX_OLD_PACKAGE_STRUCTURE_INSPECTION_V0_1
run_utc=2026-06-11T13:26:25Z
build=/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z
old_archive=/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_public_upload_candidate/GAL2-TimeContract-RC5-linux-installer-friendly-20260610-v0.4.tar.gz
work_dir=/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610

SOURCE_113_HASH
88e905b024ae4649ee45e668f0fe90f4d182ce848cb57cc9a3e34fad4e8bf07e  /Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/src/gal2d.py

OLD_ARCHIVE_HASH
a29bc04f97b8def9582e1ee05d67294f1fac9604d306a959893c6f3fb7639789  /Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_public_upload_candidate/GAL2-TimeContract-RC5-linux-installer-friendly-20260610-v0.4.tar.gz

OLD_ARCHIVE_CONTENTS
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/evidence/
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/requirements.txt
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/release_manifest/
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/systemd/
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/README_LINUX_INSTALL.md
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/docs/
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/scripts/
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/legal/
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/SHA256SUMS.txt
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2-doctor
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2-daemon-linux.sh
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2d.py
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2-daemon.sh
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/legal/CLAIM_BOUNDARY.md
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/legal/EVALUATOR_TERMS.md
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/legal/THIRD_PARTY_NOTICES.md
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/legal/DISCLAIMER.md
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/legal/SECURITY.md
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/scripts/uninstall.sh
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/scripts/install.sh
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/scripts/activate.sh
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/docs/RC5_PRODUCT_DELTA_FROM_RC31.md
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/systemd/gal2d.service
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/release_manifest/RC5_LINUX_RELEASE_NOTES.txt
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/evidence/rc5_ixoye_witness/
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/evidence/rc5_ixoye_witness/GAL2_RC5_IXOYE_WITNESS_RUN_20260610T161352Z_FINAL_EVIDENCE_PACKAGE.tar.gz
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/evidence/rc5_ixoye_witness/README_GAL2_RC5_CLIENT_DOWNLOAD.md
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/evidence/rc5_ixoye_witness/GAL2_RC5_IXOYE_WITNESS_RUN_20260610T161352Z_FINAL_EVIDENCE_PACKAGE.tar.gz.RECEIPT.txt
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/scripts/
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/com.gal2.daemon.plist
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/daemon.env.sample
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/scripts/uninstall_macos.sh
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/scripts/rollback_from_backup.sh
GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/scripts/uninstall_linux.sh

WORK_TREE
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/README_LINUX_INSTALL.md
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/SHA256SUMS.txt
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/docs/RC5_PRODUCT_DELTA_FROM_RC31.md
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/evidence/rc5_ixoye_witness/GAL2_RC5_IXOYE_WITNESS_RUN_20260610T161352Z_FINAL_EVIDENCE_PACKAGE.tar.gz
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/evidence/rc5_ixoye_witness/GAL2_RC5_IXOYE_WITNESS_RUN_20260610T161352Z_FINAL_EVIDENCE_PACKAGE.tar.gz.RECEIPT.txt
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/evidence/rc5_ixoye_witness/README_GAL2_RC5_CLIENT_DOWNLOAD.md
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/legal/CLAIM_BOUNDARY.md
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/legal/DISCLAIMER.md
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/legal/EVALUATOR_TERMS.md
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/legal/SECURITY.md
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/legal/THIRD_PARTY_NOTICES.md
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/com.gal2.daemon.plist
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/daemon.env.sample
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/scripts/rollback_from_backup.sh
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/scripts/uninstall_linux.sh
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/scripts/uninstall_macos.sh
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/release_manifest/RC5_LINUX_RELEASE_NOTES.txt
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/requirements.txt
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/scripts/activate.sh
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/scripts/install.sh
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/scripts/uninstall.sh
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/__pycache__/gal2-doctorcpython-313.pyc
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/__pycache__/gal2d.cpython-313.pyc
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2-daemon-linux.sh
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2-daemon.sh
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2-doctor
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2d.py
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/systemd/gal2d.service

VERSION_HITS_IN_WORK
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/daemon.env.sample:15:GAL2_IDLE_REFRESH_SEC=30
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/daemon.env.sample:29:GAL2_DAEMON_VERSION=1.1.1-rc5-ixoye-witness-validity-fix
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/daemon.env.sample:30:GAL2_CONTRACT_VERSION=1.1.1-contract-rc5-ixoye-witness-validity-fix
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/packaging/daemon.env.sample:36:GAL2_MIN_SLEW_DELTA_SEC=0.25
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/scripts/activate.sh:25:GAL2_IDLE_REFRESH_SEC=30
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/scripts/activate.sh:36:GAL2_DAEMON_VERSION=1.1.1-rc5-ixoye-witness-validity-fix
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/scripts/activate.sh:37:GAL2_CONTRACT_VERSION=1.1.1-contract-rc5-ixoye-witness-validity-fix
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/scripts/activate.sh:53:GAL2_MIN_SLEW_DELTA_SEC=0.25
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/legal/CLAIM_BOUNDARY.md:17:- valid_until
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2-daemon-linux.sh:30:export GAL2_IDLE_REFRESH_SEC="${GAL2_IDLE_REFRESH_SEC:-120}"
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2d.py:25:IDLE_REFRESH_SEC = float(os.getenv("GAL2_IDLE_REFRESH_SEC", "120"))
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2d.py:37:DAEMON_VERSION = os.getenv("GAL2_DAEMON_VERSION", "1.1.0-rc5-ixoye-witness")
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2d.py:38:CONTRACT_VERSION = os.getenv("GAL2_CONTRACT_VERSION", "1.1.0-contract-rc5-ixoye-witness")
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2d.py:111:        "service": "gal2d-rc5-ixoye-witness",
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2d.py:731:    valid_until = iso_from_epoch(local_serve_epoch + valid_for)
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2d.py:752:        "service": "gal2d-rc5-ixoye-witness",
/Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2d.py:766:        "valid_until": valid_until,
Binary file /Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/__pycache__/gal2d.cpython-313.pyc matches

KEY_FILES_HEADS

----- /Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/README_LINUX_INSTALL.md -----
# GAL-2 Time Contract RC5 Linux Installer Friendly Package

This Linux wrapper installs GAL-2 Time Contract RC5 as a local systemd service for controlled technical evaluation.

RC5 includes:
- RC4-derived 72h holdover policy fields.
- RC4-style uncertainty and rejoin fields.
- IXOYE witness_ref advisory-only out-of-band attestation reference.
- Included RC5 IXOYE witness evidence package.

GAL-2 governs. IXOYE witnesses. IXOYE does not affect safe_to_consume and is not a fallback time source.

Install:
sudo GAL2_ACCEPT_EVALUATOR_TERMS=1 ./scripts/install.sh

Verify:
curl -s http://127.0.0.1:9095/status | python3 -m json.tool
curl -s http://127.0.0.1:9095/contract | python3 -m json.tool
/usr/local/gal2/bin/gal2-doctor --base-url http://127.0.0.1:9095

----- /Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/scripts/install.sh -----
#!/usr/bin/env bash
set -euo pipefail

SRC_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
GAL2_HOME="${GAL2_HOME:-/usr/local/gal2}"
GAL2_ETC="${GAL2_ETC:-/etc/gal2}"

if [[ "${EUID}" -ne 0 ]]; then
  echo "Please run as root: sudo ./scripts/install.sh"
  exit 1
fi

echo "GAL-2 Time Contract RC3.1 is a Limited Availability evaluator release."
echo "Use is subject to legal/EVALUATOR_TERMS.md, legal/DISCLAIMER.md, legal/CLAIM_BOUNDARY.md, and legal/SECURITY.md."
echo "This release is not certified for production critical infrastructure, safety-critical systems, regulated trading, medical systems, aviation, emergency services, or other high-risk environments without a separate written agreement."
echo

if [[ "${GAL2_ACCEPT_EVALUATOR_TERMS:-0}" != "1" ]]; then
  printf "Type ACCEPT to continue: "
  read -r GAL2_ACCEPT_INPUT
  if [[ "$GAL2_ACCEPT_INPUT" != "ACCEPT" ]]; then
    echo "Install cancelled."
    exit 1
  fi
fi

echo "Installing GAL-2 Time Contract for Linux..."
mkdir -p "$GAL2_HOME/bin" "$GAL2_HOME/var/cache" "$GAL2_HOME/var/usage" "$GAL2_HOME/logs" "$GAL2_ETC"

install -m 0755 "$SRC_DIR/src/gal2d.py" "$GAL2_HOME/bin/gal2d.py"
install -m 0755 "$SRC_DIR/src/gal2-doctor" "$GAL2_HOME/bin/gal2-doctor"
install -m 0755 "$SRC_DIR/src/gal2-daemon-linux.sh" "$GAL2_HOME/bin/gal2-daemon-linux.sh"

if [[ ! -f "$GAL2_ETC/daemon.env" ]]; then
  install -m 0600 "$SRC_DIR/packaging/daemon.env.sample" "$GAL2_ETC/daemon.env"
  echo "Created $GAL2_ETC/daemon.env from sample. Edit GAL2_API_KEY before production use."
else
  chmod 600 "$GAL2_ETC/daemon.env"
  echo "Preserved existing $GAL2_ETC/daemon.env"
fi

if command -v python3 >/dev/null 2>&1; then
  if python3 -m venv "$GAL2_HOME/venv" >/dev/null 2>&1; then
    "$GAL2_HOME/venv/bin/python3" -m pip install --upgrade pip >/dev/null
    "$GAL2_HOME/venv/bin/python3" -m pip install -r "$SRC_DIR/requirements.txt"
  else
    echo "python3 venv unavailable. Falling back to system python3."
  fi
else
  echo "python3 not found. Install python3 before starting GAL-2."
  exit 1
fi

if command -v systemctl >/dev/null 2>&1; then
  install -m 0644 "$SRC_DIR/systemd/gal2d.service" /etc/systemd/system/gal2d.service
  systemctl daemon-reload
  systemctl enable gal2d.service
  systemctl restart gal2d.service || true
  echo "systemd service installed: gal2d.service"
else
  echo "systemctl not available. Start manually with:"
  echo "  GAL2_ENV=$GAL2_ETC/daemon.env GAL2_HOME=$GAL2_HOME $GAL2_HOME/bin/gal2-daemon-linux.sh"
fi

echo "GAL-2 Linux install complete."

----- /Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/scripts/uninstall.sh -----
#!/usr/bin/env bash
set -euo pipefail

if [[ "${EUID}" -ne 0 ]]; then
  echo "Please run as root: sudo ./scripts/uninstall.sh"
  exit 1
fi

echo "Uninstalling GAL-2 Time Contract Linux service..."

if command -v systemctl >/dev/null 2>&1; then
  systemctl stop gal2d.service 2>/dev/null || true
  systemctl disable gal2d.service 2>/dev/null || true
  rm -f /etc/systemd/system/gal2d.service
  systemctl daemon-reload 2>/dev/null || true
fi

echo "Preserving /etc/gal2/daemon.env by default."
echo "Preserving /usr/local/gal2 by default."
echo "Remove manually if desired:"
echo "  sudo rm -rf /usr/local/gal2 /etc/gal2"

----- /Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/scripts/activate.sh -----
#!/usr/bin/env bash
set -euo pipefail

if [[ "${EUID}" -ne 0 ]]; then
  echo "Please run as root: sudo ./scripts/activate.sh"
  exit 1
fi

printf "Enter GAL-2 API key: "
stty -echo
IFS= read -r GAL2_API_KEY
stty echo
printf "\n"

mkdir -p /etc/gal2

cat > /etc/gal2/daemon.env <<ENV
GAL2_API_KEY=$GAL2_API_KEY
GAL2_API_URL=https://api-v2.gal-2.com/time
GAL2_BIND_HOST=127.0.0.1
GAL2_BIND_PORT=9095
GAL2_CACHE_FILE=/usr/local/gal2/var/cache/gal2_cache.json
GAL2_USAGE_FILE=/usr/local/gal2/var/usage/gal2_usage.json
GAL2_ACTIVE_REFRESH_SEC=30
GAL2_IDLE_REFRESH_SEC=30
GAL2_HOLDOVER_RETRY_SEC=10
GAL2_IDLE_AFTER_SEC=60
GAL2_REQUESTS_LIMIT=0
GAL2_HTTP_TIMEOUT=10
GAL2_MAX_SLEW_RATE=0.25
GAL2_CONTRACT_LIVE_VALID_SEC=45
GAL2_CONTRACT_HOLDOVER_SOFT_SEC=21600
GAL2_CONTRACT_HOLDOVER_HARD_SEC=259200
GAL2_CONTRACT_MAX_API_LATENCY_MS=5000
GAL2_CONTRACT_REJOIN_GUARD_SEC=10
GAL2_DAEMON_VERSION=1.1.1-rc5-ixoye-witness-validity-fix
GAL2_CONTRACT_VERSION=1.1.1-contract-rc5-ixoye-witness-validity-fix
ENV

chmod 600 /etc/gal2/daemon.env
unset GAL2_API_KEY

if command -v systemctl >/dev/null 2>&1; then
  systemctl restart gal2d.service
fi

echo "GAL-2 API key installed at /etc/gal2/daemon.env"
GAL2_POLICY_PROFILE=rc5_ixoye_witness_policy_v0_1_derived_from_rc4_72h
GAL2_HOLDOVER_POLICY_VERSION=rc5_ixoye_witness_holdover_policy_v0_1_derived_from_rc4_72h
GAL2_OSCILLATOR_CLASS_DECLARED=unspecified_consumer_hardware
GAL2_UNCERTAINTY_MS_BASIS=conservative_model_v1_not_external_metrology_validated
GAL2_UNCERTAINTY_GROWTH_RATE_MS_PER_HOUR=100.0
GAL2_MIN_SLEW_DELTA_SEC=0.25

----- /Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/systemd/gal2d.service -----
[Unit]
Description=GAL-2 Time Contract Daemon
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/usr/local/gal2
Environment=GAL2_HOME=/usr/local/gal2
Environment=GAL2_ENV=/etc/gal2/daemon.env
ExecStart=/usr/local/gal2/bin/gal2-daemon-linux.sh
Restart=always
RestartSec=5
KillSignal=SIGTERM
TimeoutStopSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

----- /Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2-daemon-linux.sh -----
#!/usr/bin/env bash
set -euo pipefail

GAL2_HOME="${GAL2_HOME:-/usr/local/gal2}"
GAL2_ENV="${GAL2_ENV:-/etc/gal2/daemon.env}"

export GAL2_CONFIG_FILE="$GAL2_ENV"

if [[ -f "$GAL2_ENV" ]]; then
  export GAL2_CONFIG_PRESENT=1
  set -a
  source "$GAL2_ENV"
  set +a
else
  export GAL2_CONFIG_PRESENT=0
fi

if [[ -n "${GAL2_API_KEY:-}" ]]; then
  export GAL2_API_KEY_PRESENT=1
else
  export GAL2_API_KEY_PRESENT=0
fi

export GAL2_API_URL="${GAL2_API_URL:-https://api-v2.gal-2.com/time}"
export GAL2_BIND_HOST="${GAL2_BIND_HOST:-127.0.0.1}"
export GAL2_BIND_PORT="${GAL2_BIND_PORT:-9095}"
export GAL2_CACHE_FILE="${GAL2_CACHE_FILE:-$GAL2_HOME/var/cache/gal2_cache.json}"
export GAL2_USAGE_FILE="${GAL2_USAGE_FILE:-$GAL2_HOME/var/usage/gal2_usage.json}"
export GAL2_ACTIVE_REFRESH_SEC="${GAL2_ACTIVE_REFRESH_SEC:-30}"
export GAL2_IDLE_REFRESH_SEC="${GAL2_IDLE_REFRESH_SEC:-120}"
export GAL2_HOLDOVER_RETRY_SEC="${GAL2_HOLDOVER_RETRY_SEC:-10}"
export GAL2_IDLE_AFTER_SEC="${GAL2_IDLE_AFTER_SEC:-60}"
export GAL2_REQUESTS_LIMIT="${GAL2_REQUESTS_LIMIT:-0}"
export GAL2_HTTP_TIMEOUT="${GAL2_HTTP_TIMEOUT:-10}"
export GAL2_MAX_SLEW_RATE="${GAL2_MAX_SLEW_RATE:-0.25}"
export PYTHONUNBUFFERED=1

cd "$GAL2_HOME"

if [[ -x "$GAL2_HOME/venv/bin/python3" ]]; then
  exec "$GAL2_HOME/venv/bin/python3" "$GAL2_HOME/bin/gal2d.py"
fi

exec /usr/bin/env python3 "$GAL2_HOME/bin/gal2d.py"

----- /Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/src/gal2-daemon.sh -----
#!/usr/bin/env bash
set -euo pipefail

# Linux-compatible launcher alias.
# Kept for backward compatibility with earlier evaluator package references.

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
exec "$SCRIPT_DIR/gal2-daemon-linux.sh"

----- /Users/franciscotorres/GAL2_RC5_PRODUCT_SOURCE_FROM_RC31_20260610T185133Z/linux_rc5_package_work/GAL2_TimeContract_RC5_LINUX_INSTALLER_FRIENDLY_20260610/release_manifest/RC5_LINUX_RELEASE_NOTES.txt -----
GAL-2 Time Contract RC5 Linux Installer Friendly Package

Status: RC5 Linux public candidate
Derived from: RC3.1 Linux source installer structure
Runtime source: RC5 product source with RC4-derived 72h holdover fields and IXOYE witness_ref

Client-visible IXOYE surface:
- /contract witness_ref.layer=IXOYE
- /contract witness_ref.policy=advisory_only
- /contract witness_ref.effect_on_safe_to_consume=none
- evidence/rc5_ixoye_witness contains the external IXOYE witness attestation evidence package

Boundary:
- GAL-2 governs Time Contracts
- IXOYE witnesses out-of-band
- IXOYE is not a fallback time source
- IXOYE does not decide safe_to_consume

GAL2_RC5_113_LINUX_OLD_PACKAGE_STRUCTURE_INSPECTION_V0_1=DONE
