diff --git a/.gitignore b/.gitignore index 30754d7..3df7aba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,10 @@ # VS Code — only shared workspace settings .vscode/* +!.vscode/ !.vscode/settings.json !.vscode/extensions.json + +# framework +/master-knowledge-genome/ +/keys/ +*.key diff --git a/Makefile b/Makefile index 26c149c..e0329ac 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # ============================================================================= -# Knowledge Genome - Makefile v. 1.1.6 +# Knowledge Genome - Makefile v. 1.2.0 # Orchestrates the setup and management of the knowledge base. # ============================================================================= @@ -11,7 +11,7 @@ export $(shell grep -v '^[#[:space:]]' globals.env | sed 's/=.*//') help: @echo "Available commands:" @echo " make setup - Full system initialization" - @echo " make add-genome - Register and scaffold a new genome [LINKED=owner/repo]" + @echo " make add-genome - Register and scaffold a new genome [LINKED=owner/repo] [CROSS=yes|no]" @echo " make status - Check submodule and encryption status" @echo " make lint - Verify schema, privacy flags, and metadata" @echo " make verify-structure - Report directory drift across all genomes" @@ -30,16 +30,17 @@ setup: add-genome: @if [ -z "$(NAME)" ] || [ -z "$(DESC)" ]; then \ echo "Error: NAME and DESC are required."; \ - echo "Usage: make add-genome NAME=my-genome DESC='My description' [LINKED=owner/project-repo]"; \ + echo "Usage: make add-genome NAME=my-genome DESC='My description' [LINKED=owner/project-repo] [CROSS=yes|no]"; \ exit 1; \ fi - @bash scripts/add-genome.sh "$(NAME)" "$(DESC)" "$(LINKED)" + @bash scripts/add-genome.sh "$(NAME)" "$(DESC)" "$(LINKED)" "$(or $(CROSS),no)" status: + @[ -d "$(MASTER_REPO)" ] || { echo "Master non trovato. Esegui 'make setup'."; exit 1; } @echo "--- Master Status ---" - @git submodule status + @cd $(MASTER_REPO) && git submodule status @echo "--- Encryption Status (per genome) ---" - @git submodule foreach 'git-crypt status 2>/dev/null | head -n 10 || true' + @cd $(MASTER_REPO) && git submodule foreach 'git-crypt status 2>/dev/null | head -n 10 || true' verify-structure: @bash scripts/verify-genomes.sh @@ -62,14 +63,16 @@ doctor: @echo "System ready." sync: + @[ -d "$(MASTER_REPO)" ] || { echo "Master non trovato. Esegui 'make setup'."; exit 1; } @echo "Syncing submodules..." - @git submodule update --init --recursive + @cd $(MASTER_REPO) && git submodule update --init --recursive @echo "--- Unpushed commits per genome ---" - @git submodule foreach 'git log --oneline @{u}.. 2>/dev/null | head -5 || true' + @cd $(MASTER_REPO) && git submodule foreach 'git log --oneline @{u}.. 2>/dev/null | head -5 || true' lock: + @[ -d "$(MASTER_REPO)" ] || { echo "Master non trovato. Esegui 'make setup'."; exit 1; } @echo "Locking master repository..." - @git-crypt lock 2>/dev/null || true + @cd $(MASTER_REPO) && git-crypt lock 2>/dev/null || true @echo "Locking all submodules..." - @git submodule foreach 'git-crypt lock 2>/dev/null || true' + @cd $(MASTER_REPO) && git submodule foreach 'git-crypt lock 2>/dev/null || true' @echo "All genomes securely locked." diff --git a/README.md b/README.md index 01aadb1..d5d16d3 100644 --- a/README.md +++ b/README.md @@ -330,13 +330,14 @@ WORK_DIR="${HOME}/knowledge-genome-orchestrator" KEYS_DIR="${WORK_DIR}/keys" # Genome registry — format: "name|description|linked_repo" -# The third field is OPTIONAL: +# The third and fourth fields are OPTIONAL: # - leave it empty → knowledge-only genome (no linked project) # - owner/repo → genome is linked to that project repository (rendered into AGENTS.md) +# - cross_source → yes|no (default no): whether the cross-genome collector may read this genome as a source GENOMES=( - "genome-dev|Web development, TUI, Angular, software architecture|myorg/my-app" - "genome-finance|Personal finance, investments, market analysis|" - "genome-homelab|Infrastructure, network configs, architecture logs|" + "genome-dev|Web development, TUI, Angular, software architecture|myorg/my-app|no" + "genome-finance|Personal finance, investments, market analysis||no" + "genome-homelab|Infrastructure, network configs, architecture logs||no" ) ``` @@ -692,7 +693,9 @@ If a key is lost or compromised: ```bash # From the knowledge-genome-orchestrator/ directory source lib/git-crypt.sh -cd ~/knowledge-genome-orchestrator/genome-dev +# If gcrypt_rotate_key operates on the CWD: cd into .../master-knowledge-genome/genome-dev +# If it navigates by name instead: cd into .../master-knowledge-genome +cd ~/knowledge-genome-orchestrator/master-knowledge-genome gcrypt_rotate_key "genome-dev" ``` diff --git a/globals.env b/globals.env index d3a6996..3fac2f7 100644 --- a/globals.env +++ b/globals.env @@ -9,7 +9,7 @@ PROVIDER=forgejo # --- FORGEJO --- FORGEJO_URL=https://git.keruhomelab.com -FORGEJO_USER=keru +FORGEJO_USER=Keru FORGEJO_SSH_PORT=222 # --- GITHUB (used when PROVIDER=github) --- diff --git a/registry.sh b/registry.sh index 2c20200..1d0df3f 100644 --- a/registry.sh +++ b/registry.sh @@ -12,7 +12,7 @@ _REGISTRY_LOADED=1 PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Dynamic paths -WORK_DIR="${HOME}/knowledge-genome-orchestrator" +WORK_DIR="${PROJECT_ROOT}" KEYS_DIR="${WORK_DIR}/keys" TEMPLATES_DIR="${PROJECT_ROOT}/templates" LIB_DIR="${PROJECT_ROOT}/lib" @@ -29,5 +29,7 @@ PROVIDERS_DIR="${PROJECT_ROOT}/providers" # 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||no" + # Disposable sandbox: exercise the full pipeline (ingest -> PR) end-to-end. + # Created by `make setup`. Replace with real domains once the circle is validated. + "genome-test|Disposable sandbox for pipeline testing||no" ) diff --git a/scripts/setup-genomes.sh b/scripts/setup-genomes.sh index f3aa6cd..1617200 100644 --- a/scripts/setup-genomes.sh +++ b/scripts/setup-genomes.sh @@ -19,7 +19,7 @@ source "providers/${PROVIDER}.sh" step "Processing Genome Registry" for entry in "${GENOMES[@]}"; do - # 3-field format: name|description|linked_repo (linked_repo optional → may be empty) + # 4-field format: name|description|linked_repo|cross_source linked_repo optional (may be empty); cross_source defaults to "no". 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 diff --git a/scripts/verify-genomes.sh b/scripts/verify-genomes.sh index 85a4a62..fc5ed19 100644 --- a/scripts/verify-genomes.sh +++ b/scripts/verify-genomes.sh @@ -22,7 +22,7 @@ step "Genome structure: ${MODE}" TOTAL_MISSING=0 for entry in "${GENOMES[@]}"; do - IFS='|' read -r GENOME_NAME _ _ <<< "$entry" # 3-field registry; ignore desc + linked + IFS='|' read -r GENOME_NAME _ <<< "$entry" # 4-field registry; only GENOME_NAME used here genome_dir="${WORK_DIR}/${MASTER_REPO}/${GENOME_NAME}" if [[ ! -d "$genome_dir" ]]; then diff --git a/skills/ingest/scripts/index-append.py b/skills/ingest/scripts/index-append.py index 89070e4..67bb5a0 100644 --- a/skills/ingest/scripts/index-append.py +++ b/skills/ingest/scripts/index-append.py @@ -4,11 +4,6 @@ # Insert an entry line into the correct section of wiki/index.md and keep that # section's entries alphabetically ordered. Bumps frontmatter last_updated. # -# NOTE: agents-genome.md and wiki-index.md claim the pre-commit hook sorts the -# index. The actual pre-commit.sh only runs the plaintext-leak check — it does -# NOT sort. This script owns the ordering instead. (If you later move sorting -# into the hook, reduce this to a plain append.) -# # index-append.py --section Sources \ # --entry '- [[sources/foo]] — One-line summary. `maturity: draft`' # ============================================================================= diff --git a/templates/agents-genome.md b/templates/agents-genome.md index dc1a43b..94273d9 100644 --- a/templates/agents-genome.md +++ b/templates/agents-genome.md @@ -166,7 +166,7 @@ private: true | false ### Links - Internal: `[[folder/file]]` — Obsidian wikilinks only. Never `[text](url)` for internal refs. -- Cross-genome: `[[../genome-target/wiki/folder/file]]`. +- Cross-genome: NOT via wikilink (submodule pointers make relative paths brittle). A concept owned by another genome is pulled in by the navigation skill as a raw under `raw/articles/crossgen--.md`, then ingested here normally. See master `AGENTS.md` §Cross-Genome Pull. - External: `[text](https://...)`. ### Index entries diff --git a/templates/wiki-log.md b/templates/wiki-log.md index 6068ca9..d9d8efb 100644 --- a/templates/wiki-log.md +++ b/templates/wiki-log.md @@ -57,7 +57,7 @@ grep "^## \[2026-05" wiki/log.md ## [{{DATE}}] CONFIG | Genome scaffolded - run_id: `system-init` -- model: `setup-knowledge-genome.sh` +- model: `scaffold.sh` - context_read: _(none — initial scaffold)_ - output_written: `[[wiki/index.md]]`, `[[wiki/log.md]]`, `[[AGENTS.md]]` - reasoning: Initial directory structure and encryption layer initialized by setup script.