Agents were attempting to build/validate multiple MCP servers in
parallel, leading to incomplete work that never finished. This adds
a mandatory rule: work on exactly one MCP/LSP server end-to-end
(build, handshake, live client invocation with real data, status
update, commit) before starting the next.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
A standalone CLI container (following the redmine-cli pattern) that
lets AI agents and humans read, post, reply, search, and discuss on a
Discourse forum via the REST API. Uses three environment variables
(DISCOURSE_URL, DISCOURSE_API_KEY, DISCOURSE_API_USERNAME) for auth.
Commands: whoami, categories, cat-info, topics/ls, show, create, reply,
update, delete, search, notifications.
Fully validated end-to-end (10/10 checks) against a live Discourse
instance: credential auth, whoami, categories, topics, show, search,
and full write cycle (create + reply + update + delete).
Includes validate.sh for repeatable end-to-end testing using
containerized curl + the CLI image.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
AI agents were marking services as "validated" or "working" after only
running structural tests (build + --help) without any live interaction
against the real external system. This adds a mandatory section to
AGENTS.md that:
- Distinguishes "built", "structural test", and "validated" as distinct
states with concrete examples
- Prohibits using "validated"/"working"/"done"/"complete" for credential-
dependent services until a live operation succeeds
- Requires obtaining credentials and running real read/write operations
before claiming completion
- Enforces todo-list honesty: items can only be marked completed when
their acceptance criterion is actually met
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
All services in docker-compose.yml are behind profiles (dev/ops), but the
maintenance scripts called docker compose without --profile, so no services
were detected or built. Added --profile dev --profile ops to BuildAll.sh,
StatusCheck.sh, and all relevant maintenance.sh commands.
Also:
- Added missing env vars for 8 newer servers to .env.example (beszel, gitea,
grafana, ha, limesurvey, linkwarden, superset)
- Fixed maintenance.sh validate to use validate-all.sh instead of nonexistent
validate-mcp.sh
CloneVendorRepos.sh and CleanVendor.sh resolved vendor/ relative to scripts/
instead of the repo root, so vendor repos were cloned to the wrong location
(scripts/vendor) and docker-compose builds (which expect ./vendor at repo
root) would fail. BuildAll.sh and StatusCheck.sh had the same issue, cd-ing
to scripts/ instead of the repo root before running docker compose.
Also updated validate-all.sh with the 10 newer MCP servers that were added
after the script was last maintained (firefly-iii, actual, paperless, beszel,
gitea, grafana, ha, limesurvey, linkwarden, superset) plus added missing
env vars for audiobook-mcp and drawio-mcp.
All wrapper script paths referenced /home/charles/Projects/ (previous
machine/user) instead of the actual /home/reachableceo/projects/. Every
LSP and MCP entry in crush.json was broken. Fixed 39 path references.
Merge the redmine-cli work from the EnableAI repo into KNEL-AIMiddleware as the
canonical home for AI middleware. This is a standalone CLI (python-redmine 2.5.0)
that lists, shows, creates, updates, and closes Redmine issues via docker run.
Complements the existing mcp-redmine MCP server (protocol-native) with a
direct-invocation tool for interactive use.
Verified end-to-end against projects.knownelement.com: whoami, projects,
statuses, list, show, create, update, and close all tested successfully.
Also records host-cleanliness conventions (docker/tea only on host; custom
images to Gitea registry) in AGENTS.md, and adds a CLI Tools section to
STATUS.md.