From bad41d63132a5bd00a50056d44ad974736ce6cc1 Mon Sep 17 00:00:00 2001 From: Matteo Cherubini Date: Wed, 10 Jun 2026 17:20:02 +0200 Subject: [PATCH] feat: Introduce `cross_source` flag for genome registry entries --- registry.sh | 12 +++++++----- scripts/add-genome.sh | 18 ++++++++++++++---- scripts/setup-genomes.sh | 7 ++++--- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/registry.sh b/registry.sh index 596c462..2c20200 100644 --- a/registry.sh +++ b/registry.sh @@ -19,13 +19,15 @@ LIB_DIR="${PROJECT_ROOT}/lib" PROVIDERS_DIR="${PROJECT_ROOT}/providers" # --- GENOME REGISTRY --- -# Format: "name|description|linked_repo" -# - linked_repo is OPTIONAL. Leave empty (trailing pipe) for knowledge-only genomes. +# Format: "name|description|linked_repo|cross_source" +# - linked_repo: OPTIONAL. Leave empty for knowledge-only genomes. +# - cross_source: "yes" or "no" (default: no). Controls whether the collector +# may read this genome as a source during cross-genome pulls. # # HOW TO CUSTOMIZE: # Replace the placeholder below with your actual genome domains. -# Example: "genome-work|Work notes and architecture logs|" -# "genome-finance|Personal finance|user/repo-finance" +# Example: "genome-work|Work notes and architecture logs||no" +# "genome-finance|Personal finance|user/repo-finance|no" GENOMES=( - "genome-example|Template genome description for knowledge management|" + "genome-example|Template genome description for knowledge management||no" ) diff --git a/scripts/add-genome.sh b/scripts/add-genome.sh index dc4dd6c..0bf6b54 100644 --- a/scripts/add-genome.sh +++ b/scripts/add-genome.sh @@ -11,18 +11,28 @@ source "registry.sh" GENOME_NAME="${1:-}" GENOME_DESC="${2:-}" -GENOME_LINKED="${3:-}" # optional: linked project repo reference +GENOME_LINKED="${3:-}" # optional: linked project repo reference +GENOME_CROSS_SOURCE="${4:-no}" # optional: cross_source flag (default: no) +# 1. Check mandatory arguments first if [[ -z "$GENOME_NAME" || -z "$GENOME_DESC" ]]; then error "Missing arguments." - echo "Usage: $0 [linked-repo]" + echo "Usage: $0 [linked-repo] [cross_source]" + echo " cross_source: yes|no (default: no)" + exit 1 +fi + +# 2. Then validate the flag if a non-default value was passed +if [[ "$GENOME_CROSS_SOURCE" != "yes" && "$GENOME_CROSS_SOURCE" != "no" ]]; then + error "Invalid cross_source value: $GENOME_CROSS_SOURCE" + echo "cross_source must be 'yes' or 'no'" exit 1 fi step "Adding New Genome: ${GENOME_NAME}" -# Build a 3-field registry entry (linked_repo may be empty) -GENOMES=("${GENOME_NAME}|${GENOME_DESC}|${GENOME_LINKED}") +# Build a 4-field registry entry (linked_repo may be empty, cross_source defaults to no) +GENOMES=("${GENOME_NAME}|${GENOME_DESC}|${GENOME_LINKED}|${GENOME_CROSS_SOURCE}") # NOTE — Maintenance smell # We source setup-genomes.sh as a library/orchestrator hybrid. This works because: diff --git a/scripts/setup-genomes.sh b/scripts/setup-genomes.sh index b30af18..f3aa6cd 100644 --- a/scripts/setup-genomes.sh +++ b/scripts/setup-genomes.sh @@ -20,10 +20,11 @@ step "Processing Genome Registry" for entry in "${GENOMES[@]}"; do # 3-field format: name|description|linked_repo (linked_repo optional → may be empty) - IFS='|' read -r GENOME_NAME GENOME_DESC GENOME_LINKED <<< "$entry" - export GENOME_NAME GENOME_DESC GENOME_LINKED + IFS='|' read -r GENOME_NAME GENOME_DESC GENOME_LINKED GENOME_CROSS_SOURCE <<< "$entry" + GENOME_CROSS_SOURCE="${GENOME_CROSS_SOURCE:-no}" + export GENOME_NAME GENOME_DESC GENOME_LINKED GENOME_CROSS_SOURCE - info "Processing: ${GENOME_NAME}..." + info "Processing: ${GENOME_NAME} (cross_source: ${GENOME_CROSS_SOURCE})..." # 1. Remote Creation (Idempotent) provider_create_repo "${GENOME_NAME}" "${GENOME_DESC}" "true"