- Add shutdown tracing and 15s forced exit to prevent SIGTERM hangs
- Fix E0583: remove self-referential mod declarations in bottest integration files
- Fix E0599: correct .status() call on Result in performance.rs
- Fix botui CI deploy: use systemctl stop/start instead of pkill+nohup
- Update PROD.md with DB-driven CI log retrieval method
- Stop botserver via 'sudo systemctl stop' before SCP
- Start botserver via 'sudo systemctl start' after copy
- Use health check endpoint to verify deployment
- CI runner runs on alm-ci container but must deploy to system container
- Use scp to transfer binary from alm-ci to system (10.157.134.196)
- SSH to system container to stop old process, copy binary, restart
The forgejo-runner service inherits RUSTC_WRAPPER=sccache from
systemd environment. Set RUSTC_WRAPPER="" in workflow env to
override and prevent permission denied errors.
- Remove RUSTC_WRAPPER=sccache from all workflows (permission denied
in act container environment)
- Fix deploy paths to use CARGO_TARGET_DIR=/opt/gbo/work/target
instead of relative target/debug
- Remove path triggers from botserver workflow (all pushes trigger)
- Add mkdir for target and bin dirs in setup steps
- Fix all workflows to use /opt/gbo/work/generalbots (monorepo)
- Add proper env vars (SCCACHE, CARGO_TARGET_DIR, PATH) to all workflows
- Add deploy steps for botui (with process restart)
- Remove broken workflows for non-Rust packages (botapp, botbook,
botdevice, botmodels, botplugin)
- Add botlib test workflow
- drop(stream_tx) after spawning LLM task so stream_rx.recv() loop ends
when LLM finishes. Without this, the streaming loop hung forever and
is_complete:true + suggestions were never sent to WebSocket clients.
- Add single-arg ADD_SUGGESTION "text" syntax (registered LAST for
highest Rhai priority so it matches before 2-arg form).
- convert_keywords_to_lowercase() now only lowercases Rhai built-in
keywords (IF, ELSE, WHILE, etc.), not custom syntax keywords (TALK,
HEAR, ADD_SUGGESTION) which are case-sensitive in Rhai.
- sync_bas_to_work() downloads changed .bas files from S3 to work dir
when etag changes, preventing stale local copies used by compiler.
- Only upsert drive_files when ETag actually changed (was re-processing all files every 60s cycle)
- Skip S3 directory entries (keys ending with '/') to avoid storing stale directory markers
- Add debug-level logging for unchanged file skips
- Fixes noisy 'Added/updated drive_files' spam on every scan cycle
- Replace docs/sheet/slides with kb-extraction in default features (~4-6min compile time savings, ~300MB less disk)
- Add kb-extraction feature using zip+quick-xml+calamine for lightweight KB extraction
- Split document_processor.rs (829 lines) into mod.rs+types.rs+ooxml_extract.rs+rtf.rs
- Move DOCX/PPTX ZIP-based extraction to document_processor::ooxml_extract (no ooxmlsdk needed)
- Remove dead code: save_docx_preserving(), save_pptx_preserving() (zero callers)
- Fix dep: prefix for optional dependencies in feature definitions
- DriveMonitor: full S3 sync, ETag change detection, KB incremental indexing, config.csv sync
- ConfigManager: real DB reads from bot_configuration table
- 0 warnings, 0 errors on both default and full feature builds
- Fixed hardcoded port 9000 to 8300 (Zitadel default)
- Added base_url default with fallback to Vault URL
- Allows external Zitadel server configuration via Vault
- facade.rs: Updated help message with correct port
- Install Rust via rustup as SUDO_USER (not root)
- Install mold linker via system packages (apt/dnf/pacman)
- Install sccache via cargo install as SUDO_USER
- Set default toolchain to stable on install
- Use run_as_user helper for all cargo/rustup commands
- Use /opt/gbo/work/gb/ as working directory
- Build botserver, botui, botlib
- Pull --rebase (no clone if exists)
- Verified: all 3 projects compile with 0 errors