KeiSeiKit-1.0/install/lib-substrate.sh
Parfii-bot 89d466309e chore(kit): wire kei-db-contract into installer + drop final #[path] hack
A1 — install.sh wiring for kei-db-contract:
- install/lib-substrate.sh substrate_core_binaries(): add kei-db-contract
  to always-copy list. End users now get the binary in ~/.cargo/bin/
  immediately after install (no manual cargo install --path needed).

A2 — Wave B follow-up: drop #[path] hack from guard_test_corpus.rs
- tests/guard_test_corpus.rs: #[path = "../src/injection_*"] mod ...
  → use kei_memory::injection_guard::scan
- Now uses Wave B's [lib] target like tests/integration.rs already does.
- 4 tests still pass.

Verified via cargo test: 18 lib + 4 corpus + 3 ingest_guard + 1 injection_unit
+ 4 dedup + 8 integration + 4 ingest_real_trace = 42 tests, all green.

=== STATUS-TRUTH MARKER ===
shipped: functional
stubs: 0
cargo-check: PASS
cargo-test: PASS (42 tests, 0 failures)
behaviour-verified: yes
follow-up-required:
  - tests/ingest_guard_tests.rs already migrated (Wave A's earlier work)
  - kei-db-contract still requires kit user to have run install.sh; existing
    installs need re-run. Kit ledger-validate should add post-install probe.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 17:55:52 +08:00

95 lines
3.6 KiB
Bash

# shellcheck shell=bash
# lib-substrate.sh — substrate-binary mirror (Wave 39).
#
# Always-copy substrate-core binaries (kei-fork, kei-ledger, kei-spawn,
# kei-agent-runtime, etc.) from the source repo's pre-built target/release/
# into the agent install dir, so the user gets `kei-fork list` etc.
# immediately after install — without depending on the scoped workspace
# build (which only contains the installed-profile subset).
#
# Two tiers:
# substrate_core — always copied (substrate spine + most LBM crates)
# substrate_cortex — copied only when PROFILE matches cortex|full
#
# Requires: say from lib-log.sh.
# Reads globals: $KIT_DIR, $AGENTS_DIR, $PROFILE.
# Echo space-separated names of always-copy substrate binaries.
substrate_core_binaries() {
printf '%s\n' \
kei-fork kei-ledger kei-spawn kei-agent-runtime \
kei-capability kei-pet kei-shared kei-store kei-memory \
kei-pipe kei-cache kei-replay kei-runtime \
kei-atom-discovery kei-task kei-search-core \
kei-content-store kei-router kei-sage kei-curator \
kei-auth kei-artifact keisei \
kei-conflict-scan kei-refactor-engine kei-graph-check \
kei-diff kei-scheduler kei-watch kei-prune kei-discover \
kei-brain-view kei-hibernate kei-ledger-sign kei-dna-index \
kei-entity-store kei-crossdomain kei-social-store \
kei-chat-store kei-provision kei-changelog kei-migrate \
kei-db-contract \
frustration-matrix \
ssh-check firewall-diff mock-render visual-diff tokens-sync
}
# Echo cortex-profile-only binaries.
substrate_cortex_binaries() {
printf '%s\n' kei-cortex kei-mcp kei-tty kei-skill-importer
}
# Install one prebuilt binary src->dst with mode 755. Idempotent.
# Args: $1=src absolute path, $2=dst absolute path. Uses install(1) when
# available (POSIX-portable), falls back to cp+chmod.
# Returns 0 on success, 1 if src missing/unexecutable.
_install_one_binary() {
local src="$1" dst="$2"
[ -f "$src" ] && [ -x "$src" ] || return 1
mkdir -p "$(dirname "$dst")"
if command -v install >/dev/null 2>&1; then
install -m 755 "$src" "$dst" 2>/dev/null && return 0
fi
cp -f "$src" "$dst" && chmod 755 "$dst"
}
# Mirror pre-built substrate binaries from $KIT_DIR to ~/.cargo/bin/.
# Idempotent — re-running after files exist is fine (refreshes content;
# a newer source will replace an older mirror, never errors).
# No-op when source dir doesn't exist (release-asset extract pending).
#
# Architecture (v0.18+): single canonical install location is ~/.cargo/bin/,
# present in PATH for any user with rustup. Eliminates dual-location drift
# (the kei-ledger v9 incident root cause).
copy_prebuilt_substrate_binaries() {
local src_dir="$KIT_DIR/_primitives/_rust/target/release"
local dst_dir="$HOME/.cargo/bin"
[ -d "$src_dir" ] || return 0
mkdir -p "$dst_dir"
local copied=0 missing=0 name profile_match=0
case "${PROFILE:-}" in
cortex|full) profile_match=1 ;;
esac
while IFS= read -r name; do
[ -z "$name" ] && continue
if _install_one_binary "$src_dir/$name" "$dst_dir/$name" 2>/dev/null; then
copied=$((copied+1))
else
missing=$((missing+1))
fi
done < <(substrate_core_binaries)
if [ "$profile_match" = "1" ]; then
while IFS= read -r name; do
[ -z "$name" ] && continue
if _install_one_binary "$src_dir/$name" "$dst_dir/$name" 2>/dev/null; then
copied=$((copied+1))
else
missing=$((missing+1))
fi
done < <(substrate_cortex_binaries)
fi
if [ "$copied" -gt 0 ]; then
say " installed $copied substrate binar(y/ies) -> ~/.cargo/bin/"
elif [ "$missing" -gt 0 ]; then
say " no pre-built substrate binaries found in $src_dir (rely on cargo build)"
fi
}