Files
ruoyi-vue-pro/docs/education/migration/01-capability-matrix.md

24 KiB

Capability Migration Matrix

Phase 0 static assessment generated on 2026-07-29. No build, test, application startup, PostgreSQL connection, or Flyway migration was executed during this assessment.

Statuses are restricted to the Goal vocabulary. Evidence marked as verified is static repository evidence.

Legacy capability Legacy code location Legacy database objects Business value Target module Existing capability to reuse Education gap Other-module change Priority Risk Verification Status Evidence Open decision
Tenant resolution, identity, and student context /Users/tiku1/code/tiku-backend/apps/api/src/nest/auth.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/tenant.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/features/tenant/locator.ts
/Users/tiku1/code/tiku-backend/apps/api/src/features/tenant/resolver.ts
System tenant and website/domain records are authoritative.
Legacy tenant, domain, branding, identity, membership, and RLS objects are reference-only and must not be copied mechanically.
Resolves the pre-login tenant and authenticated student context needed to route users into the correct education tenant without trusting client identity. System + Member + framework tenant support with an Education context adapter System TenantCommonApi/TenantApiImpl, TenantContextHolder, TenantSecurityWebFilter, Member/System authentication and UserTypeEnum, framework tenant injection and tenant-ignore only for explicitly authorized platform operations. Verified: EducationTenantController currently accepts caller-supplied hostname or tenantName under @PermitAll. EDU-003 establishes that Origin/Referer are forgeable browser-context claims rather than trusted identity, success discloses available-tenant existence, and legacy tenantName is unsupported. Verified: TenantSecurityWebFilter already rejects authenticated LoginUser/request-tenant mismatches and requires a tenant on non-ignored URLs. Verified: EducationContextController checks login presence and tenant validity but not LoginUser.userType. Verified: hostname documentation says no port while implementation preserves legal ports and tests expect port preservation. Decision: EDU-004 must implement the exact Public Tenant Handle, canonical website, secure local flag, wire-error, Member-principal, redaction, and abuse-control contract. System/framework tenant and security boundaries remain authoritative; Education adapts them. EDU-003 retained generic System lookup APIs and selected Member-only context enforcement. P0 High: wrong pre-login tenant selection, tenant discovery, or treating an admin ID as a Member ID can cross security boundaries. Add exact Origin/Referer claim, forged-header threat-model, requested-host conflict, explicit handle, legacy tenantName rejection, lifecycle-indistinguishability, canonical website, local-flag, normalization, anonymous, missing-tenant, mismatch, Member/admin-principal, redaction, and abuse-control tests. Static audit is not runtime proof. partially migrated Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/controller/app/tenant/EducationTenantController.java:51-63,109-132,159-177.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/security/TenantSecurityWebFilter.java:66-105.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/controller/app/EducationContextController.java:43-57.
Verified source baseline /Users/tiku1/code/tiku-backend/apps/api/src/features/tenant/locator.ts:90-151 requires production origin/request-host checks.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-education/src/test/java/cn/iocoder/yudao/module/education/controller/app/tenant/EducationTenantResolveIntegrationTest.java:80-89.
EDU-003 accepted: Origin/Referer are forgeable browser-context claims; headless lookup uses the constrained System-name Public Tenant Handle; successful lookup discloses existence while unknown/disabled/expired are indistinguishable; host identity and canonical stored websites are host-only; local fallback has a secure-default flag; context is Member-only. Future signed locator or immutable System Tenant Code remains optional later scope. Source feature ref remains unavailable.
Student core learning loop /Users/tiku1/code/tiku-backend/apps/api/src/nest/learning.module.ts:23-113
/Users/tiku1/code/tiku-backend/apps/api/src/features/learning/use-cases.ts
/Users/tiku1/code/tiku-backend/apps/api/src/features/learning/access.ts
Education catalog and practice/report/idempotency/wrong-question/favorite tables.
Verified: native catalog V4020 is a dirty module resource; practice/report/idempotency DDL is currently in untracked sql/postgresql/education files rather than proven active Flyway history.
Provides the student loop from published catalog browsing through practice creation, answer saving, restore, submission, report, wrong questions, and favorites. Education Education provider/adapter boundary, Member/System identity, database uniqueness and transactions, framework locks/idempotency only as supplements—not replacements—for atomic database claims. Verified: commit ce02f8a contains committed access/core controllers, safe projections, and focused tests, while native provider/catalog and additional core-loop work are dirty; these statuses must be separated. Verified: native and Scalar providers disagree on malformed/absent options; QuestionCatalogService and SessionResponseAssembler can emit apparently valid empty options. Verified: submit idempotency performs check-then-insert rather than atomic initial reservation. Inference: core-loop completion and concurrency guarantees are not established. Education owns education-domain state and orchestration; Member/System context is reused. Paid/private access remains blocked on an entitlement decision. P0 High: corrupt assessment content, mode-dependent behavior, duplicate state transitions, answer leakage, or unauthorized access. Provider-neutral tests across Scalar and Java, browsing/collection/practice-create/restore safe projections, malformed/unavailable/unpublished fail-closed cases, cross-tenant cases, and PostgreSQL concurrent same-key/different-key submit tests. partially migrated Verified ce02f8a, target repository, for committed EducationAccessService, core controllers/services, projections, and HTTP/service tests.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/config/EducationProperties.java:34-36 defaults to SCALAR_READ.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/integration/scalar/config/ScalarAutoConfiguration.java:30-35 selects Scalar for SCALAR_READ/missing mode.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/service/catalog/provider/JavaCatalogProvider.java:397-417, ScalarCatalogProvider.java:736-751, QuestionCatalogServiceImpl.java:182-202, SessionResponseAssembler.java:69-89.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/service/practice/PracticeSessionServiceImpl.java:294-307,397-409.
Verified /Users/tiku1/code/ruoyi-vue-pro/sql/postgresql/education/009-education-idempotency-unified.sql:81, but no execution evidence.
Select the pilot-authoritative provider or require a provider-neutral contract; define valid option structure by question type and absent-option semantics; define atomic submit claim/crash recovery; decide entitlement contract before paid/private practice.
Education catalog and question content /Users/tiku1/code/tiku-backend/apps/api/src/nest/catalog.module.ts:74-138
/Users/tiku1/code/tiku-backend/apps/nest/tenant-content.module.ts
V4020 native catalog tables for regions, schools, majors, subjects, categories, banks, questions, versions, content, collections, blueprints, and bindings.
Legacy catalog/question/content/asset tables, constraints, functions, triggers, grants, and RLS are reference objects requiring semantic mapping.
Supplies reusable published catalog, question, classification, and content reads for student and future admin workflows. Education Education Provider boundary, explicit CatalogScopeQuery, framework tenant context, Infra File public API for future assets. Verified: current native reads intentionally run inside TenantUtils.executeIgnore and apply explicit scope predicates; this is a controlled manual-isolation boundary, not proof of a current leak. Verified: V4020 uses ordinary single-column foreign keys, so tenant-owned/public graph consistency is not enforced. Inference: every mapper needs audit and content admission needs composite constraints or equivalent enforcement. Education owns domain reads; Infra File may later provide asset transport. No provider expansion should occur before provider authority and graph-integrity rules are decided. P0 High if manual scope is bypassed or invalid cross-tenant/public relationships are admitted. Inventory every mapper, provider contract tests, invalid graph insert tests, malformed/unpublished tests, PostgreSQL Flyway syntax/resource-packaging checks, and runtime migration evidence only when executed. partially migrated Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/service/catalog/provider/JavaCatalogProvider.java:82-89.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/dal/mysql/catalog/CatalogScopeQuery.java:12-20.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-education/src/main/resources/db/migration/education/V4020__create_native_catalog.sql:38-123,133-152,160-265,324-386.
Verified /Users/tiku1/code/tiku-backend/supabase/migrations/202606210008_content_navigation_practice.sql:3-178.
Choose Scalar-only, native PostgreSQL, or explicit coexistence; define tenant_id=0 PUBLIC graph semantics and composite-key strategy; decide whether source RLS/functions/triggers are contractual.
Auth, student profile, and extended learning /Users/tiku1/code/tiku-backend/apps/api/src/nest/auth.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/profile.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/learning.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/features/profile/
Legacy auth/session/verification/OAuth/phone-binding objects.
Legacy profile/check-in/points/tasks/exchange/notifications/badges/feedback/exam-countdown objects.
Legacy leaderboard/history/report/stats/trend/vocabulary progress/review/favorites/stats objects.
Covers broader student learning and profile experiences beyond the core loop, preserving discoverable legacy behavior and its disposition. Member + System + Education, with Infra composition Member/System auth and profile primitives, System/Infra notifications, Member points/levels where semantics match, Education-specific projections and authorization. Verified source inventory shows these are distinct required Phase 0 domains, not merely generic context or secondary engagement. Target ownership and compatibility are not established. Inference: the definition-of-done is unsupported until each endpoint/state family is classified. Member/System own authentication and generic membership; Education owns education-specific profile/progress projections. System/Infra may own notifications, while product owners must decide points, badges, feedback, exams, and vocabulary ownership. P1 High for auth compatibility and medium for omitted student progress/profile behavior. Endpoint/API mapping, principal and tenant tests, profile redaction, progress/report compatibility, vocabulary state transitions, and explicit retired/product-decision checks. pending migration Verified /Users/tiku1/code/tiku-backend/apps/api/src/nest/auth.module.ts:31-56.
Verified /Users/tiku1/code/tiku-backend/apps/api/src/nest/profile.module.ts:38-87.
Verified /Users/tiku1/code/tiku-backend/apps/api/src/nest/learning.module.ts:23-60,70-113.
Verified /Users/tiku1/code/ruoyi-vue-pro/docs/education/migration/GOAL.md:126-141,393-405.
For every Auth/Profile/extended Learning family, assign Member/System/Education/Infra ownership, compatibility requirement, data disposition, and phase; decide vocabulary, analytics, feedback, exam dates, notifications, points, and badges.
Tenant education operations, appearance, integrations, secrets, and codes /Users/tiku1/code/tiku-backend/apps/api/src/nest/tenant-admin-classes.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/tenant-admin-appearance.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/tenant-admin-integrations.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/tenant-admin-secrets.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/tenant-admin-codes.module.ts
Legacy classes, student relationships, supervision, roles/configuration, branding/settings/themes, domains, payment accounts, auth-provider configuration, tenant secrets, activation codes, coupons/redemptions, integrations, and marketing objects. Enables tenant administrators to operate education organizations while preserving separate security and ownership boundaries. Education + System + Member + Mall/Pay + Infra System Tenant/RBAC/DataPermission/AdminUserApi, Member relationships, Mall/Pay/Member APIs, Infra secret/file/message/audit facilities. Verified: classes/supervision were only part of the source tenant-admin surface. Appearance/theme lifecycle, domains/payment/auth integrations, secret rotation, and codes/coupons are separate migration/security surfaces with no verified target equivalent. Inference: collapsing them into one row would hide authorization and secret-handling decisions. System RBAC/DataPermission and tenant configuration are reused; Mall/Pay/Member own commercial primitives; Infra owns secrets/messaging/files where applicable; Education owns only domain relationships and configuration extensions. P1 High: admin scope, secret leakage, payment configuration, and code redemption errors. Permission matrix, row-scope negatives, secret redaction/rotation, integration authorization, code/coupon idempotency, audit, and cross-tenant tests. pending migration Verified /Users/tiku1/code/tiku-backend/apps/api/src/nest/tenant-admin-appearance.module.ts:17-41.
Verified /Users/tiku1/code/tiku-backend/apps/api/src/nest/tenant-admin-integrations.module.ts:18-42.
Verified /Users/tiku1/code/tiku-backend/apps/api/src/nest/tenant-admin-secrets.module.ts:13-21.
Verified /Users/tiku1/code/tiku-backend/apps/api/src/nest/tenant-admin-codes.module.ts:12-31.
Verified /Users/tiku1/code/tiku-backend/supabase/migrations/202606290002_tenant_classes.sql.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/annotation/DataPermission.java:12-32.
Define class/student/teacher scope semantics and separately decide appearance, domain, payment/auth integration, secret, activation-code, coupon, public-bank grant, and marketing ownership or retirement.
Platform administration and governance /Users/tiku1/code/tiku-backend/apps/api/src/nest/platform-admin-overview.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/platform-admin-permissions.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/platform-admin-*.module.ts
Legacy platform staff, tenant lifecycle/billing profiles, public question-bank grant/sync, SaaS plan/invoice/usage/overage/dunning, audit/export/alert/notification-channel, and permission objects. Provides platform staff and governance over tenants, staff lifecycle, public-bank grants, SaaS plans, billing, usage, dunning, audits, alerts, and permissions. System + Pay + Mall + Infra + CRM with Education extensions System RBAC/DataPermission/AdminUserApi, authorized tenant-ignore mechanisms, Pay/Mall/Infra/CRM public APIs, audit/logging. Verified source surface is broader than one aggregated platform-admin row. Target seams exist, but object-level ownership, data scopes, and cross-tenant operation policy remain incomplete. System, Pay, Mall, Infra, CRM, and Education-specific extension permissions; Education must not duplicate platform ledgers or generic administration. P1 High access-control and financial-governance risk. Permission matrix, platform-admin integration, cross-tenant negative, audit-redaction, billing/usage reconciliation, and alert/export tests. pending migration Verified /Users/tiku1/code/tiku-backend/apps/api/src/nest/platform-admin-overview.module.ts.
Verified /Users/tiku1/code/tiku-backend/apps/api/src/nest/platform-admin-permissions.module.ts.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/permission/PermissionApi.java:12-20.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityFrameworkService.java:7-57.
Define separate Student App, Tenant Admin, Platform Admin, public, and internal policies; map each platform surface to System/Pay/Mall/Infra/CRM/Education or explicit retirement.
Commercialization and growth /Users/tiku1/code/tiku-backend/apps/api/src/nest/commerce-orders.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/commerce-payments.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/commerce-reconciliation.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/referral-growth.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/referral-crm.module.ts
Legacy product/order/payment/event/entitlement/coupon/refund/reconciliation/commission/referral/points/dunning objects.
Target Mall/Pay/Member tables remain authoritative; Education may add minimal binding records.
Supports paid products, fulfillment, entitlements, refunds, reconciliation, commissions, referrals, and CRM conversion without recreating platform ledgers. Mall + Pay + Member + CRM with Education binding Mall/Pay DTO APIs, Member identity/entitlement/points, CRM services, Infra Job/MQ/audit. Verified target Pay/Mall APIs expose core seams, but scoped entitlement issuance/revocation, activation codes, reconciliation, commissions, dunning, and referral semantics are not proven. One prior evidence path was malformed; corrected source location is /Users/tiku1/code/tiku-backend/apps/api/src/nest/commerce-reconciliation.module.ts. Mall Trade/Product, Pay, Member entitlement/points, CRM, Infra jobs/events/audit; Education owns product-to-education bindings and fulfillment orchestration only. P2 High financial and authorization risk. Callback/idempotency/amount/refund, entitlement lifecycle, reconciliation, and education fulfillment contract tests. product decision required Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-pay/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApi.java:13-38.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-pay/src/main/java/cn/iocoder/yudao/module/pay/api/refund/PayRefundApi.java:12-30.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/api/order/TradeOrderApi.java:12-38.
Verified /Users/tiku1/code/tiku-backend/apps/api/src/nest/commerce-orders.module.ts:15-70 and /Users/tiku1/code/tiku-backend/apps/api/src/nest/commerce-reconciliation.module.ts.
Verified /Users/tiku1/code/ruoyi-vue-pro/docs/education/migration/GOAL.md:36-40,226-228.
Choose entitlement/activation-code/coupon model and confirm issuance, revocation, callback, refund, reconciliation, commission, and referral contracts before paid practice.
Background processing, assets, and operational platform /Users/tiku1/code/tiku-backend/apps/worker/src/worker-jobs.ts
/Users/tiku1/code/tiku-backend/apps/worker/src/jobs/imports.ts
/Users/tiku1/code/tiku-backend/apps/worker/src/jobs/exports.ts
/Users/tiku1/code/tiku-backend/apps/asset-scanner/src/
Legacy worker queues, leases, retries/dead letters, imports/exports, reconciliation, notification/audit, usage, and security scan state.
Target owns business state in domain modules and uses platform execution primitives; do not copy queue tables wholesale.
Preserves operational reliability for imports, exports, payments, CRM, scanning, notifications, retries, and audit while removing dependence on NestJS workers. Infra platform plus owning domain modules Infra Job, Redis MQ, File, locks, idempotency, logging, tracing, Excel utilities, tenant propagation. Verified target primitives exist, but durable claim/lease/heartbeat/retry and malware-scanner equivalence are not proven. Education import/export business state is absent or not verified. Infra Job/MQ/File/logging/observability plus owning Education/Pay/Mall/CRM handlers; scanner deployment or adapter ownership must be decided. P1 High operational and security risk. Concurrent claim/lease/recovery, retries/dead letters, scan fail-closed, file access, tenant propagation, audit, and deployment smoke tests. partially migrated Verified /Users/tiku1/code/tiku-backend/apps/worker/src/worker-jobs.ts:24-220 and /Users/tiku1/code/tiku-backend/apps/worker/src/jobs/imports.ts:87-260.
Verified /Users/tiku1/code/tiku-backend/apps/asset-scanner/src/scanner.service.ts:23-50.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/redis/core/RedisMQTemplate.java.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/core/handler/JobHandler.java.
Confirm Infra claim/lease semantics and scanner ownership, file privacy/retention, legacy asset migration/re-scan, and duplicate-safe at-least-once processing.
Secondary learning, media, AI, and engagement /Users/tiku1/code/tiku-backend/apps/api/src/nest/scoreline.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/video.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/nest/ai.module.ts
/Users/tiku1/code/tiku-backend/apps/api/src/features/profile/
Legacy scoreline, vocabulary, handbook, video entitlement/progress, recommendation, notification, badge, exam-date, and analytics objects. Delivers selected recommendation, scoreline, vocabulary, handbook, video, AI, notification, badge, exam-date, and engagement experiences after ownership and priority are explicit. Education plus AI/Infra/Member/System AI services, Infra File/notifications, Member points/levels, Education authorization/projections. Verified legacy capabilities exist, but target equivalence and priority are not established. These cannot remain an undifferentiated P3 bucket if Phase 0 must give every capability a disposition. AI, Infra File/messaging, Member growth primitives, System notifications, and Education extensions. P3 Medium-to-high due to entitlement, media access, sensitive reporting, and unclear scope. Per-capability contract, authorization, entitlement, export/redaction, and migration compatibility tests. product decision required Verified /Users/tiku1/code/tiku-backend/apps/api/src/nest/scoreline.module.ts:207-226.
Verified /Users/tiku1/code/tiku-backend/apps/api/src/nest/video.module.ts:431-464.
Verified /Users/tiku1/code/tiku-backend/apps/api/src/nest/ai.module.ts:120-139.
Verified /Users/tiku1/code/tiku-backend/supabase/migrations/202606210009_content_import_vocabulary_handbook.sql.
Verified /Users/tiku1/code/ruoyi-vue-pro/yudao-module-ai/src/main/java/cn/iocoder/yudao/module/ai/service/chat/AiChatMessageService.java.
For each capability, assign Education, existing platform ownership, explicit retirement, or later product scope; decide entitlement and safe export/redaction requirements.