Audit every concrete claim in the 41 hand-written en pages against the
three primary sources (DB, source on cleanup branch, source-tree
inventory). Fix divergent claims in place; preserve framing where
verified.
Substantive corrections:
- request-lifecycle / runtime / slice 01: the metadata read sources from
five tables/families (gdsconfigformmaster + overlays, gdsformconst,
sysjurisdiction, sysbillnosettings, sysreport), not four. The map key
`gdsjurisdiction` is misleading — the per-user grant read queries
`sysjurisdiction`; `gdsjurisdiction` is the builder-side action
catalogue. `gdsformconst`, `gdsconfigformmaster`, `gdsconfigformslave`
are NOT tenant-scoped; they filter by form-id only.
- multi-tenancy: four metadata tables (gdsformconst, gdsmodule,
gdsconfigformmaster, gdsconfigformslave) are an explicit exception to
the "every table tenant-scoped" promise — `sTableNameList` strips
sBrandsId/sSubsidiaryId from writes against them.
- sSaveProName / sSaveProNameBefore are pre/post-save HOOKS on top of
the always-running base path (BusinessBaseServiceImpl.add/update),
not either/or branches. Default add/update path is in
BusinessBaseServiceImpl, not AddDelUpdCommonServiceImpl.
- cache-invalidation: redis cache is cleared synchronously in BACK via
@CacheEvict on CleanRedisServiceImpl during save. The JMS
CHANGE_GDS_MODULE queue triggers PRO_ERPMERGEBASEGDSMODULE (base-data
merge), NOT cache invalidation despite the name. Cross-node
coherence open question (no custom CacheManager bean configured).
- messaging: enumerate all 24 P2pQueue destinations grouped by intent;
fix CHANGE_GDS_MODULE description; clarify single Consumer.java with
24 @JmsListener methods (not 24 listener classes).
- API paths: /checkflow lowercase (mapping value, not class name);
/procedureCall/doGenericProcedureCall (not /business/genericProcedureCall*).
- tech-stack: Druid 6 java imports + 16 yml mentions (was 25 conflated);
fastjson per-module xlyInterface 9 (was 10); commons-lang3 39 (was 41);
@Document classes 20 PLAT_* + 2 DIKE_TEST* (was "all PLAT_*"); xlyPersist
activiti hit is IdGen.java (was BaseDao.java); add Springfox to
declared-but-no-imports table; reconcile module list to 11 framework
core + xlyPlc plugin + xlyPlatConstant utility.
- index.md: clarify xlyFace as "in build, not documented"; add xlyErpTask
/ xlyPlatTask scheduler bullet; correct MongoDB framing (caller is in
xlyPersist with no consumers, not xlyPlat*); add xlyPlc note; extend
backup-table OOS to cover *_copy1 / *_history / *YYYYMMDD[HHMMSS].
- deployment.md: split deployable Boot apps from library modules;
enumerate 12 commented-out includes (was 3); remove xlyPlatConstant from
out-of-scope Plat* list; split profile permutations by service.
- activiti.md: add xlyApi to 5.17 dependency list; replace speculative
BPMN path hint with verified state; name actual ActivitiConfig.java;
note act_id_* are views projecting xly users into Activiti shapes.
- api-reference/external.md: fix bearer-token validation flow (sysapibrand
via AES-decrypted corpid, not sysapithirdtoken); /online/* are page
renders not API execution; /pro/* mostly returns Thymeleaf views; mark
sysapidbtodb as xlyFlow-owned; /token/getToken accepts GET and POST.
- api-reference/webhooks.md: add Swagger Docket caveat (UI shell ships but
no Docket bean → /v2/api-docs effectively empty); flag /send/sendQw as
stub (returns "ok").
- slices/03-report.md: fix dir path xlyEntry/com/xly/report/ →
xlyEntry/com/xly/web/report/; reframe PrintReportControllerOld as dead
source (file body fully commented out).
- concepts/modules-forms-vtables.md: add 22-prefix glossary table
(gds/sys/sis/sft/ele/mft/sal/quo/acc/pur/ops/cah/sgd/ept/mit/pit/qly/
kpi/udf/viw_/plat_/ai_/act_/qrtz_) so a maintainer can enumerate
business-data domains at a glance.
- concepts/master-slave.md: disambiguate document-row pattern from
DataSource master/slave (different concept, name overlap).
- proc-dispatch.md: add proc-name molds (Sp_*_BeforeSave/AfterSave/
SaveReturn, sp_btn_*, PRO_ERPMERGE*) + function-layer paragraph
(Fun_*/Fn_*/get_*; SQL-called, not Java-dispatched).
- concepts/index.md: schema label MySQL\nxlyweberp → xlyweberp_*.
Pass E (live behavioural traces) deferred — source/DB-side audit was
thorough; live traces best done as a follow-up sweep against a running
instance.