Known Discrepancies (CLAUDE.md ↔ Code)
Where CLAUDE.md (or other historical docs) disagrees with the current code. The code is authoritative; this page records the delta so readers coming from the project memory do not get tripped up.
This list is a point-in-time snapshot (library v2.6.0). It is updated opportunistically, not on a schedule.
Agent environments directory
| Where | Says | Actual |
|---|---|---|
|
|
|
If your agents were provisioned under the old path, set QA_AGENT_ENVS_DIR=/home/jenkins/agent/qa-envs as a global env var rather than relocating the directories.
Service catalogue — extras
| Service mentioned by | Present in compose-{mysql,oracle}.yml? |
|---|---|
|
No. A |
|
No. Only |
|
No. It is a helper directory used by |
Source of truth: a grep of ^ [a-z]: between services: and the next top-level key in each compose-.yml. The canonical list is in Reference → Service catalogue.
Postgres bundle
README says there is a compose-postgres.yml. There is not. postgres is a service inside both compose-mysql.yml and compose-oracle.yml, gated behind a Compose profile, and selected by DATABASE_TYPE=postgres.
Service count
README says "17+ service templates"; the actual count in v2.6.0 is 23 services per bundle (24 distinct services counting mysql and oracle as bundle-specific). See services table.
Network name
QAConfig.Defaults.NETWORK_NAME_SUFFIX = '_net' suggests envs use ${ENV_NAME}_net networks. In practice v2.6.0 compose bundles declare a top-level project name: ft-services-{mysql,oracle} and rely on the implicit <project>_default network. The _net suffix is reserved for future per-env networking; today there is no per-env network.
QA_ADMIN_USERS default
Historical docs mention qa-admin as the default. The current default (commit d2b969b) is admin. Both CLAUDE.md and QAConfig.RBAC.ADMIN_USERS agree on admin in v2.6.0; this note is here only for operators migrating from pre-2.6 instances.
vars/ inventory
CLAUDE.md lists the main *Step.groovy files. The actual directory additionally contains editSchemaStep.groovy and updateStep.groovy — both are part of the legacy schema flow and not mentioned in CLAUDE.md. They remain functional but should not be used for new work.
Healthchecks
Commit e15a019 removed "unused healthchecks" from both bundles, yet many services still carry a healthcheck: block. The commit targeted services where the healthcheck endpoint was wrong or pointed at a binary that was never running — in the remaining services the healthcheck is the gate for condition: service_healthy in dependencies.yaml. CLAUDE.md does not currently distinguish these — treat the presence of healthcheck: in a service block as authoritative.
FT_UI_BACKEND_KEYWORD lives in portals/.env, against the upstream doc
Not a CLAUDE.md delta — a deliberate divergence from the oneiot-ui 7.1.2 installation guide, recorded here for the same reason.
| Where | Says | Actual |
|---|---|---|
oneiot-ui 7.1.2 |
|
It stays in |
Keeping it next to the service it pairs with — KEYWORD in ui-backend/.env — is what makes the two visibly one setting; a mismatch returns HTTP 403 and restarts the portals container in a loop, a regression this repository has already shipped once (13b0f68f). The upstream warning is about ports, where a portals/.env copy is genuinely unread; FT_UI_BACKEND_KEYWORD is passed to the container through env_file:, so the placement is harmless. Everything else in that file was aligned with the upstream contract under DEV-3218.