update
mega-ci / static-release-gates (push) Failing after 11s
release-tag / release-image (push) Successful in 6m46s
mega-ci / go-quality (services/control) (push) Successful in 10m7s
mega-ci / go-quality (platform/neuroforge) (push) Successful in 10m20s
mega-ci / go-quality (services/agent) (push) Successful in 11m1s
mega-ci / go-quality (services/knowledge) (push) Successful in 11m13s
mega-ci / docker-build (push) Has been skipped

This commit is contained in:
2026-09-09 11:10:31 +02:00
parent 9a4370e4df
commit e0bf42bf32
85 changed files with 8035 additions and 1138 deletions
+11 -10
View File
@@ -23,7 +23,7 @@ services:
- ALL
neuroforge:
image: git.send.nrw/sendnrw/glpi-neuroforge-mega-neuroforge:${IMAGE_TAG:?Set IMAGE_TAG
to an immutable release tag, for example 1.6.0}
to an immutable release tag, for example 1.6.2}
command:
- -data
- /app/data
@@ -57,14 +57,15 @@ services:
NEUROFORGE_WORKER_DEFAULT_MAX_ATTEMPTS: ${NEUROFORGE_WORKER_DEFAULT_MAX_ATTEMPTS:-3}
NEUROFORGE_WORKER_RETRY_BACKOFF_SECONDS: ${NEUROFORGE_WORKER_RETRY_BACKOFF_SECONDS:-15}
NEUROFORGE_WORKER_MAX_QUEUED_JOBS: ${NEUROFORGE_WORKER_MAX_QUEUED_JOBS:-5000}
NEUROFORGE_WORKER_MAX_QUEUED_PAYLOAD_MB: ${NEUROFORGE_WORKER_MAX_QUEUED_PAYLOAD_MB:-128}
NEUROFORGE_WORKER_MASTER_APPLY_MAX_ATTEMPTS: ${NEUROFORGE_WORKER_MASTER_APPLY_MAX_ATTEMPTS:-5}
NEUROFORGE_WORKER_MASTER_APPLY_BACKOFF_SECONDS: ${NEUROFORGE_WORKER_MASTER_APPLY_BACKOFF_SECONDS:-5}
NEUROFORGE_WORKER_JOB_RETENTION_HOURS: ${NEUROFORGE_WORKER_JOB_RETENTION_HOURS:-168}
NEUROFORGE_WORKER_MAX_TERMINAL_JOBS: ${NEUROFORGE_WORKER_MAX_TERMINAL_JOBS:-20000}
NEUROFORGE_WORKER_JOB_RETENTION_HOURS: ${NEUROFORGE_WORKER_JOB_RETENTION_HOURS:-24}
NEUROFORGE_WORKER_MAX_TERMINAL_JOBS: ${NEUROFORGE_WORKER_MAX_TERMINAL_JOBS:-2000}
NEUROFORGE_GRAPH_BACKFILL_ENABLED: ${NEUROFORGE_GRAPH_BACKFILL_ENABLED:-true}
NEUROFORGE_GRAPH_BACKFILL_INTERVAL_SECONDS: ${NEUROFORGE_GRAPH_BACKFILL_INTERVAL_SECONDS:-10}
NEUROFORGE_GRAPH_BACKFILL_BATCH_SIZE: ${NEUROFORGE_GRAPH_BACKFILL_BATCH_SIZE:-64}
NEUROFORGE_GRAPH_BACKFILL_MAX_QUEUED: ${NEUROFORGE_GRAPH_BACKFILL_MAX_QUEUED:-256}
NEUROFORGE_GRAPH_BACKFILL_BATCH_SIZE: ${NEUROFORGE_GRAPH_BACKFILL_BATCH_SIZE:-16}
NEUROFORGE_GRAPH_BACKFILL_MAX_QUEUED: ${NEUROFORGE_GRAPH_BACKFILL_MAX_QUEUED:-64}
NEUROFORGE_GRAPH_BACKFILL_MIN_DEGREE: ${NEUROFORGE_GRAPH_BACKFILL_MIN_DEGREE:-3}
NEUROFORGE_GRAPH_CANDIDATE_MULTIPLIER: ${NEUROFORGE_GRAPH_CANDIDATE_MULTIPLIER:-6}
NEUROFORGE_GRAPH_RETRY_AFTER_MINUTES: ${NEUROFORGE_GRAPH_RETRY_AFTER_MINUTES:-360}
@@ -137,7 +138,7 @@ services:
stop_grace_period: 35s
agent-data-init:
image: git.send.nrw/sendnrw/glpi-neuroforge-mega-agent-data-init:${IMAGE_TAG:?Set
IMAGE_TAG to an immutable release tag, for example 1.6.0}
IMAGE_TAG to an immutable release tag, for example 1.6.2}
restart: 'no'
user: 0:0
volumes:
@@ -151,7 +152,7 @@ services:
- FOWNER
agent:
image: git.send.nrw/sendnrw/glpi-neuroforge-mega-agent:${IMAGE_TAG:?Set IMAGE_TAG
to an immutable release tag, for example 1.6.0}
to an immutable release tag, for example 1.6.2}
restart: unless-stopped
environment:
AI_CONTENT_LABEL_ENABLED: ${AI_CONTENT_LABEL_ENABLED:-}
@@ -373,7 +374,7 @@ services:
stop_grace_period: 20s
knowledge:
image: git.send.nrw/sendnrw/glpi-neuroforge-mega-knowledge:${IMAGE_TAG:?Set IMAGE_TAG
to an immutable release tag, for example 1.6.0}
to an immutable release tag, for example 1.6.2}
restart: unless-stopped
environment:
APP_MODE: ${KB_APP_MODE:-editor}
@@ -414,7 +415,7 @@ services:
stop_grace_period: 35s
control:
image: git.send.nrw/sendnrw/glpi-neuroforge-mega-control:${IMAGE_TAG:?Set IMAGE_TAG
to an immutable release tag, for example 1.6.0}
to an immutable release tag, for example 1.6.2}
restart: unless-stopped
environment:
CONTROL_ADDR: :8070
@@ -543,7 +544,7 @@ services:
- prometheus-secrets:/etc/prometheus-secrets:ro
depends_on:
neuroforge:
condition: service_healthy
condition: service_started
prometheus-secrets-init:
condition: service_completed_successfully
prometheus-config-init:
@@ -9,7 +9,7 @@
],
"timezone": "browser",
"schemaVersion": 41,
"version": 1,
"version": 2,
"refresh": "15s",
"time": {
"from": "now-6h",
@@ -1443,6 +1443,45 @@
"sort": "desc"
}
}
},
{
"id": 26,
"title": "Durable Job Payload Bytes",
"type": "timeseries",
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"gridPos": {
"x": 0,
"y": 56,
"w": 24,
"h": 8
},
"fieldConfig": {
"defaults": {
"unit": "bytes"
},
"overrides": []
},
"options": {
"legend": {
"displayMode": "list",
"placement": "bottom",
"showLegend": true
},
"tooltip": {
"mode": "multi",
"sort": "none"
}
},
"targets": [
{
"expr": "neuroforge_job_payload_bytes",
"legendFormat": "{{state}}",
"refId": "A"
}
]
}
]
}
@@ -0,0 +1,12 @@
apiVersion: 1
providers:
- name: NeuroForge
orgId: 1
folder: NeuroForge
type: file
disableDeletion: true
updateIntervalSeconds: 30
allowUiUpdates: false
options:
path: /var/lib/grafana/dashboards
@@ -1,4 +1,5 @@
apiVersion: 1
datasources:
- name: Prometheus
uid: prometheus
@@ -56,3 +56,19 @@ groups:
annotations:
summary: "Knowledge graph remains highly isolated"
description: "More than 80% of memories are still isolated after 30 minutes."
- alert: NeuroForgePendingPayloadHigh
expr: neuroforge_job_payload_bytes{state="pending"} > 104857600
for: 5m
labels: {severity: warning}
annotations:
summary: "NeuroForge pending job payload memory is high"
description: "Pending durable job payload/result bytes exceed 100 MiB for 5 minutes; backfill should remain below the v1.6.2 safety budget."
- alert: NeuroForgeTerminalPayloadHigh
expr: neuroforge_job_payload_bytes{state="terminal"} > 67108864
for: 10m
labels: {severity: warning}
annotations:
summary: "NeuroForge terminal job payload retention is high"
description: "Terminal job payload/result bytes exceed 64 MiB. Completed vector.relink jobs should be compacted automatically in v1.6.2."
+11 -12
View File
@@ -1,15 +1,14 @@
#!/usr/bin/env sh
set -eu
bad=0
check() { key="$1"; val=$(grep -E "^${key}=" .env | head -1 | cut -d= -f2- || true); if [ -z "$val" ] || echo "$val" | grep -Eq 'CHANGE_ME|example\.invalid|192\.0\.2\.'; then echo "SETZEN: $key"; bad=1; fi; }
for k in GLPI_URL GLPI_CLIENT_ID GLPI_CLIENT_SECRET GLPI_USERNAME GLPI_PASSWORD OLLAMA_BASE_URL OLLAMA_URLS; do check "$k"; done
if [ "$bad" -ne 0 ]; then echo "Preflight fehlgeschlagen: Platzhalter ersetzen."; exit 1; fi
command -v docker >/dev/null 2>&1 || { echo "FEHLT: docker"; exit 1; }
docker compose version >/dev/null
[ -f .env ] || { echo 'missing .env'; exit 1; }
required='IMAGE_TAG NEUROFORGE_ADMIN_TOKEN NEUROFORGE_APP_API_KEY NEUROFORGE_INTEGRATION_TOKEN NEUROFORGE_CONTROL_READ_TOKEN NEUROFORGE_WORKER_TOKEN NEUROFORGE_METRICS_TOKEN KB_INTEGRATION_TOKEN CONTROL_READ_TOKEN GLPI_URL GLPI_CLIENT_ID GLPI_CLIENT_SECRET GLPI_USERNAME GLPI_PASSWORD GRAFANA_ADMIN_PASSWORD'
for k in $required; do
v=$(awk -F= -v key="$k" '$1==key {sub(/^[^=]*=/,""); print; exit}' .env)
[ -n "$v" ] || { echo "missing: $k"; exit 1; }
done
if grep -Eq '(^|=)(https?://)?192\.0\.2\.|example\.invalid|CHANGE_ME|YOUR-' .env; then
echo 'placeholder/example values remain in .env'; exit 1
fi
[ "$(awk -F= '$1=="IMAGE_TAG"{print $2}' .env)" = "1.6.2" ] || { echo 'IMAGE_TAG must be 1.6.2'; exit 1; }
docker compose --profile research --profile monitoring config >/dev/null
[ -f monitoring/prometheus/prometheus.yml.template ]
[ -f monitoring/prometheus/alerts.yml ]
[ -f monitoring/grafana/dashboards/neuroforge-master-subagents.json ]
mkdir -p knowledge staging backups
./monitoring/validate.sh
echo "Master preflight: OK"
echo 'master preflight: OK'