diff --git a/.github/workflows/cloudflare-backup.yml b/.github/workflows/cloudflare-backup.yml index fb86201..a258494 100644 --- a/.github/workflows/cloudflare-backup.yml +++ b/.github/workflows/cloudflare-backup.yml @@ -21,6 +21,8 @@ jobs: steps: - name: Check out repository uses: actions/checkout@v6 + with: + persist-credentials: false - name: Use Node.js 24 uses: actions/setup-node@v6 @@ -28,16 +30,33 @@ jobs: node-version: 24 cache: npm + - name: Validate backup configuration before installing dependencies + shell: bash + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + run: | + node --disable-warning=MODULE_TYPELESS_PACKAGE_JSON scripts/cloudflare/backup-preflight.ts --phase credentials + - name: Install dependencies run: npm ci - - name: Require Cloudflare backup credentials + - name: Verify read access to both remote D1 databases shell: bash env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} run: | - npx tsx scripts/cloudflare/backup-preflight.ts --phase credentials + set -euo pipefail + verify_database() { + local database="$1" + if ! npx wrangler d1 info "$database" --json >/dev/null; then + echo "::error title=Cloudflare D1 access check failed::Unable to read metadata for ${database}. Verify token scope, account selection, database name and Cloudflare availability. No backup was created." + exit 1 + fi + } + verify_database studyinchina-catalog + verify_database studyinchina-pipeline - name: Export catalog and pipeline databases shell: bash @@ -45,25 +64,39 @@ jobs: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} run: | + set -euo pipefail export_data_tables() { local database="$1" local output="$2" local query query="SELECT name FROM pragma_table_list WHERE schema = 'main' AND type = 'table' AND name NOT LIKE 'sqlite_%' AND name NOT LIKE '_cf_%' AND name <> 'd1_migrations' ORDER BY name;" local table_json - table_json="$(npx wrangler d1 execute "$database" --remote --command "$query" --json)" + if ! table_json="$(npx wrangler d1 execute "$database" --remote --command "$query" --json)"; then + echo "::error title=D1 table discovery failed::Unable to enumerate ordinary tables in ${database}. Verify remote access and inspect the Wrangler error above. No backup was uploaded." + exit 1 + fi + if ! jq -e 'length > 0 and all(.[]; .success == true)' <<< "$table_json" >/dev/null; then + echo "::error title=D1 table discovery returned an error::Wrangler did not return a successful result for ${database}. No backup was uploaded." + exit 1 + fi local tables=() - mapfile -t tables < <(jq -r '.[] | select(.success == true) | .results[] | .name' <<< "$table_json") + mapfile -t tables < <(jq -r '.[] | .results[] | .name' <<< "$table_json") if [ "${#tables[@]}" -eq 0 ]; then - echo "No exportable data tables found for $database" >&2 + echo "::error title=D1 database has no exportable tables::No ordinary data tables were found for ${database}. No backup was uploaded." exit 1 fi local table_args=() for table in "${tables[@]}"; do table_args+=(--table "$table") done - npx wrangler d1 export "$database" --remote --no-schema --skip-confirmation --output="$output" "${table_args[@]}" - test -s "$output" + if ! npx wrangler d1 export "$database" --remote --no-schema --skip-confirmation --output="$output" "${table_args[@]}"; then + echo "::error title=D1 export failed::Unable to export ${database}. No backup was uploaded." + exit 1 + fi + if [ ! -s "$output" ]; then + echo "::error title=D1 export is empty::Wrangler returned no data for ${database}. No backup was uploaded." + exit 1 + fi } # D1 cannot export a database containing FTS5 as one full dump. The @@ -77,7 +110,7 @@ jobs: - name: Verify backup artifacts shell: bash - run: npx tsx scripts/cloudflare/backup-preflight.ts --phase artifacts --directory "$RUNNER_TEMP" + run: node --disable-warning=MODULE_TYPELESS_PACKAGE_JSON scripts/cloudflare/backup-preflight.ts --phase artifacts --directory "$RUNNER_TEMP" - name: Upload daily and monthly copies shell: bash @@ -85,11 +118,39 @@ jobs: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} run: | + set -euo pipefail + upload_object() { + local object="$1" + local file="$2" + shift 2 + if ! npx wrangler r2 object put "$object" --file="$file" "$@" --remote; then + echo "::error title=R2 backup upload failed::Unable to upload ${object}. The checkpoint is incomplete and must not be counted toward RPO." + exit 1 + fi + } + day="$(date -u +%F)" month="$(date -u +%Y-%m)" - npx wrangler r2 object put "studyinchina-releases/backups/daily/$day/catalog.sql.gz" --file="$RUNNER_TEMP/catalog.sql.gz" --content-type="application/sql" --content-encoding="gzip" --remote - npx wrangler r2 object put "studyinchina-releases/backups/daily/$day/pipeline.sql.gz" --file="$RUNNER_TEMP/pipeline.sql.gz" --content-type="application/sql" --content-encoding="gzip" --remote - npx wrangler r2 object put "studyinchina-releases/backups/daily/$day/sha256.txt" --file="$RUNNER_TEMP/backup-sha256.txt" --content-type="text/plain" --remote - npx wrangler r2 object put "studyinchina-releases/backups/monthly/$month/catalog.sql.gz" --file="$RUNNER_TEMP/catalog.sql.gz" --content-type="application/sql" --content-encoding="gzip" --remote - npx wrangler r2 object put "studyinchina-releases/backups/monthly/$month/pipeline.sql.gz" --file="$RUNNER_TEMP/pipeline.sql.gz" --content-type="application/sql" --content-encoding="gzip" --remote - npx wrangler r2 object put "studyinchina-releases/backups/monthly/$month/sha256.txt" --file="$RUNNER_TEMP/backup-sha256.txt" --content-type="text/plain" --remote + upload_object "studyinchina-releases/backups/daily/$day/catalog.sql.gz" "$RUNNER_TEMP/catalog.sql.gz" --content-type="application/sql" --content-encoding="gzip" + upload_object "studyinchina-releases/backups/daily/$day/pipeline.sql.gz" "$RUNNER_TEMP/pipeline.sql.gz" --content-type="application/sql" --content-encoding="gzip" + upload_object "studyinchina-releases/backups/daily/$day/sha256.txt" "$RUNNER_TEMP/backup-sha256.txt" --content-type="text/plain" + upload_object "studyinchina-releases/backups/monthly/$month/catalog.sql.gz" "$RUNNER_TEMP/catalog.sql.gz" --content-type="application/sql" --content-encoding="gzip" + upload_object "studyinchina-releases/backups/monthly/$month/pipeline.sql.gz" "$RUNNER_TEMP/pipeline.sql.gz" --content-type="application/sql" --content-encoding="gzip" + upload_object "studyinchina-releases/backups/monthly/$month/sha256.txt" "$RUNNER_TEMP/backup-sha256.txt" --content-type="text/plain" + + - name: Explain an incomplete backup + if: ${{ failure() }} + shell: bash + run: | + { + echo '## Cloudflare D1 backup did not complete' + echo + echo 'This run does **not** satisfy the 24-hour RPO and created no verified backup checkpoint.' + echo + echo '- Configuration failure: add or correct the named GitHub Actions repository secret, then rerun.' + echo '- D1 access failure: verify token scope, account, database names and Cloudflare availability.' + echo '- Export/artifact failure: inspect the first failing step; nothing is uploaded before checksum verification.' + echo '- R2 upload failure: treat the checkpoint as incomplete even if some objects were written, then rerun the whole job.' + echo + echo 'Runbook: `docs/backup-and-restore.md#failure-semantics-and-triage`.' + } >> "$GITHUB_STEP_SUMMARY" diff --git a/.github/workflows/vercel-production-alias.yml b/.github/workflows/vercel-production-alias.yml index 27995aa..91af004 100644 --- a/.github/workflows/vercel-production-alias.yml +++ b/.github/workflows/vercel-production-alias.yml @@ -21,7 +21,6 @@ jobs: env: DEPLOYMENT_SHA: ${{ github.event.deployment.sha }} DEPLOYMENT_URL: ${{ github.event.deployment_status.environment_url }} - VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} steps: - name: Check out current main @@ -48,17 +47,26 @@ jobs: echo 'matches=false' >> "$GITHUB_OUTPUT" echo "::notice::Deployment ${DEPLOYMENT_SHA} is not current main ${main_sha}; the stable alias will not be changed." - - name: Detect alias credential + - name: Require stable-alias credential if: steps.main.outputs.matches == 'true' id: credential shell: bash + env: + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} run: | set -euo pipefail if [[ -n "${VERCEL_TOKEN}" ]]; then echo 'configured=true' >> "$GITHUB_OUTPUT" else - echo 'configured=false' >> "$GITHUB_OUTPUT" - echo '::warning::VERCEL_TOKEN is not configured; the Vercel Git deployment succeeded but the explicit studyinchina.vercel.app alias was not reassigned.' + echo '::error title=Stable production alias was not promoted::VERCEL_TOKEN is not configured. The Vercel deployment may be Ready, but studyinchina.vercel.app was not reassigned or smoke-tested by this workflow. See docs/operations/data-maintenance.md#required-github-actions-secrets.' + { + echo '## Stable production alias was not promoted' + echo + echo 'The deployment succeeded, but this workflow cannot reassign or verify `studyinchina.vercel.app` without the `VERCEL_TOKEN` repository secret.' + echo + echo 'This job fails intentionally so a green check cannot be mistaken for a completed production promotion.' + } >> "$GITHUB_STEP_SUMMARY" + exit 1 fi - name: Validate deployment URL @@ -73,6 +81,24 @@ jobs: exit 1 fi + - name: Verify immutable deployment release API + if: >- + steps.main.outputs.matches == 'true' && + steps.credential.outputs.configured == 'true' + shell: bash + run: | + set -euo pipefail + release_api="${DEPLOYMENT_URL%/}/api/v1/releases/current" + for attempt in 1 2 3 4 5 6; do + if curl --fail --silent --show-error "${release_api}" \ + | jq -e '.data.id and .data.recordCounts.programs' >/dev/null; then + exit 0 + fi + sleep 10 + done + echo 'The immutable Vercel deployment did not pass the release API smoke test; the stable alias was not changed.' >&2 + exit 1 + - name: Use Node.js 24 if: >- steps.main.outputs.matches == 'true' && @@ -86,6 +112,8 @@ jobs: steps.main.outputs.matches == 'true' && steps.credential.outputs.configured == 'true' shell: bash + env: + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} run: | set -euo pipefail npx --yes vercel@58.0.0 alias set \ @@ -94,7 +122,7 @@ jobs: --scope henry-yangs-projects-c9706eac \ --token "${VERCEL_TOKEN}" - - name: Verify public release API + - name: Verify stable alias release API if: >- steps.main.outputs.matches == 'true' && steps.credential.outputs.configured == 'true' diff --git a/README.md b/README.md index c91e54e..4ece4cf 100644 --- a/README.md +++ b/README.md @@ -35,12 +35,12 @@ The product is built around three promises:
-| **266** universities | **1,211** programs | **355** scholarships | **62** cities | +| **266** universities | **1,234** programs | **356** scholarships | **62** cities | |:---:|:---:|:---:|:---:|
-The public catalogue also contains **345 published admission-cycle records** and is backed by **2,037 registered official source records**. Snapshot evaluated for **2026-08-08** with `npm run quality:platform-scorecard`. +The public catalogue also contains **256 published admission-cycle records** and is backed by **2,070 registered official source records**. Snapshot evaluated for **2026-08-10** with `npm run quality:platform-scorecard`.
Open the honest data-depth scorecard @@ -49,18 +49,20 @@ Record count is not the same as record completeness. These are the current depth | Quality indicator | Current baseline | Next gate | |---|---:|---:| -| Programs with a current public cycle | 337 / 1,211 · **27.83%** | ≥ 70% | -| Programs with duration | **61.93%** | ≥ 90% | -| Programs with an official application route | **50.87%** | ≥ 80% | -| Programs with known teaching language | **85.96%** | ≥ 95% | -| Programs with eligibility/language evidence | **6.11%** | ≥ 50% | -| Universities connected to scholarships | 205 / 266 | ≥ 230 | +| Universities below three published programs | **8** | 0 | +| Programs with a current public cycle | 253 / 1,234 · **20.50%** | ≥ 70% | +| Programs with duration | **61.59%** | ≥ 90% | +| Programs with an official application route | **50.89%** | ≥ 80% | +| Programs with known teaching language | **85.09%** | ≥ 95% | +| Programs with eligibility/language evidence | **6.00%** | ≥ 50% | +| Universities connected to scholarships | 207 / 266 | ≥ 230 | | Cities with reviewed coordinates | 27 / 62 | 62 / 62 | -| Complete Source Manifests | 10 / 266 | 266 / 266 | +| Source Manifests registered | 10 / 266 | 266 / 266 | +| Completed V2 Source Manifests | 0 / 266 | 266 / 266 | | Complete catalogue reconciliation | 0 / 266 | 266 / 266 | | Platform quality gates passing | 3 / 14 | 14 / 14 | -The raw compatibility dataset contains 272 universities, 1,232 programs and 381 scholarships. Draft, archived, identity-conflicting or publication-ineligible records are intentionally excluded from the public numbers above. +The raw compatibility dataset contains 272 universities, 1,255 programs and 384 scholarships. Draft, archived, identity-conflicting or publication-ineligible records are intentionally excluded from the public numbers above.
@@ -70,6 +72,8 @@ The raw compatibility dataset contains 272 universities, 1,232 programs and 381 - Explore programs through a 17-field, applicant-oriented taxonomy, including Chinese language and international Chinese education. - Share URL-based filters, sorting and pagination; remove active filters individually and preserve browser history. - Move from application state and deadline to fees, language and duration through decision-first cards and detail-page application snapshots. +- Narrow programs to records with an explicit university or program scholarship relationship without claiming applicant-specific eligibility. +- Explore cities through a geographic constellation or an accessible searchable directory, then use flagship guides with official sources, FAQs and stable section links. - Keep identity-only records available for official discovery while excluding thin pages from search-engine indexing until they meet deterministic completeness gates. - Save records locally, compare up to four programs and print a compact comparison sheet. - Inspect field-level source links, last-check dates and uncertainty states. @@ -278,10 +282,10 @@ flowchart LR Near-term work is measured by: -- raising the remaining 17 sparse universities to 3–5 verified international-student programs or a documented `limited` reconciliation; -- increasing current-cycle coverage from 27.83% to at least 70%; +- raising the remaining 8 sparse universities to 3–5 verified international-student programs or a documented `limited` reconciliation; +- increasing current-cycle coverage from 20.50% to at least 70%; - reaching 90% duration, 80% official application-route and 95% teaching-language coverage; -- expanding scholarship-connected institutions from 205 to at least 230; +- expanding scholarship-connected institutions from 207 to at least 230; - completing 266 Source Manifests and 266 catalogue reconciliations; - completing three matching shadow releases over at least 72 hours before Production switches to D1; - passing two full monthly update cycles before expansion to 500, then 1,000+ institutions. diff --git a/content/data/admission-cycles.json b/content/data/admission-cycles.json index 0e5427d..fe4fe01 100644 --- a/content/data/admission-cycles.json +++ b/content/data/admission-cycles.json @@ -697,7 +697,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified", + "status": "stale", "id": "cycle-2027-bf053c085767", "programId": "program-dalian-university-of-technology-chinese-language-business-bachelor-progr", "academicYear": "2027-2028", @@ -739,7 +739,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified", + "status": "stale", "id": "cycle-2026-a6e5661b86ff", "programId": "program-soochow-university-international-chinese-language-teachers-scholarship-o", "academicYear": "2026-2027", @@ -928,7 +928,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified", + "status": "stale", "id": "cycle-2027-5df1a1f1218d", "programId": "program-dalian-university-of-technology-chinese-language-international-chinese-l", "academicYear": "2027-2028", @@ -1117,7 +1117,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified", + "status": "stale", "id": "cycle-2026-3ff111b197cd", "programId": "program-fudan-university-international-chinese-language-teachers-scholarship-one", "academicYear": "2026-2027", @@ -3416,7 +3416,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-chinese-degree-bfsu-international-chinese-education-master-2026-2027-autumn", @@ -3442,7 +3442,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave4-depth-bjfu-forestry-bachelor-2026-2027-autumn-fee-reference", @@ -3526,7 +3526,7 @@ ], "verifiedAt": "2026-08-01", "reviewAfter": "2026-08-08", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-local-strong-bipt-b-chemical-engineering-cn-2026-2027-other-fee-reference", @@ -3573,7 +3573,7 @@ ], "verifiedAt": "2026-08-01", "reviewAfter": "2026-08-08", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave7-bipt-robotics-engineering-bachelor-2026-2027-autumn-fee-reference", @@ -3594,7 +3594,7 @@ ], "verifiedAt": "2026-08-01", "reviewAfter": "2026-08-08", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-bit-aeronautical-astronautical-engineering-bachelor-2026-2027-autumn-fee-reference", @@ -3615,7 +3615,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-bit-automation-bachelor-2026-2027-autumn-fee-reference", @@ -3636,7 +3636,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-bit-electronic-science-technology-bachelor-2026-2027-autumn-fee-reference", @@ -3657,7 +3657,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-bit-international-economics-trade-bachelor-2026-2027-autumn-fee-reference", @@ -3678,7 +3678,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-bit-mechatronics-engineering-bachelor-2026-2027-autumn-fee-reference", @@ -3699,7 +3699,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-mew-ne-bisu-foundation-2026-2027-other-fee-reference", @@ -3874,7 +3874,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-chinese-degree-blcu-international-chinese-education-master-2026-2027-autumn", @@ -3900,7 +3900,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-bnu-2026-bachelor-tcsol-2026-2027-autumn", @@ -3926,7 +3926,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-bnu-2026-master-icle-2026-2027-autumn", @@ -3952,7 +3952,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-mew-nss-bsu-chinese-language-2026-2027-autumn", @@ -4178,7 +4178,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-2-bwu-logistics-management-bachelor-2026-2027-other-fee-reference", @@ -4201,7 +4201,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-remaining-cueb-b-business-administration-en-2026-2027-other-fee-reference", @@ -4467,6 +4467,48 @@ "reviewAfter": "2026-08-11", "status": "verified" }, + { + "id": "cycle-gap-sparse-depth-0808-csu-computing-science-bachelor-2026-2027-other-fee-reference", + "programId": "prog-gap-sparse-depth-0808-csu-computing-science-bachelor", + "academicYear": "2026-2027", + "intake": "other", + "opensOn": null, + "closesOn": null, + "dateStatus": "not-announced", + "tuitionCny": 69000, + "tuitionPeriod": "academic-year", + "tuitionStatus": "reference", + "evidenceBasis": "cycle-specific", + "factScope": "partial", + "applicationFeeCny": null, + "sourceIds": [ + "src-gap-program-sparse-depth-0808-csu-computing-science-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-08-15", + "status": "verified" + }, + { + "id": "cycle-gap-sparse-depth-0808-csu-mechanical-engineering-bachelor-2026-2027-other-fee-reference", + "programId": "prog-gap-sparse-depth-0808-csu-mechanical-engineering-bachelor", + "academicYear": "2026-2027", + "intake": "other", + "opensOn": null, + "closesOn": null, + "dateStatus": "not-announced", + "tuitionCny": 69000, + "tuitionPeriod": "academic-year", + "tuitionStatus": "reference", + "evidenceBasis": "cycle-specific", + "factScope": "partial", + "applicationFeeCny": null, + "sourceIds": [ + "src-gap-program-sparse-depth-0808-csu-mechanical-engineering-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-08-15", + "status": "verified" + }, { "id": "cycle-gap-wave3-cust-b-software-engineering-en-2026-2027-other-fee-reference", "programId": "prog-gap-wave3-cust-b-software-engineering-en", @@ -4530,7 +4572,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-2-cuit-chinese-language-culture-2025-2026-spring-fee-reference", @@ -4551,7 +4593,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-2-cuit-chinese-language-culture-2026-2027-autumn-fee-reference", @@ -4572,7 +4614,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mew-scws-cuit-environmental-science-engineering-master-2026-2027-autumn-fee-reference", @@ -4699,7 +4741,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mve-ecma-caa-art-studies-doctorate-2026-2027-autumn-fee-reference", @@ -4744,6 +4786,69 @@ "reviewAfter": "2026-08-12", "status": "verified" }, + { + "id": "cycle-gap-sparse-depth-0808-ccmusic-composition-bachelor-2026-2027-other-fee-reference", + "programId": "prog-gap-sparse-depth-0808-ccmusic-composition-bachelor", + "academicYear": "2026-2027", + "intake": "other", + "opensOn": null, + "closesOn": null, + "dateStatus": "not-announced", + "tuitionCny": 32000, + "tuitionPeriod": "academic-year", + "tuitionStatus": "reference", + "evidenceBasis": "cycle-specific", + "factScope": "partial", + "applicationFeeCny": null, + "sourceIds": [ + "src-gap-program-sparse-depth-0808-ccmusic-composition-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-08-15", + "status": "verified" + }, + { + "id": "cycle-gap-sparse-depth-0808-ccmusic-music-education-vocal-bachelor-2026-2027-other-fee-reference", + "programId": "prog-gap-sparse-depth-0808-ccmusic-music-education-vocal-bachelor", + "academicYear": "2026-2027", + "intake": "other", + "opensOn": null, + "closesOn": null, + "dateStatus": "not-announced", + "tuitionCny": 32000, + "tuitionPeriod": "academic-year", + "tuitionStatus": "reference", + "evidenceBasis": "cycle-specific", + "factScope": "partial", + "applicationFeeCny": null, + "sourceIds": [ + "src-gap-program-sparse-depth-0808-ccmusic-music-education-vocal-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-08-15", + "status": "verified" + }, + { + "id": "cycle-gap-sparse-depth-0808-ccmusic-conducting-bachelor-2026-2027-other-fee-reference", + "programId": "prog-gap-sparse-depth-0808-ccmusic-conducting-bachelor", + "academicYear": "2026-2027", + "intake": "other", + "opensOn": null, + "closesOn": null, + "dateStatus": "not-announced", + "tuitionCny": 32000, + "tuitionPeriod": "academic-year", + "tuitionStatus": "reference", + "evidenceBasis": "cycle-specific", + "factScope": "partial", + "applicationFeeCny": null, + "sourceIds": [ + "src-gap-program-sparse-depth-0808-ccmusic-conducting-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-08-15", + "status": "verified" + }, { "id": "cycle-gap-prog-mew-nss-cfau-international-economics-trade-bachelor-2026-2027-autumn", "programId": "prog-gap-prog-mew-nss-cfau-international-economics-trade-bachelor", @@ -4926,24 +5031,19 @@ "status": "stale" }, { - "id": "cycle-gap-mve-ecs-cumt-electrical-engineering-master-2026-2027-autumn", + "id": "cycle-gap-mve-ecs-cumt-electrical-engineering-master-2026-2027-autumn-fee-reference", "programId": "prog-gap-mve-ecs-cumt-electrical-engineering-master", "academicYear": "2026-2027", "intake": "autumn", - "opensOn": "2026-03-01", - "closesOn": "2026-07-10", - "dateStatus": "published", + "opensOn": null, + "closesOn": null, + "dateStatus": "not-announced", "tuitionCny": 16200, "tuitionPeriod": "academic-year", - "tuitionStatus": "confirmed", + "tuitionStatus": "reference", "evidenceBasis": "cycle-specific", "factScope": "partial", "applicationFeeCny": null, - "notes": { - "en": "CUMT's official catalogue identifies the three-year English master's route; the official 2026 application window ended July 10.", - "zh": "中国矿大官方目录确认三年制英文电气工程硕士,2026申请窗口于7月10日结束。", - "ru": "Официальный каталог CUMT подтверждает трёхлетнюю англоязычную магистратуру; приём завершился 10 июля 2026 года." - }, "sourceIds": [ "src-gap-program-mve-ecs-cumt-electrical-engineering-master", "src-gap-program-mve-ecs-cumt-electrical-engineering-master-support-1" @@ -4953,24 +5053,19 @@ "status": "verified" }, { - "id": "cycle-gap-mve-ecs-cumt-chinese-one-year-2026-2027-autumn", + "id": "cycle-gap-mve-ecs-cumt-chinese-one-year-2026-2027-autumn-fee-reference", "programId": "prog-gap-mve-ecs-cumt-chinese-one-year", "academicYear": "2026-2027", "intake": "autumn", "opensOn": null, - "closesOn": "2026-07-10", - "dateStatus": "published", + "closesOn": null, + "dateStatus": "not-announced", "tuitionCny": 12000, "tuitionPeriod": "academic-year", - "tuitionStatus": "confirmed", + "tuitionStatus": "reference", "evidenceBasis": "cycle-specific", "factScope": "partial", "applicationFeeCny": null, - "notes": { - "en": "CUMT's current official page publishes the one-year route, CNY 12,000 tuition and July 10, 2026 deadline; the cycle is closed.", - "zh": "中国矿业大学当期官方页面公布一学年项目、12000元学费及2026年7月10日截止日期,现已截止。", - "ru": "Текущая официальная страница CUMT указывает годовую программу, плату 12 000 юаней и закрытый срок 10 июля 2026 года." - }, "sourceIds": [ "src-gap-program-mve-ecs-cumt-chinese-one-year" ], @@ -4979,24 +5074,19 @@ "status": "verified" }, { - "id": "cycle-gap-mve-ecs-cumt-safety-science-master-2026-2027-autumn", + "id": "cycle-gap-mve-ecs-cumt-safety-science-master-2026-2027-autumn-fee-reference", "programId": "prog-gap-mve-ecs-cumt-safety-science-master", "academicYear": "2026-2027", "intake": "autumn", - "opensOn": "2026-03-01", - "closesOn": "2026-07-10", - "dateStatus": "published", + "opensOn": null, + "closesOn": null, + "dateStatus": "not-announced", "tuitionCny": 16200, "tuitionPeriod": "academic-year", - "tuitionStatus": "confirmed", + "tuitionStatus": "reference", "evidenceBasis": "cycle-specific", "factScope": "partial", "applicationFeeCny": null, - "notes": { - "en": "The current official program catalogue and application page confirm this three-year English master's route; the 2026 degree window closed July 10.", - "zh": "当期官方项目目录和申请页面确认三年制英文硕士,2026学历申请已于7月10日截止。", - "ru": "Текущий официальный каталог и страница подачи подтверждают трёхлетнюю англоязычную магистратуру; набор закрыт 10 июля 2026 года." - }, "sourceIds": [ "src-gap-program-mve-ecs-cumt-safety-science-master", "src-gap-program-mve-ecs-cumt-safety-science-master-support-1", @@ -5588,7 +5678,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-2-cuz-radio-tv-directing-bachelor-2026-2027-autumn-fee-reference", @@ -5609,7 +5699,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-mew-ne-dlmu-chinese-language-semester-2026-2027-other-fee-reference", @@ -5634,24 +5724,19 @@ "status": "verified" }, { - "id": "cycle-gap-breadth-dlmu-foundation-college-preparatory-2026-2027-autumn", + "id": "cycle-gap-breadth-dlmu-foundation-college-preparatory-2026-2027-autumn-fee-reference", "programId": "prog-gap-breadth-dlmu-foundation-college-preparatory", "academicYear": "2026-2027", "intake": "autumn", "opensOn": null, - "closesOn": "2026-07-10", - "dateStatus": "published", + "closesOn": null, + "dateStatus": "not-announced", "tuitionCny": 20000, "tuitionPeriod": "academic-year", - "tuitionStatus": "confirmed", + "tuitionStatus": "reference", "evidenceBasis": "cycle-specific", "factScope": "partial", "applicationFeeCny": null, - "notes": { - "en": "The official page describes a one-year preparation route in Chinese, culture, mathematics and English, with a July 10 application deadline.", - "zh": "官方页面说明该项目为一年制预科,包含汉语、中国文化、数学和英语课程,申请截止日为7月10日。", - "ru": "Официальная страница описывает годовую подготовительную программу по китайскому языку, культуре, математике и английскому с дедлайном 10 июля." - }, "sourceIds": [ "src-gap-program-breadth-dlmu-foundation-college-preparatory", "src-gap-program-breadth-dlmu-foundation-college-preparatory-support-1" @@ -5934,7 +6019,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-dufe-chinese-language-2026-2027-autumn", @@ -5960,7 +6045,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-local-dufe-m-financial-management-en-2026-2027-other-fee-reference", @@ -6179,7 +6264,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-chinese-degree-ecnu-chinese-language-culture-bachelor-2026-2027-autumn", @@ -6205,7 +6290,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-chinese-degree-ecnu-chinese-language-literature-bachelor-2026-2027-autumn", @@ -6231,7 +6316,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-ecnu-2026-doctor-icle-2026-2027-autumn", @@ -6257,7 +6342,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-chinese-degree-ecnu-international-chinese-education-master-2026-2027-autumn", @@ -6283,7 +6368,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-chinese-degree-ecnu-international-chinese-education-bachelor-2026-2027-autumn", @@ -6309,7 +6394,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mve-ecs-ecupl-business-chinese-bachelor-2026-2027-autumn", @@ -6356,7 +6441,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mve-ecs-ecupl-economic-investigation-bachelor-2026-2027-autumn", @@ -6408,7 +6493,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mve-ecs-ecupl-politics-administration-bachelor-2026-2027-autumn", @@ -6538,7 +6623,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-chinese-degree-fudan-international-chinese-education-master-2026-2027-autumn", @@ -6564,7 +6649,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave5-fjnu-computer-science-and-technology-bachelor-2026-2027-autumn-fee-reference", @@ -6920,7 +7005,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-gdufs-chinese-business-bachelor-2026-2027-other-fee-reference", @@ -6941,7 +7026,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-gdufs-chinese-culture-communication-bachelor-2026-2027-other-fee-reference", @@ -6962,7 +7047,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-clw-sw-gdufs-iclt-year-2026-2027-autumn", @@ -6988,7 +7073,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-chinese-degree-gdufs-international-chinese-education-master-2026-2027-autumn", @@ -7015,7 +7100,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-gdufs-mba-international-2026-2026-2027-other-fee-reference", @@ -7036,7 +7121,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-local-gxmu-b-clinical-medicine-cn-2026-2027-other", @@ -7088,7 +7173,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-local-gxmu-b-stomatology-cn-2026-2027-other", @@ -7178,6 +7263,48 @@ "reviewAfter": "2026-08-10", "status": "verified" }, + { + "id": "cycle-gap-sparse-depth-0808-gxu-chinese-language-major-bachelor-2026-2027-other-fee-reference", + "programId": "prog-gap-sparse-depth-0808-gxu-chinese-language-major-bachelor", + "academicYear": "2026-2027", + "intake": "other", + "opensOn": null, + "closesOn": null, + "dateStatus": "not-announced", + "tuitionCny": 11000, + "tuitionPeriod": "academic-year", + "tuitionStatus": "reference", + "evidenceBasis": "cycle-specific", + "factScope": "partial", + "applicationFeeCny": null, + "sourceIds": [ + "src-gap-program-sparse-depth-0808-gxu-chinese-language-major-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-08-15", + "status": "verified" + }, + { + "id": "cycle-gap-sparse-depth-0808-gxu-chinese-language-student-2026-2027-other-fee-reference", + "programId": "prog-gap-sparse-depth-0808-gxu-chinese-language-student", + "academicYear": "2026-2027", + "intake": "other", + "opensOn": null, + "closesOn": null, + "dateStatus": "not-announced", + "tuitionCny": 10500, + "tuitionPeriod": "academic-year", + "tuitionStatus": "reference", + "evidenceBasis": "cycle-specific", + "factScope": "partial", + "applicationFeeCny": null, + "sourceIds": [ + "src-gap-program-sparse-depth-0808-gxu-chinese-language-student" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-08-15", + "status": "verified" + }, { "id": "cycle-gap-wave3-gxtcmu-acupuncture-tuina-bachelor-2026-2027-autumn", "programId": "prog-gap-wave3-gxtcmu-acupuncture-tuina-bachelor", @@ -7776,7 +7903,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-gznu-chinese-language-one-semester-fall-2026-2026-2027-autumn-fee-reference", @@ -7797,7 +7924,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-gznu-tourism-management-master-2026-2027-autumn", @@ -7824,7 +7951,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave5-west-gzu-data-science-big-data-bachelor-2026-2027-other-fee-reference", @@ -8105,7 +8232,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-hdu-artificial-intelligence-bachelor-2026-2026-2027-other-fee-reference", @@ -8126,7 +8253,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-hdu-business-management-bachelor-2026-2026-2027-other-fee-reference", @@ -8147,7 +8274,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-hdu-computer-science-bachelor-2026-2026-2027-other-fee-reference", @@ -8168,7 +8295,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-hdu-digital-economy-bachelor-2026-2026-2027-other-fee-reference", @@ -8189,7 +8316,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-hdu-mechanical-bachelor-2026-2026-2027-other-fee-reference", @@ -8210,7 +8337,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-hznu-2026-bachelor-icle-2026-2027-autumn", @@ -8236,7 +8363,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-hznu-2026-one-year-icle-2026-2027-autumn", @@ -8262,7 +8389,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-hit-winter-short-term-chinese-2026-2026-2027-other", @@ -8288,7 +8415,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-hit-long-term-chinese-language-2026-2027-autumn", @@ -8314,7 +8441,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave3-hmu-b-clinical-medicine-mbbs-2026-2027-autumn", @@ -9029,7 +9156,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-hubu-management-philosophy-master-2026-2027-other-fee-reference", @@ -9050,7 +9177,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-hubu-nanomaterials-devices-master-2026-2027-other-fee-reference", @@ -9071,7 +9198,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-hnu-chemistry-doctorate-2026-2027-autumn", @@ -9097,7 +9224,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-hnu-computer-science-technology-master-2026-2027-autumn", @@ -9123,7 +9250,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-hnu-mechanical-engineering-doctorate-2026-2027-autumn", @@ -9149,7 +9276,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-2-hutb-chinese-language-2026-2027-autumn-fee-reference", @@ -9170,7 +9297,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-2-hutb-international-business-master-2026-2027-autumn-fee-reference", @@ -9191,7 +9318,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave7-imnu-economics-bachelor-2026-2027-autumn", @@ -9217,7 +9344,7 @@ ], "verifiedAt": "2026-08-01", "reviewAfter": "2026-08-08", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave7-imnu-international-chinese-language-education-master-2026-2027-autumn", @@ -9243,7 +9370,7 @@ ], "verifiedAt": "2026-08-01", "reviewAfter": "2026-08-08", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave7-imnu-translation-bachelor-2026-2027-autumn", @@ -9269,7 +9396,7 @@ ], "verifiedAt": "2026-08-01", "reviewAfter": "2026-08-08", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-mew-ne-imu-chinese-one-year-2026-2027-autumn", @@ -9478,7 +9605,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-jlu-2026-chinese-language-culture-2026-2027-autumn-fee-reference", @@ -9499,7 +9626,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-jlu-international-economics-trade-bachelor-2026-2027-autumn-fee-reference", @@ -9520,7 +9647,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-jlu-2026-master-icle-2026-2027-autumn-fee-reference", @@ -9542,7 +9669,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-jlu-pharmacy-bachelor-2026-2027-autumn-fee-reference", @@ -9563,7 +9690,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-clw-sw-jnu-chinese-language-bachelor-2026-2027-autumn-fee-reference", @@ -9584,7 +9711,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-clw-sw-jnu-chinese-culture-education-bachelor-2026-2027-autumn-fee-reference", @@ -9605,7 +9732,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-clw-sw-jnu-tcsol-bachelor-2026-2027-autumn-fee-reference", @@ -9626,7 +9753,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-breadth-jnmc-m-clinical-medicine-2026-2027-autumn-fee-reference", @@ -10016,7 +10143,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-mnnu-general-chinese-language-2026-2027-autumn-fee-reference", @@ -10037,7 +10164,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-mnnu-iclt-year-international-chinese-education-2026-2027-autumn", @@ -10063,7 +10190,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mew-scws-ncu-business-chinese-short-course-2026-2027-other-fee-reference", @@ -10335,7 +10462,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-nju-2026-master-icle-2026-2027-autumn", @@ -10361,7 +10488,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mve-ecs-nuaa-mechanical-engineering-master-2026-2027-autumn", @@ -10523,7 +10650,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mve-jzh-nufe-ai-master-2026-2027-autumn-fee-reference", @@ -10565,7 +10692,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mve-jzh-nufe-chinese-foundation-2026-2027-autumn-fee-reference", @@ -11414,7 +11541,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave3-depth-nenu-education-bachelor-2026-2027-autumn-fee-reference", @@ -11528,7 +11655,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave3-depth-nenu-wetland-science-master-english-2026-2027-autumn-fee-reference", @@ -11660,7 +11787,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-mew-nnw-nwupl-law-master-2026-2027-autumn-fee-reference", @@ -11728,7 +11855,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-pku-depth-cs-master-english-2026-2027-autumn-fee-reference", @@ -11834,7 +11961,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-pku-depth-impa-cppic-master-2026-2027-autumn-fee-reference", @@ -12304,7 +12431,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave5-west-snnu-educational-technology-doctorate-english-2026-2027-autumn", @@ -12357,7 +12484,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave5-west-snnu-theoretical-economics-doctorate-english-2026-2027-autumn", @@ -12477,7 +12604,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave3-sdufe-chinese-language-program-2026-2027-autumn-fee-reference", @@ -12756,7 +12883,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-lixin-international-economics-trade-bachelor-2026-2027-other-fee-reference", @@ -12778,7 +12905,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mve-jzh-lixin-taxation-bachelor-2026-2027-other-fee-reference", @@ -12913,7 +13040,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-shnu-2026-one-year-chinese-literature-2026-2027-autumn", @@ -12939,7 +13066,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mve-jzh-shou-chinese-foundation-2026-2027-autumn", @@ -13202,7 +13329,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-shu-2026-master-icle-2026-2027-autumn", @@ -13228,7 +13355,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mve-jzh-suep-control-science-master-2026-2027-autumn-fee-reference", @@ -13291,7 +13418,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mve-jzh-suep-english-translation-master-2026-2027-autumn-fee-reference", @@ -13333,7 +13460,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mve-jzh-suep-power-engineering-master-2026-2027-autumn-fee-reference", @@ -13884,7 +14011,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-clw-sw-szu-icl-master-2026-2027-autumn-fee-reference", @@ -13906,7 +14033,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-szu-tcsol-bachelor-2026-2026-2027-autumn-fee-reference", @@ -13927,7 +14054,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave3-depth-sicau-chinese-language-literature-bachelor-2026-2027-autumn-fee-reference", @@ -14125,7 +14252,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-sisu-chinese-language-2026-2027-2026-2027-other", @@ -14151,7 +14278,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-sisu-chinese-language-2026-2027-2026-2027-spring", @@ -14177,7 +14304,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-local-sisu-b-international-economics-trade-2026-2027-other-fee-reference", @@ -14240,7 +14367,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-sicnu-hsk-special-training-2026-2027-other-fee-reference", @@ -14261,7 +14388,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-remaining-sicnu-b-tcsol-2026-2027-other-fee-reference", @@ -14309,7 +14436,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mve-jzh-suda-iclt-one-year-2026-2027-autumn", @@ -14431,7 +14558,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-clw-sw-scnu-general-chinese-year-2026-2027-autumn", @@ -14457,7 +14584,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-clw-sw-scnu-intensive-chinese-semester-2026-2027-autumn", @@ -14483,7 +14610,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-chinese-degree-scnu-international-chinese-education-doctorate-2026-2027-autumn-fee-reference", @@ -14504,7 +14631,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-chinese-degree-scnu-international-chinese-education-master-2026-2027-autumn-fee-reference", @@ -14525,7 +14652,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave4-swpu-b-computer-science-and-technology-2026-2027-autumn-fee-reference", @@ -14614,7 +14741,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave5-west-swu-comparative-education-doctorate-english-2026-2027-autumn", @@ -14692,7 +14819,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave5-west-swu-teacher-education-master-english-2026-2027-autumn", @@ -14740,7 +14867,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-clw-sw-sysu-icl-master-2026-2027-autumn-fee-reference", @@ -14762,7 +14889,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-mew-nss-tyut-chemical-engineering-doctorate-2026-2027-autumn-fee-reference", @@ -15076,7 +15203,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave4-depth-tjnu-foundation-one-year-2026-2027-other-fee-reference", @@ -15144,7 +15271,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-breadth-tju-b-chemical-engineering-en-2026-2027-autumn-fee-reference", @@ -15192,7 +15319,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-breadth-tju-b-environmental-engineering-en-2026-2027-autumn-fee-reference", @@ -15240,7 +15367,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-breadth-tju-foundation-one-year-2026-2027-autumn", @@ -15503,7 +15630,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave4-ujn-b-civil-engineering-2026-2027-other-fee-reference", @@ -15573,7 +15700,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-local-usst-m-biomedical-engineering-en-2026-2027-other-fee-reference", @@ -15615,7 +15742,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-prog-usst-chinese-language-preparatory-2026-2026-2027-spring", @@ -15641,7 +15768,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-local-usst-m-food-science-engineering-en-2026-2027-other-fee-reference", @@ -15794,7 +15921,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-2-wtu-textile-science-engineering-doctorate-2026-2027-autumn", @@ -15821,7 +15948,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-whut-business-administration-bachelor-2026-2027-autumn-fee-reference", @@ -15842,7 +15969,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-whut-computer-science-technology-bachelor-2026-2027-autumn-fee-reference", @@ -15863,7 +15990,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-whut-logistics-management-bachelor-2026-2027-autumn-fee-reference", @@ -15884,7 +16011,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-whut-mechanical-engineering-bachelor-2026-2027-autumn-fee-reference", @@ -15905,7 +16032,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-whut-mining-engineering-bachelor-2026-2027-autumn-fee-reference", @@ -15926,7 +16053,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-clw-sw-xmu-chinese-business-bachelor-2026-2027-other-fee-reference", @@ -15947,7 +16074,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-clw-sw-xmu-chinese-education-bachelor-2026-2027-other-fee-reference", @@ -15968,7 +16095,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-clw-sw-xmu-icl-master-2026-2027-autumn", @@ -15994,7 +16121,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave3-xisu-language-general-chinese-2026-2027-spring", @@ -16812,7 +16939,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-ytu-chinese-language-bachelor-2026-2027-other-fee-reference", @@ -16833,7 +16960,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-ytu-international-economics-trade-bachelor-2026-2027-other-fee-reference", @@ -16854,7 +16981,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave8-ytu-law-doctorate-2026-2027-other-fee-reference", @@ -16875,7 +17002,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-remaining-ytu-nondegree-chinese-language-spring-2026-2026-2027-other", @@ -16971,7 +17098,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-chinese-degree-ynnu-international-chinese-education-master-2026-2027-other-fee-reference", @@ -16993,7 +17120,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-local-ynnu-b-tcsol-cn-2026-2027-other", @@ -17153,7 +17280,7 @@ ], "verifiedAt": "2026-08-01", "reviewAfter": "2026-08-08", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave7-ynufe-project-management-master-2026-2027-autumn-fee-reference", @@ -17174,7 +17301,7 @@ ], "verifiedAt": "2026-08-01", "reviewAfter": "2026-08-08", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave7-zafu-computer-science-bachelor-2026-2027-autumn-fee-reference", @@ -17195,7 +17322,7 @@ ], "verifiedAt": "2026-08-01", "reviewAfter": "2026-08-08", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave7-zafu-forestry-bachelor-2026-2027-autumn-fee-reference", @@ -17216,7 +17343,7 @@ ], "verifiedAt": "2026-08-01", "reviewAfter": "2026-08-08", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave7-zafu-international-economics-trade-bachelor-2026-2027-autumn-fee-reference", @@ -17237,7 +17364,7 @@ ], "verifiedAt": "2026-08-01", "reviewAfter": "2026-08-08", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-mve-ecma-zcmu-chinese-medicine-bachelor-2026-2027-other-fee-reference", @@ -17353,7 +17480,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-local-zjgsu-b-ecommerce-en-2026-2027-other-fee-reference", @@ -17488,7 +17615,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-chinese-degree-zjnu-international-chinese-education-doctorate-2026-2027-autumn", @@ -17514,7 +17641,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-chinese-degree-zjnu-international-chinese-education-master-2026-2027-autumn", @@ -17540,7 +17667,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "cycle-gap-wave4-depth-zjnu-mathematics-master-english-2026-2027-other-fee-reference", @@ -17788,5 +17915,90 @@ "verifiedAt": "2026-08-03", "reviewAfter": "2026-08-10", "status": "verified" + }, + { + "id": "cycle-gap-sparse-depth-0808-zzu-medical-foundation-2026-2027-other-fee-reference", + "programId": "prog-gap-sparse-depth-0808-zzu-medical-foundation", + "academicYear": "2026-2027", + "intake": "other", + "opensOn": null, + "closesOn": null, + "dateStatus": "not-announced", + "tuitionCny": 15000, + "tuitionPeriod": "program", + "tuitionStatus": "reference", + "evidenceBasis": "cycle-specific", + "factScope": "partial", + "applicationFeeCny": null, + "sourceIds": [ + "src-gap-program-sparse-depth-0808-zzu-medical-foundation", + "src-gap-program-sparse-depth-0808-zzu-medical-foundation-support-1" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-08-15", + "status": "verified" + }, + { + "id": "cycle-gap-sparse-depth-0808-zuel-chinese-language-2026-2027-other-fee-reference", + "programId": "prog-gap-sparse-depth-0808-zuel-chinese-language", + "academicYear": "2026-2027", + "intake": "other", + "opensOn": null, + "closesOn": null, + "dateStatus": "not-announced", + "tuitionCny": 16000, + "tuitionPeriod": "academic-year", + "tuitionStatus": "reference", + "evidenceBasis": "cycle-specific", + "factScope": "partial", + "applicationFeeCny": null, + "sourceIds": [ + "src-gap-program-sparse-depth-0808-zuel-chinese-language" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-08-15", + "status": "verified" + }, + { + "id": "cycle-gap-sparse-depth-0808-zuel-international-law-english-master-2026-2027-other-fee-reference", + "programId": "prog-gap-sparse-depth-0808-zuel-international-law-english-master", + "academicYear": "2026-2027", + "intake": "other", + "opensOn": null, + "closesOn": null, + "dateStatus": "not-announced", + "tuitionCny": 30000, + "tuitionPeriod": "academic-year", + "tuitionStatus": "reference", + "evidenceBasis": "cycle-specific", + "factScope": "partial", + "applicationFeeCny": null, + "sourceIds": [ + "src-gap-program-sparse-depth-0808-zuel-international-law-english-master" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-08-15", + "status": "verified" + }, + { + "id": "cycle-gap-sparse-depth-0808-zuel-imba-master-2026-2027-other-fee-reference", + "programId": "prog-gap-sparse-depth-0808-zuel-imba-master", + "academicYear": "2026-2027", + "intake": "other", + "opensOn": null, + "closesOn": null, + "dateStatus": "not-announced", + "tuitionCny": 30000, + "tuitionPeriod": "academic-year", + "tuitionStatus": "reference", + "evidenceBasis": "cycle-specific", + "factScope": "partial", + "applicationFeeCny": null, + "sourceIds": [ + "src-gap-program-sparse-depth-0808-zuel-imba-master" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-08-15", + "status": "verified" } ] diff --git a/content/data/programs.json b/content/data/programs.json index 7c2ed08..7675199 100644 --- a/content/data/programs.json +++ b/content/data/programs.json @@ -15113,6 +15113,83 @@ "reviewAfter": "2026-09-03", "status": "verified" }, + { + "id": "prog-gap-sparse-depth-0808-csu-chinese-language", + "slug": "gap-sparse-depth-0808-csu-chinese-language-language", + "universityId": "uni-central-south-university", + "name": { + "en": "Chinese Language Program", + "zh": "汉语进修项目", + "ru": "Программа китайского языка" + }, + "degreeLevel": "language", + "discipline": "chinese-education", + "teachingLanguages": [], + "durationMonths": 6, + "durationMonthsMax": 12, + "programUrl": "https://intl.csu.edu.cn/info/1141/3799.htm", + "applyUrl": "https://csu.17gz.org/", + "languageRequirements": [], + "verificationScope": "facts", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-csu-chinese-language" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-csu-computing-science-bachelor", + "slug": "gap-sparse-depth-0808-csu-computing-science-bachelor-bachelor", + "universityId": "uni-central-south-university", + "name": { + "en": "Computing Science", + "zh": "计算科学", + "ru": "Вычислительная наука" + }, + "degreeLevel": "bachelor", + "discipline": "engineering", + "teachingLanguages": [ + "English" + ], + "durationMonths": 48, + "programUrl": "https://intl.csu.edu.cn/English/Admission/Undergraduate_Programs/English_taught_Programs.htm", + "applyUrl": "https://csu.17gz.org/", + "languageRequirements": [], + "verificationScope": "facts", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-csu-computing-science-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-csu-mechanical-engineering-bachelor", + "slug": "gap-sparse-depth-0808-csu-mechanical-engineering-bachelor-bachelor", + "universityId": "uni-central-south-university", + "name": { + "en": "Mechanical Engineering", + "zh": "机械工程", + "ru": "Механическая инженерия" + }, + "degreeLevel": "bachelor", + "discipline": "engineering", + "teachingLanguages": [ + "English" + ], + "durationMonths": 48, + "programUrl": "https://intl.csu.edu.cn/English/Admission/Undergraduate_Programs/English_taught_Programs.htm", + "applyUrl": "https://csu.17gz.org/", + "languageRequirements": [], + "verificationScope": "facts", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-csu-mechanical-engineering-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, { "id": "prog-gap-wave3-cust-m-computer-applied-technology-en", "slug": "gap-wave3-cust-m-computer-applied-technology-en-master", @@ -15722,6 +15799,78 @@ "reviewAfter": "2026-09-04", "status": "verified" }, + { + "id": "prog-gap-sparse-depth-0808-ccmusic-composition-bachelor", + "slug": "gap-sparse-depth-0808-ccmusic-composition-bachelor-bachelor", + "universityId": "uni-china-conservatory-of-music", + "name": { + "en": "Composition and Composition Theory", + "zh": "作曲与作曲技术理论", + "ru": "Композиция и теория композиции" + }, + "degreeLevel": "bachelor", + "discipline": "art-design", + "teachingLanguages": [], + "durationMonths": 60, + "programUrl": "https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf", + "applyUrl": null, + "languageRequirements": [], + "verificationScope": "facts", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-ccmusic-composition-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-ccmusic-music-education-vocal-bachelor", + "slug": "gap-sparse-depth-0808-ccmusic-music-education-vocal-bachelor-bachelor", + "universityId": "uni-china-conservatory-of-music", + "name": { + "en": "Music Education (Vocal Specialty)", + "zh": "音乐教育(声乐特长)", + "ru": "Музыкальное образование (вокальная специализация)" + }, + "degreeLevel": "bachelor", + "discipline": "humanities", + "teachingLanguages": [], + "durationMonths": 48, + "programUrl": "https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf", + "applyUrl": null, + "languageRequirements": [], + "verificationScope": "facts", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-ccmusic-music-education-vocal-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-ccmusic-conducting-bachelor", + "slug": "gap-sparse-depth-0808-ccmusic-conducting-bachelor-bachelor", + "universityId": "uni-china-conservatory-of-music", + "name": { + "en": "Music Performance (Conducting)", + "zh": "音乐表演(指挥)", + "ru": "Музыкальное исполнительство (дирижирование)" + }, + "degreeLevel": "bachelor", + "discipline": "art-design", + "teachingLanguages": [], + "durationMonths": 60, + "programUrl": "https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf", + "applyUrl": null, + "languageRequirements": [], + "verificationScope": "facts", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-ccmusic-conducting-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, { "id": "prog-gap-prog-mew-nss-cfau-chinese-language", "slug": "gap-prog-mew-nss-cfau-chinese-language-language", @@ -19341,6 +19490,54 @@ "reviewAfter": "2026-08-29", "status": "verified" }, + { + "id": "prog-gap-sparse-depth-0808-gxu-chinese-language-major-bachelor", + "slug": "gap-sparse-depth-0808-gxu-chinese-language-major-bachelor-bachelor", + "universityId": "uni-guangxi-university", + "name": { + "en": "Chinese Language Major", + "zh": "汉语言专业", + "ru": "Китайский язык" + }, + "degreeLevel": "bachelor", + "discipline": "chinese-education", + "teachingLanguages": [], + "durationMonths": null, + "programUrl": "https://gjxy.gxu.edu.cn/LXXD/sfbz.htm", + "applyUrl": null, + "languageRequirements": [], + "verificationScope": "identity", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-gxu-chinese-language-major-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-gxu-chinese-language-student", + "slug": "gap-sparse-depth-0808-gxu-chinese-language-student-language", + "universityId": "uni-guangxi-university", + "name": { + "en": "Chinese Language Program", + "zh": "汉语进修生项目", + "ru": "Программа китайского языка" + }, + "degreeLevel": "language", + "discipline": "chinese-education", + "teachingLanguages": [], + "durationMonths": null, + "programUrl": "https://gjxy.gxu.edu.cn/LXXD/sfbz.htm", + "applyUrl": null, + "languageRequirements": [], + "verificationScope": "identity", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-gxu-chinese-language-student" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, { "id": "prog-gap-wave3-gxtcmu-acupuncture-tuina-bachelor", "slug": "gap-wave3-gxtcmu-acupuncture-tuina-bachelor-bachelor", @@ -23334,6 +23531,33 @@ "reviewAfter": "2026-08-29", "status": "verified" }, + { + "id": "prog-gap-sparse-depth-0808-kust-energy-and-power-engineering-bachelor", + "slug": "gap-sparse-depth-0808-kust-energy-and-power-engineering-bachelor-bachelor", + "universityId": "uni-kunming-university-of-science-and-technology", + "name": { + "en": "Energy and Power Engineering", + "zh": "能源与动力工程", + "ru": "Энергетика и теплоэнергетика" + }, + "degreeLevel": "bachelor", + "discipline": "engineering", + "teachingLanguages": [ + "English" + ], + "durationMonths": null, + "programUrl": "https://gjxy.kust.edu.cn/info/1336/1351.htm", + "applyUrl": "https://gjxy.kust.edu.cn/info/1337/1718.htm", + "languageRequirements": [], + "verificationScope": "facts", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-kust-energy-and-power-engineering-bachelor", + "src-gap-program-sparse-depth-0808-kust-energy-and-power-engineering-bachelor-support-1" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, { "id": "prog-gap-breadth-kust-b-international-economics-trade-en", "slug": "gap-breadth-kust-b-international-economics-trade-en-bachelor", @@ -23361,6 +23585,60 @@ "reviewAfter": "2026-08-29", "status": "verified" }, + { + "id": "prog-gap-sparse-depth-0808-kust-mechanical-engineering-bachelor", + "slug": "gap-sparse-depth-0808-kust-mechanical-engineering-bachelor-bachelor", + "universityId": "uni-kunming-university-of-science-and-technology", + "name": { + "en": "Mechanical Engineering", + "zh": "机械工程", + "ru": "Механическая инженерия" + }, + "degreeLevel": "bachelor", + "discipline": "engineering", + "teachingLanguages": [ + "English" + ], + "durationMonths": null, + "programUrl": "https://gjxy.kust.edu.cn/info/1336/1351.htm", + "applyUrl": "https://gjxy.kust.edu.cn/info/1337/1718.htm", + "languageRequirements": [], + "verificationScope": "facts", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-kust-mechanical-engineering-bachelor", + "src-gap-program-sparse-depth-0808-kust-mechanical-engineering-bachelor-support-1" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-kust-metallurgical-engineering-bachelor", + "slug": "gap-sparse-depth-0808-kust-metallurgical-engineering-bachelor-bachelor", + "universityId": "uni-kunming-university-of-science-and-technology", + "name": { + "en": "Metallurgical Engineering", + "zh": "冶金工程", + "ru": "Металлургическая инженерия" + }, + "degreeLevel": "bachelor", + "discipline": "engineering", + "teachingLanguages": [ + "English" + ], + "durationMonths": null, + "programUrl": "https://gjxy.kust.edu.cn/info/1336/1351.htm", + "applyUrl": "https://gjxy.kust.edu.cn/info/1337/1718.htm", + "languageRequirements": [], + "verificationScope": "facts", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-kust-metallurgical-engineering-bachelor", + "src-gap-program-sparse-depth-0808-kust-metallurgical-engineering-bachelor-support-1" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, { "id": "prog-gap-clw-sw-lzu-chinese-language-bachelor", "slug": "gap-clw-sw-lzu-chinese-language-bachelor-bachelor", @@ -25958,6 +26236,81 @@ "reviewAfter": "2026-09-01", "status": "verified" }, + { + "id": "prog-gap-sparse-depth-0808-ouc-business-administration-bachelor", + "slug": "gap-sparse-depth-0808-ouc-business-administration-bachelor-bachelor", + "universityId": "uni-ocean-university-of-china", + "name": { + "en": "Business Administration", + "zh": "工商管理", + "ru": "Деловое администрирование" + }, + "degreeLevel": "bachelor", + "discipline": "business", + "teachingLanguages": [], + "durationMonths": null, + "programUrl": "https://eweb.ouc.edu.cn/4200/list.htm", + "applyUrl": "https://ouc.at0086.cn/", + "languageRequirements": [], + "verificationScope": "identity", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-ouc-business-administration-bachelor", + "src-gap-program-sparse-depth-0808-ouc-business-administration-bachelor-support-1" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-ouc-computer-science-and-technology-bachelor", + "slug": "gap-sparse-depth-0808-ouc-computer-science-and-technology-bachelor-bachelor", + "universityId": "uni-ocean-university-of-china", + "name": { + "en": "Computer Science and Technology", + "zh": "计算机科学与技术", + "ru": "Информатика и технологии" + }, + "degreeLevel": "bachelor", + "discipline": "engineering", + "teachingLanguages": [], + "durationMonths": null, + "programUrl": "https://eweb.ouc.edu.cn/4200/list.htm", + "applyUrl": "https://ouc.at0086.cn/", + "languageRequirements": [], + "verificationScope": "identity", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-ouc-computer-science-and-technology-bachelor", + "src-gap-program-sparse-depth-0808-ouc-computer-science-and-technology-bachelor-support-1" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-ouc-international-economics-and-trade-bachelor", + "slug": "gap-sparse-depth-0808-ouc-international-economics-and-trade-bachelor-bachelor", + "universityId": "uni-ocean-university-of-china", + "name": { + "en": "International Economics and Trade", + "zh": "国际经济与贸易", + "ru": "Международная экономика и торговля" + }, + "degreeLevel": "bachelor", + "discipline": "business", + "teachingLanguages": [], + "durationMonths": null, + "programUrl": "https://eweb.ouc.edu.cn/4200/list.htm", + "applyUrl": "https://ouc.at0086.cn/", + "languageRequirements": [], + "verificationScope": "identity", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-ouc-international-economics-and-trade-bachelor", + "src-gap-program-sparse-depth-0808-ouc-international-economics-and-trade-bachelor-support-1" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, { "id": "prog-gap-pku-depth-cs-master-english", "slug": "gap-pku-depth-cs-master-english-master", @@ -29990,6 +30343,78 @@ "reviewAfter": "2026-08-30", "status": "verified" }, + { + "id": "prog-gap-sparse-depth-0808-sustech-bioinformatics-bachelor", + "slug": "gap-sparse-depth-0808-sustech-bioinformatics-bachelor-bachelor", + "universityId": "uni-southern-university-of-science-and-technology", + "name": { + "en": "Bioinformatics", + "zh": "生物信息学", + "ru": "Биоинформатика" + }, + "degreeLevel": "bachelor", + "discipline": "science", + "teachingLanguages": [], + "durationMonths": null, + "programUrl": "https://infoadmin.sustech.edu.cn/programs/new", + "applyUrl": "https://sustech.at0086.cn/", + "languageRequirements": [], + "verificationScope": "identity", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-sustech-bioinformatics-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-sustech-chemistry-bachelor", + "slug": "gap-sparse-depth-0808-sustech-chemistry-bachelor-bachelor", + "universityId": "uni-southern-university-of-science-and-technology", + "name": { + "en": "Chemistry", + "zh": "化学", + "ru": "Химия" + }, + "degreeLevel": "bachelor", + "discipline": "science", + "teachingLanguages": [], + "durationMonths": null, + "programUrl": "https://infoadmin.sustech.edu.cn/programs/new", + "applyUrl": "https://sustech.at0086.cn/", + "languageRequirements": [], + "verificationScope": "identity", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-sustech-chemistry-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-sustech-computer-science-and-technology-bachelor", + "slug": "gap-sparse-depth-0808-sustech-computer-science-and-technology-bachelor-bachelor", + "universityId": "uni-southern-university-of-science-and-technology", + "name": { + "en": "Computer Science and Technology", + "zh": "计算机科学与技术", + "ru": "Информатика и технологии" + }, + "degreeLevel": "bachelor", + "discipline": "engineering", + "teachingLanguages": [], + "durationMonths": null, + "programUrl": "https://infoadmin.sustech.edu.cn/programs/new", + "applyUrl": "https://sustech.at0086.cn/", + "languageRequirements": [], + "verificationScope": "identity", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-sustech-computer-science-and-technology-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, { "id": "prog-gap-mew-csw-swjtu-chinese-language-literature-master", "slug": "gap-mew-csw-swjtu-chinese-language-literature-master-master", @@ -31855,6 +32280,30 @@ "reviewAfter": "2026-09-01", "status": "verified" }, + { + "id": "prog-gap-sparse-depth-0808-wust-international-business-administration-bachelor", + "slug": "gap-sparse-depth-0808-wust-international-business-administration-bachelor-bachelor", + "universityId": "uni-wuhan-university-of-science-and-technology", + "name": { + "en": "International Business Administration", + "zh": "国际工商管理", + "ru": "Международное деловое администрирование" + }, + "degreeLevel": "bachelor", + "discipline": "business", + "teachingLanguages": [], + "durationMonths": null, + "programUrl": "https://en.wust.edu.cn/About1/Overview.htm", + "applyUrl": null, + "languageRequirements": [], + "verificationScope": "identity", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-wust-international-business-administration-bachelor" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, { "id": "prog-gap-wave8-whut-business-administration-bachelor", "slug": "gap-wave8-whut-business-administration-bachelor-bachelor", @@ -34331,5 +34780,134 @@ "verifiedAt": "2026-08-03", "reviewAfter": "2026-09-02", "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-zzu-architecture-master", + "slug": "gap-sparse-depth-0808-zzu-architecture-master-master", + "universityId": "uni-zhengzhou-university", + "name": { + "en": "Architecture", + "zh": "建筑学", + "ru": "Архитектура" + }, + "degreeLevel": "master", + "discipline": "other", + "teachingLanguages": [ + "English" + ], + "durationMonths": null, + "programUrl": "https://international.zzu.edu.cn/en/article/detail?cid=53&detail=65&pid=53", + "applyUrl": null, + "languageRequirements": [], + "verificationScope": "facts", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-zzu-architecture-master" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-zzu-medical-foundation", + "slug": "gap-sparse-depth-0808-zzu-medical-foundation-foundation", + "universityId": "uni-zhengzhou-university", + "name": { + "en": "International Medical Foundation Program", + "zh": "国际医学预科项目", + "ru": "Международная подготовительная медицинская программа" + }, + "degreeLevel": "foundation", + "discipline": "medicine", + "teachingLanguages": [ + "English" + ], + "durationMonths": 12, + "programUrl": "https://international.zzu.edu.cn/en/admission/detail?cid=17&detail=612&pid=0&spid=0", + "applyUrl": null, + "languageRequirements": [], + "verificationScope": "facts", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-zzu-medical-foundation", + "src-gap-program-sparse-depth-0808-zzu-medical-foundation-support-1" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-zuel-chinese-language", + "slug": "gap-sparse-depth-0808-zuel-chinese-language-language", + "universityId": "uni-zhongnan-university-of-economics-and-law", + "name": { + "en": "Chinese Language Program", + "zh": "汉语进修项目", + "ru": "Программа китайского языка" + }, + "degreeLevel": "language", + "discipline": "chinese-education", + "teachingLanguages": [], + "durationMonths": 12, + "programUrl": "https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf", + "applyUrl": null, + "languageRequirements": [], + "verificationScope": "facts", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-zuel-chinese-language" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-zuel-international-law-english-master", + "slug": "gap-sparse-depth-0808-zuel-international-law-english-master-master", + "universityId": "uni-zhongnan-university-of-economics-and-law", + "name": { + "en": "International Law (English-taught)", + "zh": "国际法(英文授课)", + "ru": "Международное право (на английском языке)" + }, + "degreeLevel": "master", + "discipline": "law-ir", + "teachingLanguages": [ + "English" + ], + "durationMonths": 24, + "programUrl": "https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf", + "applyUrl": null, + "languageRequirements": [], + "verificationScope": "facts", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-zuel-international-law-english-master" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, + { + "id": "prog-gap-sparse-depth-0808-zuel-imba-master", + "slug": "gap-sparse-depth-0808-zuel-imba-master-master", + "universityId": "uni-zhongnan-university-of-economics-and-law", + "name": { + "en": "International MBA (English-taught)", + "zh": "国际工商管理硕士(英文授课)", + "ru": "Международная MBA (на английском языке)" + }, + "degreeLevel": "master", + "discipline": "business", + "teachingLanguages": [ + "English" + ], + "durationMonths": 24, + "programUrl": "https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf", + "applyUrl": null, + "languageRequirements": [], + "verificationScope": "facts", + "sourceIds": [ + "src-gap-program-sparse-depth-0808-zuel-imba-master" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" } ] diff --git a/content/data/scholarships.json b/content/data/scholarships.json index 6ade47f..37bf6fc 100644 --- a/content/data/scholarships.json +++ b/content/data/scholarships.json @@ -3391,6 +3391,39 @@ "reviewAfter": "2026-08-10", "status": "verified" }, + { + "id": "sch-gap-sparse-depth-0808-csu-university-scholarship", + "slug": "gap-sparse-depth-0808-csu-university-scholarship", + "name": { + "en": "Central South University Scholarship for International Students", + "zh": "中南大学国际学生奖学金", + "ru": "Стипендия Центрально-Южного университета для иностранных студентов" + }, + "providerType": "university", + "universityIds": [ + "uni-central-south-university" + ], + "programIds": [], + "coverage": { + "tuition": "unknown", + "accommodation": "unknown", + "insurance": "unknown", + "stipendCnyPerMonth": null + }, + "deadline": null, + "applicationUrl": null, + "summary": { + "en": "The official 2026 guide defines full and partial CSU scholarship tiers for international master and doctoral applicants and a direct CSU online application route. The May 31 deadline is closed and is not published as current.", + "zh": "2026年官方简章定义了面向国际硕士和博士申请者的中南大学全额与部分奖学金及校方在线申请路线;5月31日截止期已关闭,不展示为当前。", + "ru": "Официальное руководство 2026 года определяет полную и частичную стипендии CSU для иностранных магистров и докторантов; дедлайн 31 мая закрыт и не показывается как текущий." + }, + "sourceIds": [ + "src-gap-scholarship-sparse-depth-0808-csu-university-scholarship" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, { "id": "sch-gap-wave3-sch-cust-csc-graduate", "slug": "gap-wave3-sch-cust-csc-graduate", @@ -5765,6 +5798,39 @@ "reviewAfter": "2026-09-04", "status": "verified" }, + { + "id": "sch-gap-sparse-depth-0808-gzhmu-guangdong-government-freshmen", + "slug": "gap-sparse-depth-0808-gzhmu-guangdong-government-freshmen", + "name": { + "en": "Guangdong Government Outstanding International Students Scholarship for Freshmen", + "zh": "广东政府来粤留学生新生奖学金", + "ru": "Стипендия правительства Гуандуна для выдающихся новых иностранных студентов" + }, + "providerType": "province", + "universityIds": [ + "uni-guangzhou-medical-university" + ], + "programIds": [], + "coverage": { + "tuition": "unknown", + "accommodation": "unknown", + "insurance": "unknown", + "stipendCnyPerMonth": null + }, + "deadline": null, + "applicationUrl": null, + "summary": { + "en": "The 2026 official guide states that self-funded international freshmen may apply after admission: CNY 20,000 for master students and CNY 30,000 for doctoral students, paid once after registration. No independent open deadline is asserted.", + "zh": "2026年官方简章说明自费国际新生可在录取后申请:硕士一次性20000元,博士一次性30000元,注册后发放;不声称独立开放截止日。", + "ru": "В официальном руководстве 2026 года указано, что самофинансируемые новые иностранные студенты могут податься после зачисления: 20 000 CNY магистрам и 30 000 CNY докторантам единовременно после регистрации; отдельный дедлайн не утверждается." + }, + "sourceIds": [ + "src-gap-scholarship-sparse-depth-0808-gzhmu-guangdong-government-freshmen" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" + }, { "id": "sch-gap-clw-sw-gzhu-belt-road-scholarship", "slug": "gap-clw-sw-gzhu-belt-road-scholarship", @@ -10825,7 +10891,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "sch-gap-sch-sisu-moe-chongqing-joint-2026", @@ -10894,7 +10960,7 @@ ], "verifiedAt": "2026-08-02", "reviewAfter": "2026-08-09", - "status": "verified" + "status": "stale" }, { "id": "sch-gap-sch-scu-chengdu-sister-city-2026", @@ -13254,5 +13320,38 @@ "verifiedAt": "2026-08-02", "reviewAfter": "2026-09-01", "status": "verified" + }, + { + "id": "sch-gap-sparse-depth-0808-zzu-2026-master-full-scholarship", + "slug": "gap-sparse-depth-0808-zzu-2026-master-full-scholarship", + "name": { + "en": "ZZU 2026 Master Programs Full Scholarship", + "zh": "郑州大学2026年硕士项目全额奖学金", + "ru": "Полная стипендия ZZU для магистерских программ 2026 года" + }, + "providerType": "csc", + "universityIds": [ + "uni-zhengzhou-university" + ], + "programIds": [], + "coverage": { + "tuition": "full", + "accommodation": "full", + "insurance": true, + "stipendCnyPerMonth": null + }, + "deadline": null, + "applicationUrl": null, + "summary": { + "en": "ZZU's official 2026 page describes a full Chinese Government Scholarship for eligible international master applicants, covering tuition, accommodation, living allowance and medical insurance. The accessible text does not provide a reliable current deadline.", + "zh": "郑州大学2026年官方页介绍面向符合条件的国际硕士申请者的中国政府全额奖学金,覆盖学费、住宿、生活补助和医疗保险;可读文本未提供可靠的当前截止日。", + "ru": "Официальная страница ZZU 2026 года описывает полную государственную стипендию для подходящих иностранных магистров, покрывающую обучение, жильё, стипендию на жизнь и страховку; надёжный текущий срок не указан." + }, + "sourceIds": [ + "src-gap-scholarship-sparse-depth-0808-zzu-2026-master-full-scholarship" + ], + "verifiedAt": "2026-08-08", + "reviewAfter": "2026-09-07", + "status": "verified" } ] diff --git a/content/data/sources.json b/content/data/sources.json index 0ec9a79..39af8ff 100644 --- a/content/data/sources.json +++ b/content/data/sources.json @@ -6609,6 +6609,36 @@ "official": true, "accessedAt": "2026-08-04" }, + { + "id": "src-gap-program-sparse-depth-0808-csu-chinese-language", + "url": "https://intl.csu.edu.cn/info/1141/3799.htm", + "title": "2026 CSU Chinese Language Program for International Students", + "publisher": "central-south-university", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-csu-computing-science-bachelor", + "url": "https://intl.csu.edu.cn/English/Admission/Undergraduate_Programs/English_taught_Programs.htm", + "title": "2026 CSU English-taught Undergraduate Programs", + "publisher": "central-south-university", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-csu-mechanical-engineering-bachelor", + "url": "https://intl.csu.edu.cn/English/Admission/Undergraduate_Programs/English_taught_Programs.htm", + "title": "2026 CSU English-taught Undergraduate Programs", + "publisher": "central-south-university", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, { "id": "src-gap-program-wave3-cust-m-computer-applied-technology-en", "url": "https://sie.cust.edu.cn/", @@ -6929,6 +6959,36 @@ "official": true, "accessedAt": "2026-08-05" }, + { + "id": "src-gap-program-sparse-depth-0808-ccmusic-composition-bachelor", + "url": "https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf", + "title": "China Conservatory of Music 2026 International Undergraduate Admission Guide", + "publisher": "china-conservatory-of-music", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-ccmusic-music-education-vocal-bachelor", + "url": "https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf", + "title": "China Conservatory of Music 2026 International Undergraduate Admission Guide", + "publisher": "china-conservatory-of-music", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-ccmusic-conducting-bachelor", + "url": "https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf", + "title": "China Conservatory of Music 2026 International Undergraduate Admission Guide", + "publisher": "china-conservatory-of-music", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, { "id": "src-gap-program-prog-mew-nss-cfau-chinese-language", "url": "https://en.cfau.edu.cn/col2484/col2911/66704.htm", @@ -8969,6 +9029,26 @@ "official": true, "accessedAt": "2026-07-30" }, + { + "id": "src-gap-program-sparse-depth-0808-gxu-chinese-language-major-bachelor", + "url": "https://gjxy.gxu.edu.cn/LXXD/sfbz.htm", + "title": "Guangxi University International Student Fee Standards", + "publisher": "guangxi-university", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-gxu-chinese-language-student", + "url": "https://gjxy.gxu.edu.cn/LXXD/sfbz.htm", + "title": "Guangxi University International Student Fee Standards", + "publisher": "guangxi-university", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, { "id": "src-gap-program-wave3-gxtcmu-acupuncture-tuina-bachelor", "url": "https://www.gxtcmu.edu.cn/fie/zsjz/gxzyydx2023nlxszsjz/content_85510", @@ -11009,6 +11089,26 @@ "official": true, "accessedAt": "2026-07-30" }, + { + "id": "src-gap-program-sparse-depth-0808-kust-energy-and-power-engineering-bachelor", + "url": "https://gjxy.kust.edu.cn/info/1336/1351.htm", + "title": "KUST English-Taught Programs", + "publisher": "kunming-university-of-science-and-technology", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-kust-energy-and-power-engineering-bachelor-support-1", + "url": "https://gjxy.kust.edu.cn/info/1337/1722.htm", + "title": "2026 KUST Undergraduate and Post-graduate Program List", + "publisher": "kunming-university-of-science-and-technology", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, { "id": "src-gap-program-breadth-kust-b-international-economics-trade-en", "url": "https://gjxy.kust.edu.cn/info/1336/1351.htm", @@ -11029,6 +11129,46 @@ "official": true, "accessedAt": "2026-07-30" }, + { + "id": "src-gap-program-sparse-depth-0808-kust-mechanical-engineering-bachelor", + "url": "https://gjxy.kust.edu.cn/info/1336/1351.htm", + "title": "KUST English-Taught Programs", + "publisher": "kunming-university-of-science-and-technology", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-kust-mechanical-engineering-bachelor-support-1", + "url": "https://gjxy.kust.edu.cn/info/1337/1722.htm", + "title": "2026 KUST Undergraduate and Post-graduate Program List", + "publisher": "kunming-university-of-science-and-technology", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-kust-metallurgical-engineering-bachelor", + "url": "https://gjxy.kust.edu.cn/info/1336/1351.htm", + "title": "KUST English-Taught Programs", + "publisher": "kunming-university-of-science-and-technology", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-kust-metallurgical-engineering-bachelor-support-1", + "url": "https://gjxy.kust.edu.cn/info/1337/1722.htm", + "title": "2026 KUST Undergraduate and Post-graduate Program List", + "publisher": "kunming-university-of-science-and-technology", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, { "id": "src-gap-program-clw-sw-lzu-chinese-language-bachelor", "url": "https://jwc.lzu.edu.cn/jwc/upload/files/20250520/a1df493d85cf4a5da6a9ef1c9511d157.pdf", @@ -12339,6 +12479,66 @@ "official": true, "accessedAt": "2026-08-02" }, + { + "id": "src-gap-program-sparse-depth-0808-ouc-business-administration-bachelor", + "url": "https://eweb.ouc.edu.cn/4200/list.htm", + "title": "Ocean University of China — Why OUC", + "publisher": "ocean-university-of-china", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-ouc-business-administration-bachelor-support-1", + "url": "https://sie.ouc.edu.cn/english/AdmissionBrochures/list.htm", + "title": "OUC 2026 International Admission Brochures", + "publisher": "ocean-university-of-china", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-ouc-computer-science-and-technology-bachelor", + "url": "https://eweb.ouc.edu.cn/4200/list.htm", + "title": "Ocean University of China — Why OUC", + "publisher": "ocean-university-of-china", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-ouc-computer-science-and-technology-bachelor-support-1", + "url": "https://sie.ouc.edu.cn/english/AdmissionBrochures/list.htm", + "title": "OUC 2026 International Admission Brochures", + "publisher": "ocean-university-of-china", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-ouc-international-economics-and-trade-bachelor", + "url": "https://eweb.ouc.edu.cn/4200/list.htm", + "title": "Ocean University of China — Why OUC", + "publisher": "ocean-university-of-china", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-ouc-international-economics-and-trade-bachelor-support-1", + "url": "https://sie.ouc.edu.cn/english/AdmissionBrochures/list.htm", + "title": "OUC 2026 International Admission Brochures", + "publisher": "ocean-university-of-china", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, { "id": "src-gap-program-pku-depth-cs-master-english", "url": "https://www.isd.pku.edu.cn/en/detail.php?id=739", @@ -14489,6 +14689,36 @@ "official": true, "accessedAt": "2026-07-31" }, + { + "id": "src-gap-program-sparse-depth-0808-sustech-bioinformatics-bachelor", + "url": "https://infoadmin.sustech.edu.cn/programs/new", + "title": "SUSTech International Admissions — Undergraduate Programs", + "publisher": "southern-university-of-science-and-technology", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-sustech-chemistry-bachelor", + "url": "https://infoadmin.sustech.edu.cn/programs/new", + "title": "SUSTech International Admissions — Undergraduate Programs", + "publisher": "southern-university-of-science-and-technology", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-sustech-computer-science-and-technology-bachelor", + "url": "https://infoadmin.sustech.edu.cn/programs/new", + "title": "SUSTech International Admissions — Undergraduate Programs", + "publisher": "southern-university-of-science-and-technology", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, { "id": "src-gap-program-mew-csw-swjtu-chinese-language-literature-master", "url": "https://sie.swjtu.edu.cn/fujian1-shuoshishengzhuanyeMasterProgramMajorList.pdf", @@ -15469,6 +15699,16 @@ "official": true, "accessedAt": "2026-08-02" }, + { + "id": "src-gap-program-sparse-depth-0808-wust-international-business-administration-bachelor", + "url": "https://en.wust.edu.cn/About1/Overview.htm", + "title": "Wuhan University of Science and Technology Overview", + "publisher": "wuhan-university-of-science-and-technology", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, { "id": "src-gap-program-wave8-whut-business-administration-bachelor", "url": "https://sie.whut.edu.cn/english/ist/unde/202602/t20260227_1385160.shtml", @@ -16779,6 +17019,66 @@ "official": true, "accessedAt": "2026-08-03" }, + { + "id": "src-gap-program-sparse-depth-0808-zzu-architecture-master", + "url": "https://international.zzu.edu.cn/en/article/detail?cid=53&detail=65&pid=53", + "title": "ZZU 2026 Master Programs with Full Scholarship", + "publisher": "zhengzhou-university", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-zzu-medical-foundation", + "url": "https://international.zzu.edu.cn/en/admission/detail?cid=17&detail=612&pid=0&spid=0", + "title": "ZZU International Medical Foundation Program", + "publisher": "zhengzhou-university", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-zzu-medical-foundation-support-1", + "url": "https://international.zzu.edu.cn/en/article/detail?cid=53&detail=64&pid=53", + "title": "ZZU One-year Medical Foundation Program 2026", + "publisher": "zhengzhou-university", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-zuel-chinese-language", + "url": "https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf", + "title": "ZUEL International Admissions Guide", + "publisher": "zhongnan-university-of-economics-and-law", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-zuel-international-law-english-master", + "url": "https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf", + "title": "ZUEL International Admissions Guide", + "publisher": "zhongnan-university-of-economics-and-law", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, + { + "id": "src-gap-program-sparse-depth-0808-zuel-imba-master", + "url": "https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf", + "title": "ZUEL International Admissions Guide", + "publisher": "zhongnan-university-of-economics-and-law", + "kind": "program", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, { "id": "src-gap-scholarship-mve-ecs-ahmu-anhui-government-scholarship", "url": "https://english.ahmu.edu.cn/5316/list.htm", @@ -17029,6 +17329,16 @@ "official": true, "accessedAt": "2026-08-03" }, + { + "id": "src-gap-scholarship-sparse-depth-0808-csu-university-scholarship", + "url": "https://intl.csu.edu.cn/English/Scholarship/University_Scholarship.htm", + "title": "2026 CSU Scholarship for International Students", + "publisher": "central-south-university", + "kind": "scholarship", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, { "id": "src-gap-scholarship-wave3-sch-cust-csc-graduate", "url": "https://sie.cust.edu.cn/scholarship_pages/74616.htm", @@ -17809,6 +18119,16 @@ "official": true, "accessedAt": "2026-08-05" }, + { + "id": "src-gap-scholarship-sparse-depth-0808-gzhmu-guangdong-government-freshmen", + "url": "https://fao.gzhmu.edu.cn/info/1301/9522.htm", + "title": "Guangzhou Medical University 2026 International Master and Doctoral Admission Guide", + "publisher": "guangzhou-medical-university", + "kind": "scholarship", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" + }, { "id": "src-gap-scholarship-clw-sw-gzhu-belt-road-scholarship", "url": "https://www.gzhu.edu.cn/rcpy1.htm", @@ -20368,5 +20688,15 @@ "language": "en", "official": true, "accessedAt": "2026-08-02" + }, + { + "id": "src-gap-scholarship-sparse-depth-0808-zzu-2026-master-full-scholarship", + "url": "https://international.zzu.edu.cn/en/article/detail?cid=53&detail=65&pid=53", + "title": "ZZU 2026 Master Programs with Full Scholarship", + "publisher": "zhengzhou-university", + "kind": "scholarship", + "language": "en", + "official": true, + "accessedAt": "2026-08-08" } ] diff --git a/docs/backup-and-restore.md b/docs/backup-and-restore.md index c01f724..85bf176 100644 --- a/docs/backup-and-restore.md +++ b/docs/backup-and-restore.md @@ -14,6 +14,24 @@ R2 生命周期由 `npm run cloudflare:retention` 配置。备份 Token 应只 Catalog 使用 FTS5;Wrangler 不能把包含虚拟表的 D1 直接导出为完整 SQL。因此仓库中的版本化 migrations 是 Schema 备份,R2 SQL 是排除 FTS 虚拟表、影子表、Cloudflare 内部表和 `d1_migrations` 的普通表数据备份。恢复时先按顺序应用 migrations,再导入数据,最后从 `search_documents` 重建 FTS。新增持久化表时,备份工作流会通过 `pragma_table_list` 自动纳入,无需维护静态表清单。 +## GitHub Actions configuration + +每日备份要求仓库 Actions secrets 中同时存在 `CLOUDFLARE_API_TOKEN` 与 `CLOUDFLARE_ACCOUNT_ID`。只应在 GitHub 的隐藏输入框或 `gh secret set` 的隐藏提示符中输入值;不得把值放入命令参数、工作流输出、Issue 或仓库文件。 + +工作流在安装 npm 依赖和访问 Cloudflare 之前运行无第三方依赖的配置检查。它只报告缺少的 secret 名称,不回显值。配置通过后,还会分别读取两个 D1 的远程元数据,以提前区分“凭据存在但权限、账号或数据库名称错误”与“导出过程失败”。 + +需要的最小外部配置和隐藏输入命令见 [`operations/data-maintenance.md`](./operations/data-maintenance.md#required-github-actions-secrets)。设置后手动重跑一次 `Cloudflare D1 backup`,只有完整导出、校验和六个 R2 对象上传全部成功,才能把该次运行记作新的恢复点。 + +## Failure semantics and triage + +- 红色且失败于配置检查:必要的 repository secret 缺失或账号 ID 格式无效;没有创建备份。 +- 红色且失败于远程 D1 检查:token 无权访问目标账号/数据库、名称错误或 Cloudflare 不可用;没有开始导出。 +- 红色且失败于导出或 artifact 校验:不得使用部分文件,且不会开始 R2 上传。 +- 红色且失败于 R2 上传:即使已经写入部分对象,也不能把该日期视为完整恢复点;应修复后整项重跑。 +- 任务显示 `runner_id=0` 且没有步骤:GitHub-hosted runner 从未分配,属于执行平台取消/排队问题,不是 D1 失败;应直接重跑并继续按 24 小时 RPO 计时。 + +任何失败或取消都不满足 `RPO <= 24 小时`。工作流会在可执行失败时写入 Job Summary,但在 runner 未分配的情况下没有代码能够运行,因此必须依靠 Actions 告警和人工重跑。 + ## 本地隔离恢复演练 下载同一批次的三个文件到一个目录,然后运行: diff --git a/docs/operations/data-maintenance.md b/docs/operations/data-maintenance.md index 1889f11..28f2d6f 100644 --- a/docs/operations/data-maintenance.md +++ b/docs/operations/data-maintenance.md @@ -44,9 +44,22 @@ Enter each value only at the hidden prompt. Never place a token in a command argument, committed file, issue, log or workflow output. `VERCEL_TOKEN` allows the successful main deployment to reassign the stable -`studyinchina.vercel.app` alias and run a public release-API smoke test. Until -it is configured, the Vercel Git integration still builds production, and the -alias workflow emits a visible warning instead of handling a secret implicitly. +`studyinchina.vercel.app` alias. The secret is injected only into the credential +gate and the `vercel alias set` step; checkout, URL validation, smoke tests and +other commands cannot read it. Until it is configured, the Vercel Git integration +can still build a deployment, but the alias workflow fails deliberately: a green +workflow must mean that the immutable deployment and stable alias were both +smoke-tested. A successful deployment and a successful stable-alias promotion +are therefore two separate signals. + +When a successful Production deployment does not match the current `main` SHA, +the alias workflow remains a deliberate no-op and records a notice. When it does +match `main`, the workflow first validates the immutable Vercel deployment URL +and its `/api/v1/releases/current` response. Only a healthy candidate may receive +the stable alias; the same endpoint is checked again through +`studyinchina.vercel.app` after promotion. A missing token, invalid URL, failed +candidate smoke test, failed alias command or failed stable-alias smoke test is a +red workflow and requires operator action. The Cloudflare token should be limited to the StudyInChina account and only the D1/R2/Workers capabilities required by the workflows. `MINIMAX_API_KEY` remains @@ -101,6 +114,10 @@ npm run build - Failed AI extraction never creates a guessed value. - Roll back by reverting the data commit or switching the release pointer to the previous verified release. +- Never infer a backup from a green setup step or a deployment from a Ready + preview URL. A backup exists only after checksum verification and all R2 + uploads succeed; production promotion exists only after the stable-alias + workflow completes both the immutable-deployment and stable-domain smoke tests. Code and schedules can guarantee that failures become visible and that unsafe facts do not publish. External execution still depends on GitHub, Vercel, diff --git a/docs/operations/sparse-depth-expansion-audit-2026-08-08.md b/docs/operations/sparse-depth-expansion-audit-2026-08-08.md new file mode 100644 index 0000000..62d0edd --- /dev/null +++ b/docs/operations/sparse-depth-expansion-audit-2026-08-08.md @@ -0,0 +1,102 @@ +# Sparse-school depth expansion audit — 2026-08-08 + +## Decision + +This wave is approved for release as a conservative identity-and-reference expansion. It publishes 23 program identities and three scholarship identities from official university sources. It does **not** claim that it added an open application window: every new candidate is date-free, and the eleven materialized fee cycles are explicitly marked as reference-only. + +## Why this wave exists + +The public catalogue already covered 266 universities, but 17 had fewer than three published programs. A nationally broad directory is only useful when regional and specialist universities have enough representative options to compare. The wave therefore prioritised depth at existing sparse universities instead of adding more one-record institutions. + +Baseline: + +| Metric | Before | +|---|---:| +| Public universities | 266 | +| Public programs | 1,211 | +| Public scholarships | 355 | +| Universities below three programs | 17 | +| Scholarship-connected universities | 205 | +| Raw universities / programs / scholarships | 272 / 1,232 / 381 | + +## Candidate and evidence audit + +The reviewed package is [`quality/multiversity-expansion-wave-2026-08-08/sparse-depth-and-scholarships.json`](../../quality/multiversity-expansion-wave-2026-08-08/sparse-depth-and-scholarships.json). + +- 23 program candidates and 3 scholarship candidates. +- 10 represented institutions; nine receive program depth and Guangzhou Medical University receives scholarship coverage. +- 33 official evidence URLs and 156 reviewed English, Chinese and Russian text fields. +- Zero non-HTTPS primary evidence URLs, non-allowlisted evidence domains, translation placeholders or generated-evidence template phrases. +- Zero candidate cycles, open-state claims, group-only routes, duplicate groups, quarantined candidates or dropped references. +- Candidate builder, integrator and materializer were replayed; the second pass produced stable hashes and counts. + +Untracked MiniMax harvest packages were audited but were not treated as publication evidence. No record was safe to import directly. Two candidates that superficially passed structural validation contained generated template prose instead of source quotations; the rest failed schema, tuition or evidence requirements. They remain outside the release and were neither deleted nor silently promoted. + +## Application-route correction + +An official program page is not automatically an application route. Five initial values were removed because they pointed only to a faculty homepage, university root or overview: + +- two Guangxi University records; +- two Zhengzhou University records; +- one Wuhan University of Science and Technology record. + +The three Kunming University of Science and Technology records retain its exact official **2026 International Students Admissions** page. The underlying online system is HTTP-only, so the catalogue does not expose that insecure URL. Central South University, Ocean University of China and Southern University of Science and Technology retain their official HTTPS application systems. + +## Published result + +| Metric | After | Change | +|---|---:|---:| +| Public universities | 266 | — | +| Public programs | 1,234 | +23 | +| Public scholarships | 358 | +3 | +| Universities below three programs | 8 | −9 | +| Scholarship-connected universities | 208 | +3 | +| Public admission-cycle records | 356 | +11 reference records | +| Raw programs / scholarships / sources | 1,255 / 384 / 2,070 | +23 / +3 / +33 | + +Target-school public depth is now: + +| University | Published programs | +|---|---:| +| Central South University | 5 | +| China Conservatory of Music | 5 | +| Guangxi University | 4 | +| Kunming University of Science and Technology | 5 | +| Ocean University of China | 5 | +| Southern University of Science and Technology | 5 | +| Wuhan University of Science and Technology | 3 | +| Zhengzhou University | 4 | +| Zhongnan University of Economics and Law | 5 | + +Scholarship coverage was added for Central South University, Guangzhou Medical University and Zhengzhou University. Every new scholarship has a null deadline because no safe current deadline was established. + +## Dynamic-fact safety + +Eleven programs contain an official tuition reference. All eleven records have: + +- `opensOn = null`; +- `closesOn = null`; +- `dateStatus = not-announced`; +- `tuitionStatus = reference`; +- no rolling or open application claim. + +The Zhengzhou University source prints an invalid “June 31” date. The condition is retained only as a non-public candidate risk flag for auditability; the value is absent from candidate cycle fields, formal cycle fields and all public output. + +The platform scorecard currently counts date-free fee-reference cycles in `programsWithCurrentCycle`. As a result, the displayed percentage moves from 27.83% to 28.20%, even though this wave added zero dated or open application windows. That increase is a metric-definition effect and must not be described as improved deadline coverage. + +Coverage after the wave: + +| Field | Programs | Coverage | +|---|---:|---:| +| Duration | 760 | 61.59% | +| Official application route | 628 | 50.89% | +| Known teaching language | 1,050 | 85.09% | +| Requirements evidence | 74 | 6.00% | + +## Remaining work and exclusions + +Eight universities remain below three published programs: Tibet University has one; China University of Geosciences (Wuhan), Guangzhou Medical University, Guizhou Medical University, Hunan University of Technology and Business, Jiangxi Normal University, Wuhan Textile University and Zhejiang University have two each. Limited official catalogues at some institutions must be reconciled rather than filled with domestic-only records. Zhejiang University has draft candidates that still require source-level evidence. + +The next collection queue should continue to exclude domestic catalogues, group-only routes, expired cycles, nationality-restricted opportunities outside their stated scope, invalid dates, HTTP-only application systems and generated evidence prose. Ocean University of China's image-only 2026/27 graduate scholarship notice belongs in OCR quarantine until its text and evidence locator are reproducible. + +Current platform scorecard remains 3/14: 27/62 cities have reviewed coordinates, ten Source Manifests are registered, and no full reconciliation is complete. Publication anomalies remain at zero verified-overdue records and zero published cycles without any date semantics. Existing stale-source and historical-date health debt is not resolved by this wave. diff --git a/docs/plans/2026-08-08-catalog-depth-experience-v3-design.md b/docs/plans/2026-08-08-catalog-depth-experience-v3-design.md new file mode 100644 index 0000000..6ec495a --- /dev/null +++ b/docs/plans/2026-08-08-catalog-depth-experience-v3-design.md @@ -0,0 +1,107 @@ +# Catalog depth and experience v3 + +**Date:** 2026-08-08 +**Status:** implemented release candidate +**Scope:** verified catalogue depth, applicant-facing discovery, city and guide experience, and production-operability gates + +## 1. Product goal and current stage + +Study in China Atlas already has a broad national catalogue and a working evidence-first publication model. The next constraint is no longer raw record count: applicants need to find a useful option quickly, understand whether the facts are current, and leave through a trustworthy official route. At the same time, maintainers need backup and deployment workflows whose green status proves that the operation actually happened. + +This release therefore treats the website and data platform as one system: + +- deepen sparse university coverage with representative, individually applicable international-student programs; +- turn filters and cards into a decision workflow rather than a long static catalogue; +- make cities and guides useful exploration surfaces; +- keep JSON, D1 and the public API behaviorally equivalent; +- fail closed when backup or stable-alias credentials are unavailable. + +## 2. Alternatives considered + +### A. Count-only expansion + +Import every discovered program and optimize for a larger headline number. This is fast, but it recreates thin schools, accepts weak evidence and makes maintenance cost grow faster than applicant value. Rejected. + +### B. Visual-only redesign + +Modernize the landing pages without changing data depth or operational guarantees. This improves first impressions but leaves the central trust and usefulness problems intact. Rejected. + +### C. Balanced evidence-first increment + +Publish a smaller verified data wave, add decision-oriented discovery, and harden the release path in the same change. This creates less headline growth than A, but every layer moves together and remains testable. Selected. + +## 3. Architecture and data flow + +```mermaid +flowchart LR + O["Allowlisted official sources"] --> C["Candidate packages"] + C --> V["Schema, evidence and semantic validation"] + V -->|pass| J["Versioned JSON compatibility data"] + V -->|fail| Q["Private quarantine"] + J --> R["Catalog Repository"] + D["Catalog D1 release"] --> R + R --> P["Programs, scholarships, cities and guides"] + P --> U["URL-addressable applicant decisions"] +``` + +The Repository boundary remains important: pages ask for catalogue capabilities, not a particular storage engine. The same filter is implemented in the JSON repository, compatibility API and D1 SQL API, then locked with cross-backend tests. That prevents a later D1 cutover from silently changing public behavior. + +## 4. Data-depth contract + +The sparse-school wave follows four publication rules: + +1. An official HTTPS university or government page must establish record identity. +2. The program must be represented as available to international students; group-only routes are excluded. +3. Historical fees may be retained only as explicit reference facts. They cannot be presented as a current-cycle amount. +4. A missing opening or deadline remains `not-announced`; no date is inferred from neighboring years. + +The intended unit of progress is a complete representative package, not an isolated row: 3–5 useful programs per university where official evidence permits, plus an application entry point and scholarship check. + +## 5. Applicant experience decisions + +### Navigation + +The primary navigation contains the five discovery surfaces. Saved items are a separate shortlist action because they are a personal workflow, not a catalogue category. This reduces header crowding while keeping saved records one click away. + +### Linked-scholarship filter + +The program catalogue exposes **Linked scholarship**, not **Scholarship available**. A relationship only means an official scholarship record names the program or university; final eligibility can still depend on degree, nationality and cycle. The wording prevents the interface from promising funding it cannot prove. + +### Cities + +The city explorer uses one source of truth for a geographical constellation and an accessible directory view. Search, region filtering and sorting are URL-independent client controls over already-loaded public city summaries. No unapproved map tiles or geographic outline are introduced. + +### Guides + +Flagship guides use stable section anchors, a table of contents, official sources, FAQs and related discovery links. Structured data is generated from the same guide model as visible content so metadata cannot drift from the page. + +## 6. Performance and scalability + +The initial D1 scholarship filter used a correlated JSON scan for every program. Its cost grew approximately with programs multiplied by scholarship scopes. The final query builds two uncorrelated scope sets—program IDs and institution IDs—then performs membership checks. This keeps the expensive JSON expansion independent of the number of candidate program rows. + +Catalogue pages remain server-rendered, use cursor pagination and preserve filters in the URL. No page request downloads the complete catalogue bundle when the D1 backend is active. + +## 7. Reliability and security + +- Backup credential validation runs before dependency installation and reports missing secret **names**, never values. +- Both remote D1 resources must pass read-only preflight before export begins. +- A failed backup writes an explicit RPO failure summary. +- A current-main Vercel deployment cannot report successful stable promotion when `VERCEL_TOKEN` is absent. +- Non-current deployment events remain legitimate no-ops, preventing stale deployments from moving the alias. +- Website content is treated as untrusted input; this release does not broaden crawler network or execution authority. + +## 8. Verification strategy + +The release is accepted only when all relevant layers pass: + +- data schema, source ownership, relationship and duplicate validation; +- JSON, compatibility API and D1 filter contract tests; +- six-locale component and accessibility tests; +- backup and alias fail-closed workflow tests; +- TypeScript, ESLint, production build and Playwright critical paths; +- Worker tests and deployment dry-runs; +- exact-SHA Preview, main CI and production deployment verification. + +## 9. Known limits and next increment + +Linked scholarship does not yet prove applicant-specific eligibility. Full eligibility needs normalized scholarship cycles with degree, nationality, opening and closing scopes. Source Manifests and catalogue reconciliation also remain the main platform bottleneck. The next data increment should prioritize the remaining sparse universities, current admission cycles and scholarship-university gaps before expanding the school count again. diff --git a/quality/multiversity-expansion-wave-2026-08-08/sparse-depth-and-scholarships.json b/quality/multiversity-expansion-wave-2026-08-08/sparse-depth-and-scholarships.json new file mode 100644 index 0000000..fb18a80 --- /dev/null +++ b/quality/multiversity-expansion-wave-2026-08-08/sparse-depth-and-scholarships.json @@ -0,0 +1,1396 @@ +{ + "schemaVersion": "2026-08-08.sparse-depth-and-scholarships.v1", + "generatedAt": "2026-08-08T17:00:00+08:00", + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ], + "cities": [], + "universities": [], + "programCandidates": [ + { + "candidateId": "sparse-depth-0808-csu-computing-science-bachelor", + "candidateIds": [ + "sparse-depth-0808-csu-computing-science-bachelor" + ], + "institutionSlug": "central-south-university", + "name": { + "en": "Computing Science", + "zh": "计算科学", + "ru": "Вычислительная наука" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": "4 years", + "status": "known" + }, + "tuition": { + "amount": 69000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://intl.csu.edu.cn/English/Admission/Undergraduate_Programs/English_taught_Programs.htm", + "sourceTitle": "2026 CSU English-taught Undergraduate Programs", + "checkedAt": "2026-08-08", + "locator": "Sections II and IV: catalogue, duration, tuition and application procedure", + "quote": "CSU offers five English-taught undergraduate programs: Civil Engineering, Mathematics, Computing Science, Mechanical Engineering, and Mechanical Engineering with Transportation.", + "summary": { + "en": "The 2026 official international guide lists Computing Science among CSU's English-taught four-year undergraduate programs and publishes tuition of CNY 69,000 per year. The May 31 application deadline is closed and is not exposed as a current cycle.", + "zh": "2026年官方国际生简章将计算科学列为中南大学四年制英语授课本科项目,学费为每年69000元。5月31日截止期已关闭,不作为当前周期展示。", + "ru": "Официальное руководство 2026 года включает Computing Science в число четырёхлетних англоязычных бакалаврских программ; плата — 69 000 CNY в год. Закрытый срок не публикуется как текущий." + } + }, + "additionalEvidence": [], + "applicationUrl": "https://csu.17gz.org/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "2026_application_deadline_closed_identity_and_fee_reference_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-csu-mechanical-engineering-bachelor", + "candidateIds": [ + "sparse-depth-0808-csu-mechanical-engineering-bachelor" + ], + "institutionSlug": "central-south-university", + "name": { + "en": "Mechanical Engineering", + "zh": "机械工程", + "ru": "Механическая инженерия" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": "4 years", + "status": "known" + }, + "tuition": { + "amount": 69000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://intl.csu.edu.cn/English/Admission/Undergraduate_Programs/English_taught_Programs.htm", + "sourceTitle": "2026 CSU English-taught Undergraduate Programs", + "checkedAt": "2026-08-08", + "locator": "Sections II and IV: catalogue, duration, tuition and application procedure", + "quote": "CSU offers five English-taught undergraduate programs: Civil Engineering, Mathematics, Computing Science, Mechanical Engineering, and Mechanical Engineering with Transportation.", + "summary": { + "en": "The 2026 official international guide lists Mechanical Engineering as a four-year English-taught undergraduate program with reference tuition of CNY 69,000 per year. Its closed 2026 deadline is withheld.", + "zh": "2026年官方国际生简章列出四年制英语授课机械工程本科,参考学费为每年69000元;已关闭的2026年截止期不展示。", + "ru": "Официальное руководство 2026 года указывает четырёхлетний англоязычный бакалавриат по Mechanical Engineering с ориентировочной платой 69 000 CNY в год; закрытый срок 2026 года скрыт." + } + }, + "additionalEvidence": [], + "applicationUrl": "https://csu.17gz.org/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "2026_application_deadline_closed_identity_and_fee_reference_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-csu-chinese-language", + "candidateIds": [ + "sparse-depth-0808-csu-chinese-language" + ], + "institutionSlug": "central-south-university", + "name": { + "en": "Chinese Language Program", + "zh": "汉语进修项目", + "ru": "Программа китайского языка" + }, + "programType": "language", + "level": "language", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": "One semester or one academic year", + "status": "known" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://intl.csu.edu.cn/info/1141/3799.htm", + "sourceTitle": "2026 CSU Chinese Language Program for International Students", + "checkedAt": "2026-08-08", + "locator": "Sections I, II and III: duration, eligibility and funding route", + "quote": "One academic year: September 2026 - July 2027; One semester: September 2026 - January 2027.", + "summary": { + "en": "CSU's official 2026 guide confirms an individually applicable Chinese-language route for non-Chinese citizens in one-semester and one-academic-year formats. The June 10 deadline is closed and omitted.", + "zh": "中南大学2026年官方简章确认面向非中国籍申请者的一学期和一学年汉语进修路线;6月10日截止期已关闭并已隐藏。", + "ru": "Официальное руководство CSU 2026 года подтверждает индивидуальную подачу иностранцев на семестровую или годичную программу; закрытый срок 10 июня скрыт." + } + }, + "additionalEvidence": [], + "applicationUrl": "https://csu.17gz.org/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "2026_application_deadline_closed_identity_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-ccmusic-music-education-vocal-bachelor", + "candidateIds": [ + "sparse-depth-0808-ccmusic-music-education-vocal-bachelor" + ], + "institutionSlug": "china-conservatory-of-music", + "name": { + "en": "Music Education (Vocal Specialty)", + "zh": "音乐教育(声乐特长)", + "ru": "Музыкальное образование (вокальная специализация)" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": "4 years", + "status": "known" + }, + "tuition": { + "amount": 32000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf", + "sourceTitle": "China Conservatory of Music 2026 International Undergraduate Admission Guide", + "checkedAt": "2026-08-08", + "locator": "PDF page 4 program table; pages 5-6 eligibility, application and fees", + "quote": "教育学院:音乐教育(声乐特长),学制四年。", + "summary": { + "en": "The official 2026 international undergraduate guide lists Music Education (Vocal Specialty), a four-year route with tuition of CNY 32,000 per year. Its January application window is closed.", + "zh": "2026年官方留学生本科简章列出音乐教育(声乐特长)四年制项目,学费为每年32000元;1月申请期已关闭。", + "ru": "Официальное руководство 2026 года указывает четырёхлетнюю программу Music Education (Vocal Specialty) с платой 32 000 CNY в год; январский приём закрыт." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "2026_application_deadline_closed_identity_and_fee_reference_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-ccmusic-composition-bachelor", + "candidateIds": [ + "sparse-depth-0808-ccmusic-composition-bachelor" + ], + "institutionSlug": "china-conservatory-of-music", + "name": { + "en": "Composition and Composition Theory", + "zh": "作曲与作曲技术理论", + "ru": "Композиция и теория композиции" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": "5 years", + "status": "known" + }, + "tuition": { + "amount": 32000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf", + "sourceTitle": "China Conservatory of Music 2026 International Undergraduate Admission Guide", + "checkedAt": "2026-08-08", + "locator": "PDF page 4 program table; pages 5-6 eligibility, application and fees", + "quote": "作曲系:作曲与作曲技术理论,学制五年。", + "summary": { + "en": "The 2026 international guide names Composition and Composition Theory as a five-year undergraduate route and publishes annual tuition of CNY 32,000. No expired deadline is materialized.", + "zh": "2026年国际生简章将作曲与作曲技术理论列为五年制本科项目,每年学费32000元;已过期截止日不落库。", + "ru": "Руководство 2026 года подтверждает пятилетний бакалавриат Composition and Composition Theory с платой 32 000 CNY в год; просроченная дата не импортируется." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "2026_application_deadline_closed_identity_and_fee_reference_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-ccmusic-conducting-bachelor", + "candidateIds": [ + "sparse-depth-0808-ccmusic-conducting-bachelor" + ], + "institutionSlug": "china-conservatory-of-music", + "name": { + "en": "Music Performance (Conducting)", + "zh": "音乐表演(指挥)", + "ru": "Музыкальное исполнительство (дирижирование)" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": "5 years", + "status": "known" + }, + "tuition": { + "amount": 32000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf", + "sourceTitle": "China Conservatory of Music 2026 International Undergraduate Admission Guide", + "checkedAt": "2026-08-08", + "locator": "PDF page 4 program table; pages 5-6 eligibility, application and fees", + "quote": "指挥系:音乐表演(指挥),学制五年。", + "summary": { + "en": "The official international guide confirms Music Performance (Conducting) as a five-year undergraduate route with CNY 32,000 annual tuition. The January 2026 application period is not presented as open.", + "zh": "官方国际生简章确认音乐表演(指挥)为五年制本科,每年学费32000元;2026年1月申请期不作为开放周期展示。", + "ru": "Официальный справочник подтверждает пятилетний бакалавриат Music Performance (Conducting) с платой 32 000 CNY в год; январский приём 2026 года не считается открытым." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "2026_application_deadline_closed_identity_and_fee_reference_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-gxu-chinese-language-student", + "candidateIds": [ + "sparse-depth-0808-gxu-chinese-language-student" + ], + "institutionSlug": "guangxi-university", + "name": { + "en": "Chinese Language Program", + "zh": "汉语进修生项目", + "ru": "Программа китайского языка" + }, + "programType": "language", + "level": "language", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": 10500, + "currency": "CNY", + "period": "academic-year", + "status": "known", + "qualifier": "The same official fee page also lists CNY 5,250 per semester." + }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjxy.gxu.edu.cn/LXXD/sfbz.htm", + "sourceTitle": "Guangxi University International Student Fee Standards", + "checkedAt": "2026-08-08", + "locator": "Tuition section (I), Chinese Language Student", + "quote": "汉语进修生 Chinese Language Student: 5250 yuan/semester; 10500 yuan/academic year.", + "summary": { + "en": "The official international-student fee page explicitly identifies the Chinese Language Student category and publishes CNY 5,250 per semester or CNY 10,500 per academic year. The current application deadline is not stated on this page.", + "zh": "官方国际生收费页明确列出汉语进修生类别,学费为每学期5250元或每学年10500元;该页未公布当前申请截止日。", + "ru": "Официальная страница тарифов для иностранцев прямо указывает Chinese Language Student: 5 250 CNY за семестр или 10 500 CNY за учебный год; текущий срок не указан." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_application_cycle_not_published_fee_reference_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-gxu-chinese-language-major-bachelor", + "candidateIds": [ + "sparse-depth-0808-gxu-chinese-language-major-bachelor" + ], + "institutionSlug": "guangxi-university", + "name": { + "en": "Chinese Language Major", + "zh": "汉语言专业", + "ru": "Китайский язык" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": 11000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjxy.gxu.edu.cn/LXXD/sfbz.htm", + "sourceTitle": "Guangxi University International Student Fee Standards", + "checkedAt": "2026-08-08", + "locator": "Tuition section (II), Undergraduate Student, item 1", + "quote": "汉语言专业11000元/年 Chinese Language Major 11000 yuan/year.", + "summary": { + "en": "Guangxi University's official international-student fee standard lists the Chinese Language Major as an undergraduate category at CNY 11,000 per year. Duration, instruction language and the current cycle remain unannounced.", + "zh": "广西大学官方国际生收费标准将汉语言专业列为本科类别,学费为每年11000元;学制、授课语言和当前周期尚未公布。", + "ru": "Официальный тариф для иностранцев относит Chinese Language Major к бакалавриату с платой 11 000 CNY в год; длительность, язык и текущий цикл не объявлены." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_application_cycle_duration_and_language_not_published_fee_reference_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-kust-mechanical-engineering-bachelor", + "candidateIds": [ + "sparse-depth-0808-kust-mechanical-engineering-bachelor" + ], + "institutionSlug": "kunming-university-of-science-and-technology", + "name": { + "en": "Mechanical Engineering", + "zh": "机械工程", + "ru": "Механическая инженерия" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjxy.kust.edu.cn/info/1336/1351.htm", + "sourceTitle": "KUST English-Taught Programs", + "checkedAt": "2026-08-08", + "locator": "English-taught program attachment list: Mechanical Engineering", + "quote": "Mechanical Engineering.pdf", + "summary": { + "en": "KUST's official International College page lists Mechanical Engineering among its English-taught programs. A separate 2026 official page confirms the current international undergraduate and postgraduate catalogue; duration, fee and open cycle are not asserted.", + "zh": "昆明理工大学国际学院官方页将机械工程列入全英文授课专业,另有2026年官方国际生专业目录页作为当期支持;不声称学制、费用或开放周期。", + "ru": "Официальная страница KUST включает Mechanical Engineering в число англоязычных программ, а отдельная страница 2026 года подтверждает текущий международный каталог; срок, цена и открытый цикл не утверждаются." + } + }, + "additionalEvidence": [ + { + "officialUrl": "https://gjxy.kust.edu.cn/info/1337/1722.htm", + "sourceTitle": "2026 KUST Undergraduate and Post-graduate Program List" + } + ], + "applicationUrl": "https://gjxy.kust.edu.cn/info/1337/1718.htm", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_2026_catalog_attachment_requires_item_level_recheck_before_dynamic_facts" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-kust-energy-and-power-engineering-bachelor", + "candidateIds": [ + "sparse-depth-0808-kust-energy-and-power-engineering-bachelor" + ], + "institutionSlug": "kunming-university-of-science-and-technology", + "name": { + "en": "Energy and Power Engineering", + "zh": "能源与动力工程", + "ru": "Энергетика и теплоэнергетика" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjxy.kust.edu.cn/info/1336/1351.htm", + "sourceTitle": "KUST English-Taught Programs", + "checkedAt": "2026-08-08", + "locator": "English-taught program attachment list: Energy and Power Engineering", + "quote": "Energy and Power.pdf", + "summary": { + "en": "KUST's official International College page lists Energy and Power Engineering among its English-taught programs. A separate 2026 official page confirms the current international undergraduate and postgraduate catalogue; duration, fee and open cycle are not asserted.", + "zh": "昆明理工大学国际学院官方页将能源与动力工程列入全英文授课专业,另有2026年官方国际生专业目录页作为当期支持;不声称学制、费用或开放周期。", + "ru": "Официальная страница KUST включает Energy and Power Engineering в число англоязычных программ, а отдельная страница 2026 года подтверждает текущий международный каталог; срок, цена и открытый цикл не утверждаются." + } + }, + "additionalEvidence": [ + { + "officialUrl": "https://gjxy.kust.edu.cn/info/1337/1722.htm", + "sourceTitle": "2026 KUST Undergraduate and Post-graduate Program List" + } + ], + "applicationUrl": "https://gjxy.kust.edu.cn/info/1337/1718.htm", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_2026_catalog_attachment_requires_item_level_recheck_before_dynamic_facts" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-kust-metallurgical-engineering-bachelor", + "candidateIds": [ + "sparse-depth-0808-kust-metallurgical-engineering-bachelor" + ], + "institutionSlug": "kunming-university-of-science-and-technology", + "name": { + "en": "Metallurgical Engineering", + "zh": "冶金工程", + "ru": "Металлургическая инженерия" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjxy.kust.edu.cn/info/1336/1351.htm", + "sourceTitle": "KUST English-Taught Programs", + "checkedAt": "2026-08-08", + "locator": "English-taught program attachment list: Metallurgical Engineering", + "quote": "Metallurgical Engineering.pdf", + "summary": { + "en": "KUST's official International College page lists Metallurgical Engineering among its English-taught programs. A separate 2026 official page confirms the current international undergraduate and postgraduate catalogue; duration, fee and open cycle are not asserted.", + "zh": "昆明理工大学国际学院官方页将冶金工程列入全英文授课专业,另有2026年官方国际生专业目录页作为当期支持;不声称学制、费用或开放周期。", + "ru": "Официальная страница KUST включает Metallurgical Engineering в число англоязычных программ, а отдельная страница 2026 года подтверждает текущий международный каталог; срок, цена и открытый цикл не утверждаются." + } + }, + "additionalEvidence": [ + { + "officialUrl": "https://gjxy.kust.edu.cn/info/1337/1722.htm", + "sourceTitle": "2026 KUST Undergraduate and Post-graduate Program List" + } + ], + "applicationUrl": "https://gjxy.kust.edu.cn/info/1337/1718.htm", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_2026_catalog_attachment_requires_item_level_recheck_before_dynamic_facts" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-ouc-international-economics-and-trade-bachelor", + "candidateIds": [ + "sparse-depth-0808-ouc-international-economics-and-trade-bachelor" + ], + "institutionSlug": "ocean-university-of-china", + "name": { + "en": "International Economics and Trade", + "zh": "国际经济与贸易", + "ru": "Международная экономика и торговля" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://eweb.ouc.edu.cn/4200/list.htm", + "sourceTitle": "Ocean University of China — Why OUC", + "checkedAt": "2026-08-08", + "locator": "Paragraph beginning “OUC is now offering various programs to international students”", + "quote": "The Undergraduate Program of International Economics and Trade", + "summary": { + "en": "OUC's official English site explicitly lists the undergraduate International Economics and Trade program among programs offered to international students. Current duration, tuition, instruction language and deadline are not asserted.", + "zh": "中国海洋大学官方英文站明确将国际经济与贸易本科列为面向国际学生的项目;不声称当前学制、学费、授课语言或截止日。", + "ru": "Официальный англоязычный сайт OUC прямо включает бакалаврскую программу International Economics and Trade в перечень для иностранцев; текущие сроки, цена, язык и дедлайн не утверждаются." + } + }, + "additionalEvidence": [ + { + "officialUrl": "https://sie.ouc.edu.cn/english/AdmissionBrochures/list.htm", + "sourceTitle": "OUC 2026 International Admission Brochures" + } + ], + "applicationUrl": "https://ouc.at0086.cn/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_program_identity_confirmed_dynamic_facts_not_announced" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-ouc-business-administration-bachelor", + "candidateIds": [ + "sparse-depth-0808-ouc-business-administration-bachelor" + ], + "institutionSlug": "ocean-university-of-china", + "name": { + "en": "Business Administration", + "zh": "工商管理", + "ru": "Деловое администрирование" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://eweb.ouc.edu.cn/4200/list.htm", + "sourceTitle": "Ocean University of China — Why OUC", + "checkedAt": "2026-08-08", + "locator": "Paragraph beginning “OUC is now offering various programs to international students”", + "quote": "The Undergraduate Program of Business Administration", + "summary": { + "en": "OUC's official English site explicitly lists the undergraduate Business Administration program among programs offered to international students. Current duration, tuition, instruction language and deadline are not asserted.", + "zh": "中国海洋大学官方英文站明确将工商管理本科列为面向国际学生的项目;不声称当前学制、学费、授课语言或截止日。", + "ru": "Официальный англоязычный сайт OUC прямо включает бакалаврскую программу Business Administration в перечень для иностранцев; текущие сроки, цена, язык и дедлайн не утверждаются." + } + }, + "additionalEvidence": [ + { + "officialUrl": "https://sie.ouc.edu.cn/english/AdmissionBrochures/list.htm", + "sourceTitle": "OUC 2026 International Admission Brochures" + } + ], + "applicationUrl": "https://ouc.at0086.cn/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_program_identity_confirmed_dynamic_facts_not_announced" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-ouc-computer-science-and-technology-bachelor", + "candidateIds": [ + "sparse-depth-0808-ouc-computer-science-and-technology-bachelor" + ], + "institutionSlug": "ocean-university-of-china", + "name": { + "en": "Computer Science and Technology", + "zh": "计算机科学与技术", + "ru": "Информатика и технологии" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://eweb.ouc.edu.cn/4200/list.htm", + "sourceTitle": "Ocean University of China — Why OUC", + "checkedAt": "2026-08-08", + "locator": "Paragraph beginning “OUC is now offering various programs to international students”", + "quote": "The Undergraduate Program of Computer Science and Technology", + "summary": { + "en": "OUC's official English site explicitly lists the undergraduate Computer Science and Technology program among programs offered to international students. Current duration, tuition, instruction language and deadline are not asserted.", + "zh": "中国海洋大学官方英文站明确将计算机科学与技术本科列为面向国际学生的项目;不声称当前学制、学费、授课语言或截止日。", + "ru": "Официальный англоязычный сайт OUC прямо включает бакалаврскую программу Computer Science and Technology в перечень для иностранцев; текущие сроки, цена, язык и дедлайн не утверждаются." + } + }, + "additionalEvidence": [ + { + "officialUrl": "https://sie.ouc.edu.cn/english/AdmissionBrochures/list.htm", + "sourceTitle": "OUC 2026 International Admission Brochures" + } + ], + "applicationUrl": "https://ouc.at0086.cn/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_program_identity_confirmed_dynamic_facts_not_announced" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-sustech-chemistry-bachelor", + "candidateIds": [ + "sparse-depth-0808-sustech-chemistry-bachelor" + ], + "institutionSlug": "southern-university-of-science-and-technology", + "name": { + "en": "Chemistry", + "zh": "化学", + "ru": "Химия" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://infoadmin.sustech.edu.cn/programs/new", + "sourceTitle": "SUSTech International Admissions — Undergraduate Programs", + "checkedAt": "2026-08-08", + "locator": "Department and Major Introduction: Chemistry", + "quote": "Chemistry", + "summary": { + "en": "SUSTech's official international-admissions catalogue lists Chemistry among the majors international undergraduates may choose. Current program-specific duration, tuition, teaching language and deadline remain unannounced.", + "zh": "南方科技大学官方国际招生目录将化学列为国际本科生可选专业;当前专业学制、学费、授课语言和截止日尚未公布。", + "ru": "Официальный международный каталог SUSTech включает Chemistry в список направлений, доступных иностранным бакалаврам; срок, цена, язык и дедлайн не объявлены." + } + }, + "additionalEvidence": [], + "applicationUrl": "https://sustech.at0086.cn/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_major_identity_confirmed_program_specific_dynamic_facts_not_announced" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-sustech-computer-science-and-technology-bachelor", + "candidateIds": [ + "sparse-depth-0808-sustech-computer-science-and-technology-bachelor" + ], + "institutionSlug": "southern-university-of-science-and-technology", + "name": { + "en": "Computer Science and Technology", + "zh": "计算机科学与技术", + "ru": "Информатика и технологии" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://infoadmin.sustech.edu.cn/programs/new", + "sourceTitle": "SUSTech International Admissions — Undergraduate Programs", + "checkedAt": "2026-08-08", + "locator": "Department and Major Introduction: Computer Science and Technology", + "quote": "Computer Science and Technology", + "summary": { + "en": "SUSTech's official international-admissions catalogue lists Computer Science and Technology among the majors international undergraduates may choose. Current program-specific duration, tuition, teaching language and deadline remain unannounced.", + "zh": "南方科技大学官方国际招生目录将计算机科学与技术列为国际本科生可选专业;当前专业学制、学费、授课语言和截止日尚未公布。", + "ru": "Официальный международный каталог SUSTech включает Computer Science and Technology в список направлений, доступных иностранным бакалаврам; срок, цена, язык и дедлайн не объявлены." + } + }, + "additionalEvidence": [], + "applicationUrl": "https://sustech.at0086.cn/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_major_identity_confirmed_program_specific_dynamic_facts_not_announced" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-sustech-bioinformatics-bachelor", + "candidateIds": [ + "sparse-depth-0808-sustech-bioinformatics-bachelor" + ], + "institutionSlug": "southern-university-of-science-and-technology", + "name": { + "en": "Bioinformatics", + "zh": "生物信息学", + "ru": "Биоинформатика" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://infoadmin.sustech.edu.cn/programs/new", + "sourceTitle": "SUSTech International Admissions — Undergraduate Programs", + "checkedAt": "2026-08-08", + "locator": "Department and Major Introduction: Bioinformatics", + "quote": "Bioinformatics", + "summary": { + "en": "SUSTech's official international-admissions catalogue lists Bioinformatics among the majors international undergraduates may choose. Current program-specific duration, tuition, teaching language and deadline remain unannounced.", + "zh": "南方科技大学官方国际招生目录将生物信息学列为国际本科生可选专业;当前专业学制、学费、授课语言和截止日尚未公布。", + "ru": "Официальный международный каталог SUSTech включает Bioinformatics в список направлений, доступных иностранным бакалаврам; срок, цена, язык и дедлайн не объявлены." + } + }, + "additionalEvidence": [], + "applicationUrl": "https://sustech.at0086.cn/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_major_identity_confirmed_program_specific_dynamic_facts_not_announced" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-zzu-architecture-master", + "candidateIds": [ + "sparse-depth-0808-zzu-architecture-master" + ], + "institutionSlug": "zhengzhou-university", + "name": { + "en": "Architecture", + "zh": "建筑学", + "ru": "Архитектура" + }, + "programType": "degree", + "level": "master", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://international.zzu.edu.cn/en/article/detail?cid=53&detail=65&pid=53", + "sourceTitle": "ZZU 2026 Master Programs with Full Scholarship", + "checkedAt": "2026-08-08", + "locator": "Master of Architecture section and introductory English-program statement", + "quote": "Besides all programs in Chinese, the following programs in English are also promoted by the University with full scholarship. Master of Architecture.", + "summary": { + "en": "ZZU's official 2026 international master page identifies Architecture as an English-taught master program promoted with full scholarship. A current open deadline is not stated in the accessible text.", + "zh": "郑州大学2026年官方国际硕士页将建筑学列为英语授课且配套全额奖学金的硕士项目;可读文本未给出当前开放截止日。", + "ru": "Официальная страница ZZU 2026 года указывает Architecture как англоязычную магистратуру с полной стипендией; текущий открытый срок в доступном тексте не указан." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_deadline_not_present_in_accessible_official_text" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-zzu-medical-foundation", + "candidateIds": [ + "sparse-depth-0808-zzu-medical-foundation" + ], + "institutionSlug": "zhengzhou-university", + "name": { + "en": "International Medical Foundation Program", + "zh": "国际医学预科项目", + "ru": "Международная подготовительная медицинская программа" + }, + "programType": "foundation", + "level": "foundation", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": "1 year", + "status": "known" + }, + "tuition": { + "amount": 15000, + "currency": "CNY", + "period": "program", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://international.zzu.edu.cn/en/admission/detail?cid=17&detail=612&pid=0&spid=0", + "sourceTitle": "ZZU International Medical Foundation Program", + "checkedAt": "2026-08-08", + "locator": "Key information block: degree, duration, school, tuition and target students", + "quote": "Degree: Foundation | Duration: 1 Years | School: International Education | Tuition: 15,000.", + "summary": { + "en": "The official program page confirms a one-year English medical foundation route for international students at CNY 15,000. The related 2026 article prints an impossible calendar date, so no deadline is materialized.", + "zh": "官方项目页确认面向国际学生的一年制英语医学预科,费用为15000元。关联2026年文章印有不存在的日历日期,因此不落库任何截止日。", + "ru": "Официальная страница подтверждает годичную англоязычную медицинскую подготовительную программу за 15 000 CNY. В статье 2026 года указана несуществующая календарная дата, поэтому дедлайн не импортируется." + } + }, + "additionalEvidence": [ + { + "officialUrl": "https://international.zzu.edu.cn/en/article/detail?cid=53&detail=64&pid=53", + "sourceTitle": "ZZU One-year Medical Foundation Program 2026" + } + ], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "official_source_contains_invalid_june_31_deadline_not_materialized" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-zuel-international-law-english-master", + "candidateIds": [ + "sparse-depth-0808-zuel-international-law-english-master" + ], + "institutionSlug": "zhongnan-university-of-economics-and-law", + "name": { + "en": "International Law (English-taught)", + "zh": "国际法(英文授课)", + "ru": "Международное право (на английском языке)" + }, + "programType": "degree", + "level": "master", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": "2 years", + "status": "known" + }, + "tuition": { + "amount": 30000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf", + "sourceTitle": "ZUEL International Admissions Guide", + "checkedAt": "2026-08-08", + "locator": "PDF page 2, Master's majors and tuition table", + "quote": "Master's Degree Program (taught in English, 2 Years): Accounting, Finance, International Law, IMBA, International business.", + "summary": { + "en": "ZUEL's official international guide lists International Law among two-year English-taught master programs and gives CNY 30,000 annual tuition for English-taught master study. The guide provides seasonal reference windows rather than a current exact deadline.", + "zh": "中南财经政法大学官方国际招生简章将国际法列为两年制英文授课硕士,英文硕士年学费为30000元;简章仅提供季节性参考申请期,没有当前精确截止日。", + "ru": "Официальное руководство ZUEL включает International Law в двухлетние англоязычные магистерские программы с платой 30 000 CNY в год; точная текущая дата не дана." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "guide_only_provides_reference_season_no_exact_current_deadline" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-zuel-imba-master", + "candidateIds": [ + "sparse-depth-0808-zuel-imba-master" + ], + "institutionSlug": "zhongnan-university-of-economics-and-law", + "name": { + "en": "International MBA (English-taught)", + "zh": "国际工商管理硕士(英文授课)", + "ru": "Международная MBA (на английском языке)" + }, + "programType": "degree", + "level": "master", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": "2 years", + "status": "known" + }, + "tuition": { + "amount": 30000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf", + "sourceTitle": "ZUEL International Admissions Guide", + "checkedAt": "2026-08-08", + "locator": "PDF page 2, English-taught master program list and tuition table", + "quote": "Master's Degree Program (taught in English, 2 Years): Accounting, Finance, International Law, IMBA, International business.", + "summary": { + "en": "The official guide names IMBA as a two-year English-taught master program and publishes the CNY 30,000-per-year English-master tuition category. Only reference application seasons are given.", + "zh": "官方简章将IMBA列为两年制英文授课硕士,并公布英文硕士每年30000元学费类别;仅给出参考申请季节。", + "ru": "Официальный справочник называет IMBA двухлетней англоязычной магистратурой и указывает 30 000 CNY в год; даны только ориентировочные сезоны подачи." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "guide_only_provides_reference_season_no_exact_current_deadline" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-zuel-chinese-language", + "candidateIds": [ + "sparse-depth-0808-zuel-chinese-language" + ], + "institutionSlug": "zhongnan-university-of-economics-and-law", + "name": { + "en": "Chinese Language Program", + "zh": "汉语进修项目", + "ru": "Программа китайского языка" + }, + "programType": "language", + "level": "language", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": "1 academic year", + "status": "known" + }, + "tuition": { + "amount": 16000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf", + "sourceTitle": "ZUEL International Admissions Guide", + "checkedAt": "2026-08-08", + "locator": "PDF page 2, Chinese Language Students and tuition table", + "quote": "Chinese Language: 1 year, CNY 16,000 per person per year.", + "summary": { + "en": "ZUEL's official guide describes one-year Chinese-language study, including elementary through advanced placement, at CNY 16,000 per year. The guide does not publish a current exact deadline.", + "zh": "中南财经政法大学官方简章介绍一年制汉语进修,包含初级到高级分班,年学费为16000元;未公布当前精确截止日。", + "ru": "Официальное руководство ZUEL описывает годичную программу китайского языка с уровнями от начального до продвинутого за 16 000 CNY в год; точный текущий срок не дан." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "guide_only_provides_reference_season_no_exact_current_deadline" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-wust-international-business-administration-bachelor", + "candidateIds": [ + "sparse-depth-0808-wust-international-business-administration-bachelor" + ], + "institutionSlug": "wuhan-university-of-science-and-technology", + "name": { + "en": "International Business Administration", + "zh": "国际工商管理", + "ru": "Международное деловое администрирование" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://en.wust.edu.cn/About1/Overview.htm", + "sourceTitle": "Wuhan University of Science and Technology Overview", + "checkedAt": "2026-08-08", + "locator": "International education paragraph describing international degree studies", + "quote": "International students from various countries pursue undergraduate programs in fields such as clinical medicine, civil engineering, and international business administration.", + "summary": { + "en": "WUST's official English overview explicitly identifies International Business Administration among undergraduate fields pursued by international students. No current program-specific duration, tuition, language or deadline is claimed.", + "zh": "武汉科技大学官方英文概况明确将国际工商管理列为国际学生就读的本科领域;不声称当前专业学制、学费、语言或截止日。", + "ru": "Официальный англоязычный обзор WUST прямо называет International Business Administration среди бакалаврских направлений для иностранцев; текущие срок, цена, язык и дедлайн не утверждаются." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "official_overview_confirms_identity_dynamic_facts_require_admission_guide" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + } + ], + "scholarshipCandidates": [ + { + "candidateId": "sparse-depth-0808-csu-university-scholarship", + "candidateIds": [ + "sparse-depth-0808-csu-university-scholarship" + ], + "institutionSlug": "central-south-university", + "name": { + "en": "Central South University Scholarship for International Students", + "zh": "中南大学国际学生奖学金", + "ru": "Стипендия Центрально-Южного университета для иностранных студентов" + }, + "scholarshipType": "university", + "scope": "International master and doctoral applicants who meet the official academic, age and language requirements.", + "applicableLevels": [ + "master", + "doctorate" + ], + "programCandidateIds": [], + "funding": { + "status": "known", + "tiers": [ + "Full scholarship: tuition, on-campus accommodation, and monthly stipend", + "Partial scholarship: tuition" + ] + }, + "cycles": [], + "evidence": { + "officialUrl": "https://intl.csu.edu.cn/English/Scholarship/University_Scholarship.htm", + "sourceTitle": "2026 CSU Scholarship for International Students", + "checkedAt": "2026-08-08", + "locator": "Sections 1, 2, 4 and 7: coverage, levels, closed deadline and online application", + "quote": "Full scholarship: coverage of tuition, on-campus accommodation, and a monthly stipend. Partial scholarship: coverage of tuition.", + "summary": { + "en": "The official 2026 guide defines full and partial CSU scholarship tiers for international master and doctoral applicants and a direct CSU online application route. The May 31 deadline is closed and is not published as current.", + "zh": "2026年官方简章定义了面向国际硕士和博士申请者的中南大学全额与部分奖学金及校方在线申请路线;5月31日截止期已关闭,不展示为当前。", + "ru": "Официальное руководство 2026 года определяет полную и частичную стипендии CSU для иностранных магистров и докторантов; дедлайн 31 мая закрыт и не показывается как текущий." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "applicationRouteStatus": "not_confirmed", + "recommendedAction": "publish_scholarship_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "closed_or_unannounced_application_cycle_not_materialized" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-gzhmu-guangdong-government-freshmen", + "candidateIds": [ + "sparse-depth-0808-gzhmu-guangdong-government-freshmen" + ], + "institutionSlug": "guangzhou-medical-university", + "name": { + "en": "Guangdong Government Outstanding International Students Scholarship for Freshmen", + "zh": "广东政府来粤留学生新生奖学金", + "ru": "Стипендия правительства Гуандуна для выдающихся новых иностранных студентов" + }, + "scholarshipType": "province", + "scope": "Self-funded international master and doctoral freshmen at Guangzhou Medical University; award paid after registration, while fees remain payable.", + "applicableLevels": [ + "master", + "doctorate" + ], + "programCandidateIds": [], + "funding": { + "status": "known", + "tiers": [ + "Master: CNY 20,000 one-time award", + "Doctorate: CNY 30,000 one-time award" + ] + }, + "cycles": [], + "evidence": { + "officialUrl": "https://fao.gzhmu.edu.cn/info/1301/9522.htm", + "sourceTitle": "Guangzhou Medical University 2026 International Master and Doctoral Admission Guide", + "checkedAt": "2026-08-08", + "locator": "Section IX Scholarships", + "quote": "Doctoral students: RMB30,000 per person for one-time reward. Master's students: RMB20,000 per person for one-time reward.", + "summary": { + "en": "The 2026 official guide states that self-funded international freshmen may apply after admission: CNY 20,000 for master students and CNY 30,000 for doctoral students, paid once after registration. No independent open deadline is asserted.", + "zh": "2026年官方简章说明自费国际新生可在录取后申请:硕士一次性20000元,博士一次性30000元,注册后发放;不声称独立开放截止日。", + "ru": "В официальном руководстве 2026 года указано, что самофинансируемые новые иностранные студенты могут податься после зачисления: 20 000 CNY магистрам и 30 000 CNY докторантам единовременно после регистрации; отдельный дедлайн не утверждается." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "applicationRouteStatus": "not_confirmed", + "recommendedAction": "publish_scholarship_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "post_admission_freshman_award_no_independent_deadline" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-zzu-2026-master-full-scholarship", + "candidateIds": [ + "sparse-depth-0808-zzu-2026-master-full-scholarship" + ], + "institutionSlug": "zhengzhou-university", + "name": { + "en": "ZZU 2026 Master Programs Full Scholarship", + "zh": "郑州大学2026年硕士项目全额奖学金", + "ru": "Полная стипендия ZZU для магистерских программ 2026 года" + }, + "scholarshipType": "csc", + "scope": "Eligible non-Chinese master applicants meeting the official academic, age and language requirements, including promoted English-taught programs.", + "applicableLevels": [ + "master" + ], + "programCandidateIds": [], + "funding": { + "status": "known", + "tiers": [ + "Full scholarship: tuition, accommodation, living allowance, and medical insurance" + ] + }, + "cycles": [], + "evidence": { + "officialUrl": "https://international.zzu.edu.cn/en/article/detail?cid=53&detail=65&pid=53", + "sourceTitle": "ZZU 2026 Master Programs with Full Scholarship", + "checkedAt": "2026-08-08", + "locator": "Chinese Government Scholarship coverage and eligibility sections", + "quote": "It covers tuition, accommodation, living allowance, and medical insurance.", + "summary": { + "en": "ZZU's official 2026 page describes a full Chinese Government Scholarship for eligible international master applicants, covering tuition, accommodation, living allowance and medical insurance. The accessible text does not provide a reliable current deadline.", + "zh": "郑州大学2026年官方页介绍面向符合条件的国际硕士申请者的中国政府全额奖学金,覆盖学费、住宿、生活补助和医疗保险;可读文本未提供可靠的当前截止日。", + "ru": "Официальная страница ZZU 2026 года описывает полную государственную стипендию для подходящих иностранных магистров, покрывающую обучение, жильё, стипендию на жизнь и страховку; надёжный текущий срок не указан." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "applicationRouteStatus": "not_confirmed", + "recommendedAction": "publish_scholarship_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_deadline_not_present_in_accessible_official_text" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + } + ], + "exclusions": [ + { + "institutionSlug": "tibet-university", + "reason": "Retains its documented limited catalogue: no second individually applicable identity was confirmed from current official sources." + }, + { + "institutionSlug": "hunan-university-of-technology-and-business", + "reason": "The 2026 official guide exposes exactly International Business and Chinese Language, both already public; no placeholder was added." + }, + { + "institutionSlug": "wuhan-textile-university", + "reason": "The 2026 official doctoral guide exposes exactly Textile Science and Engineering and Design, both already public." + }, + { + "institutionSlug": "all-targets", + "reason": "Domestic-student catalogues, group-only routes, expired cycles, invalid dates, search snippets and generated evidence templates were excluded." + } + ], + "coverageSummary": { + "representedInstitutions": 10, + "programCandidates": 23, + "scholarshipCandidates": 3, + "openProgramCycles": 0, + "openScholarshipCycles": 0, + "officialHttpsPrimaryEvidence": 26 + } +} diff --git a/quality/official-gap-wave-2026-07-30/merged-candidates.json b/quality/official-gap-wave-2026-07-30/merged-candidates.json index 033f618..090103a 100644 --- a/quality/official-gap-wave-2026-07-30/merged-candidates.json +++ b/quality/official-gap-wave-2026-07-30/merged-candidates.json @@ -1,5 +1,5 @@ { - "schemaVersion": "2026-08-05.merged.regional-breadth.v1", + "schemaVersion": "2026-08-08.merged.sparse-depth.v1", "generatedAt": "2026-08-02T00:00:00+08:00", "sourceFiles": [ "local-candidates.json", @@ -43,7 +43,8 @@ "../multiversity-expansion-wave-2026-08-05/root-specialty-arts.json", "../multiversity-expansion-wave-2026-08-05/east-coast-medical-art.json", "../multiversity-expansion-wave-2026-08-05/north-northeast-west.json", - "../multiversity-expansion-wave-2026-08-05/south-central-west.json" + "../multiversity-expansion-wave-2026-08-05/south-central-west.json", + "../multiversity-expansion-wave-2026-08-08/sparse-depth-and-scholarships.json" ], "cities": [ { @@ -6236,6 +6237,159 @@ "north-specialty-sparse.json" ] }, + { + "candidateId": "sparse-depth-0808-csu-chinese-language", + "candidateIds": [ + "sparse-depth-0808-csu-chinese-language" + ], + "institutionSlug": "central-south-university", + "name": { + "en": "Chinese Language Program", + "zh": "汉语进修项目", + "ru": "Программа китайского языка" + }, + "programType": "language", + "level": "language", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": "One semester or one academic year", + "status": "known" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://intl.csu.edu.cn/info/1141/3799.htm", + "sourceTitle": "2026 CSU Chinese Language Program for International Students", + "checkedAt": "2026-08-08", + "locator": "Sections I, II and III: duration, eligibility and funding route", + "quote": "One academic year: September 2026 - July 2027; One semester: September 2026 - January 2027.", + "summary": { + "en": "CSU's official 2026 guide confirms an individually applicable Chinese-language route for non-Chinese citizens in one-semester and one-academic-year formats. The June 10 deadline is closed and omitted.", + "zh": "中南大学2026年官方简章确认面向非中国籍申请者的一学期和一学年汉语进修路线;6月10日截止期已关闭并已隐藏。", + "ru": "Официальное руководство CSU 2026 года подтверждает индивидуальную подачу иностранцев на семестровую или годичную программу; закрытый срок 10 июня скрыт." + } + }, + "additionalEvidence": [], + "applicationUrl": "https://csu.17gz.org/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "2026_application_deadline_closed_identity_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-csu-computing-science-bachelor", + "candidateIds": [ + "sparse-depth-0808-csu-computing-science-bachelor" + ], + "institutionSlug": "central-south-university", + "name": { + "en": "Computing Science", + "zh": "计算科学", + "ru": "Вычислительная наука" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": "4 years", + "status": "known" + }, + "tuition": { + "amount": 69000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://intl.csu.edu.cn/English/Admission/Undergraduate_Programs/English_taught_Programs.htm", + "sourceTitle": "2026 CSU English-taught Undergraduate Programs", + "checkedAt": "2026-08-08", + "locator": "Sections II and IV: catalogue, duration, tuition and application procedure", + "quote": "CSU offers five English-taught undergraduate programs: Civil Engineering, Mathematics, Computing Science, Mechanical Engineering, and Mechanical Engineering with Transportation.", + "summary": { + "en": "The 2026 official international guide lists Computing Science among CSU's English-taught four-year undergraduate programs and publishes tuition of CNY 69,000 per year. The May 31 application deadline is closed and is not exposed as a current cycle.", + "zh": "2026年官方国际生简章将计算科学列为中南大学四年制英语授课本科项目,学费为每年69000元。5月31日截止期已关闭,不作为当前周期展示。", + "ru": "Официальное руководство 2026 года включает Computing Science в число четырёхлетних англоязычных бакалаврских программ; плата — 69 000 CNY в год. Закрытый срок не публикуется как текущий." + } + }, + "additionalEvidence": [], + "applicationUrl": "https://csu.17gz.org/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "2026_application_deadline_closed_identity_and_fee_reference_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-csu-mechanical-engineering-bachelor", + "candidateIds": [ + "sparse-depth-0808-csu-mechanical-engineering-bachelor" + ], + "institutionSlug": "central-south-university", + "name": { + "en": "Mechanical Engineering", + "zh": "机械工程", + "ru": "Механическая инженерия" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": "4 years", + "status": "known" + }, + "tuition": { + "amount": 69000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://intl.csu.edu.cn/English/Admission/Undergraduate_Programs/English_taught_Programs.htm", + "sourceTitle": "2026 CSU English-taught Undergraduate Programs", + "checkedAt": "2026-08-08", + "locator": "Sections II and IV: catalogue, duration, tuition and application procedure", + "quote": "CSU offers five English-taught undergraduate programs: Civil Engineering, Mathematics, Computing Science, Mechanical Engineering, and Mechanical Engineering with Transportation.", + "summary": { + "en": "The 2026 official international guide lists Mechanical Engineering as a four-year English-taught undergraduate program with reference tuition of CNY 69,000 per year. Its closed 2026 deadline is withheld.", + "zh": "2026年官方国际生简章列出四年制英语授课机械工程本科,参考学费为每年69000元;已关闭的2026年截止期不展示。", + "ru": "Официальное руководство 2026 года указывает четырёхлетний англоязычный бакалавриат по Mechanical Engineering с ориентировочной платой 69 000 CNY в год; закрытый срок 2026 года скрыт." + } + }, + "additionalEvidence": [], + "applicationUrl": "https://csu.17gz.org/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "2026_application_deadline_closed_identity_and_fee_reference_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, { "candidateId": "wave3-cust-m-computer-applied-technology-en", "candidateIds": [ @@ -7533,75 +7687,177 @@ ] }, { - "candidateId": "prog-mew-nss-cfau-chinese-language", + "candidateId": "sparse-depth-0808-ccmusic-composition-bachelor", "candidateIds": [ - "prog-mew-nss-cfau-chinese-language" + "sparse-depth-0808-ccmusic-composition-bachelor" ], - "institutionSlug": "china-foreign-affairs-university", + "institutionSlug": "china-conservatory-of-music", "name": { - "en": "Chinese Language Program", - "zh": "汉语进修项目", - "ru": "Программа китайского языка" + "en": "Composition and Composition Theory", + "zh": "作曲与作曲技术理论", + "ru": "Композиция и теория композиции" }, - "programType": "language", - "level": "language", + "programType": "degree", + "level": "bachelor", "teachingLanguage": { - "value": "Chinese", + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": "5 years", + "status": "known" + }, + "tuition": { + "amount": 32000, + "currency": "CNY", + "period": "academic-year", "status": "known" }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf", + "sourceTitle": "China Conservatory of Music 2026 International Undergraduate Admission Guide", + "checkedAt": "2026-08-08", + "locator": "PDF page 4 program table; pages 5-6 eligibility, application and fees", + "quote": "作曲系:作曲与作曲技术理论,学制五年。", + "summary": { + "en": "The 2026 international guide names Composition and Composition Theory as a five-year undergraduate route and publishes annual tuition of CNY 32,000. No expired deadline is materialized.", + "zh": "2026年国际生简章将作曲与作曲技术理论列为五年制本科项目,每年学费32000元;已过期截止日不落库。", + "ru": "Руководство 2026 года подтверждает пятилетний бакалавриат Composition and Composition Theory с платой 32 000 CNY в год; просроченная дата не импортируется." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "2026_application_deadline_closed_identity_and_fee_reference_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-ccmusic-music-education-vocal-bachelor", + "candidateIds": [ + "sparse-depth-0808-ccmusic-music-education-vocal-bachelor" + ], + "institutionSlug": "china-conservatory-of-music", + "name": { + "en": "Music Education (Vocal Specialty)", + "zh": "音乐教育(声乐特长)", + "ru": "Музыкальное образование (вокальная специализация)" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, "duration": { - "value": "1 semester to 2 academic years", + "value": "4 years", "status": "known" }, "tuition": { - "amount": null, + "amount": 32000, "currency": "CNY", - "period": null, - "status": "source_unavailable" + "period": "academic-year", + "status": "known" }, "cycles": [], "evidence": { - "officialUrl": "https://en.cfau.edu.cn/col2484/col2911/66704.htm", - "sourceTitle": "CFAU Chinese Language Program for International Students", - "checkedAt": "2026-08-04", + "officialUrl": "https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf", + "sourceTitle": "China Conservatory of Music 2026 International Undergraduate Admission Guide", + "checkedAt": "2026-08-08", + "locator": "PDF page 4 program table; pages 5-6 eligibility, application and fees", + "quote": "教育学院:音乐教育(声乐特长),学制四年。", "summary": { - "en": "The official source explicitly lists Chinese Language Program for international applicants. The same source states teaching language: Chinese; duration: 1 semester to 2 academic years.", - "zh": "官方来源明确列出面向国际申请人的汉语进修项目。同一来源注明授课语言:Chinese;学制:1 semester to 2 academic years。", - "ru": "Официальный источник прямо указывает программу «Программа китайского языка» для иностранных абитуриентов. В том же источнике указано: язык обучения: Chinese; продолжительность: 1 semester to 2 academic years." + "en": "The official 2026 international undergraduate guide lists Music Education (Vocal Specialty), a four-year route with tuition of CNY 32,000 per year. Its January application window is closed.", + "zh": "2026年官方留学生本科简章列出音乐教育(声乐特长)四年制项目,学费为每年32000元;1月申请期已关闭。", + "ru": "Официальное руководство 2026 года указывает четырёхлетнюю программу Music Education (Vocal Specialty) с платой 32 000 CNY в год; январский приём закрыт." } }, "additionalEvidence": [], "applicationUrl": null, - "recommendedAction": "Merge after semantic deduplication; publish stable facts only and keep passed or unannounced cycles closed.", - "qualityTier": "B", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", "riskFlags": [ - "historical_official_program_identity", - "current_cycle_deadline_not_announced", - "partial_fact_coverage" + "2026_application_deadline_closed_identity_and_fee_reference_only" ], "sourceFiles": [ - "north-specialty-sparse.json" + "sparse-depth-and-scholarships.json" ] }, { - "candidateId": "prog-mew-nss-cfau-international-economics-trade-bachelor", + "candidateId": "sparse-depth-0808-ccmusic-conducting-bachelor", "candidateIds": [ - "prog-mew-nss-cfau-international-economics-trade-bachelor" + "sparse-depth-0808-ccmusic-conducting-bachelor" ], - "institutionSlug": "china-foreign-affairs-university", + "institutionSlug": "china-conservatory-of-music", "name": { - "en": "International Economics and Trade", - "zh": "国际经济与贸易", - "ru": "Международная экономика и торговля" + "en": "Music Performance (Conducting)", + "zh": "音乐表演(指挥)", + "ru": "Музыкальное исполнительство (дирижирование)" }, "programType": "degree", "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": "5 years", + "status": "known" + }, + "tuition": { + "amount": 32000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf", + "sourceTitle": "China Conservatory of Music 2026 International Undergraduate Admission Guide", + "checkedAt": "2026-08-08", + "locator": "PDF page 4 program table; pages 5-6 eligibility, application and fees", + "quote": "指挥系:音乐表演(指挥),学制五年。", + "summary": { + "en": "The official international guide confirms Music Performance (Conducting) as a five-year undergraduate route with CNY 32,000 annual tuition. The January 2026 application period is not presented as open.", + "zh": "官方国际生简章确认音乐表演(指挥)为五年制本科,每年学费32000元;2026年1月申请期不作为开放周期展示。", + "ru": "Официальный справочник подтверждает пятилетний бакалавриат Music Performance (Conducting) с платой 32 000 CNY в год; январский приём 2026 года не считается открытым." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "2026_application_deadline_closed_identity_and_fee_reference_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "prog-mew-nss-cfau-chinese-language", + "candidateIds": [ + "prog-mew-nss-cfau-chinese-language" + ], + "institutionSlug": "china-foreign-affairs-university", + "name": { + "en": "Chinese Language Program", + "zh": "汉语进修项目", + "ru": "Программа китайского языка" + }, + "programType": "language", + "level": "language", "teachingLanguage": { "value": "Chinese", "status": "known" }, "duration": { - "value": "4 academic years", + "value": "1 semester to 2 academic years", "status": "known" }, "tuition": { @@ -7610,34 +7866,24 @@ "period": null, "status": "source_unavailable" }, - "cycles": [ - { - "academicYear": "2026-2027", - "intake": "fall", - "intakeLabel": null, - "applicationOpen": null, - "applicationDeadline": "2026-05-01", - "statusAsOfCheckedAt": "closed", - "displayAsOpen": false, - "sourceFormat": "canonical" - } - ], + "cycles": [], "evidence": { - "officialUrl": "https://iss.cfau.edu.cn/col4183/col4187/19ca2dd7fdbb4f38aac785ae04cdf396.htm", - "sourceTitle": "外交学院2026年外国留学生本科生招生简章", + "officialUrl": "https://en.cfau.edu.cn/col2484/col2911/66704.htm", + "sourceTitle": "CFAU Chinese Language Program for International Students", "checkedAt": "2026-08-04", "summary": { - "en": "The official source explicitly lists International Economics and Trade for international applicants. The same source states teaching language: Chinese; duration: 4 academic years; verified deadline: 2026-05-01.", - "zh": "官方来源明确列出面向国际申请人的国际经济与贸易。同一来源注明授课语言:Chinese;学制:4 academic years;已核实截止日期:2026-05-01。", - "ru": "Официальный источник прямо указывает программу «Международная экономика и торговля» для иностранных абитуриентов. В том же источнике указано: язык обучения: Chinese; продолжительность: 4 academic years; подтвержденный срок: 2026-05-01." + "en": "The official source explicitly lists Chinese Language Program for international applicants. The same source states teaching language: Chinese; duration: 1 semester to 2 academic years.", + "zh": "官方来源明确列出面向国际申请人的汉语进修项目。同一来源注明授课语言:Chinese;学制:1 semester to 2 academic years。", + "ru": "Официальный источник прямо указывает программу «Программа китайского языка» для иностранных абитуриентов. В том же источнике указано: язык обучения: Chinese; продолжительность: 1 semester to 2 academic years." } }, "additionalEvidence": [], "applicationUrl": null, "recommendedAction": "Merge after semantic deduplication; publish stable facts only and keep passed or unannounced cycles closed.", - "qualityTier": "A", + "qualityTier": "B", "riskFlags": [ - "verified_cycle_closed", + "historical_official_program_identity", + "current_cycle_deadline_not_announced", "partial_fact_coverage" ], "sourceFiles": [ @@ -7645,15 +7891,76 @@ ] }, { - "candidateId": "prog-mew-nss-cfau-international-law-bachelor", + "candidateId": "prog-mew-nss-cfau-international-economics-trade-bachelor", "candidateIds": [ - "prog-mew-nss-cfau-international-law-bachelor" + "prog-mew-nss-cfau-international-economics-trade-bachelor" ], "institutionSlug": "china-foreign-affairs-university", "name": { - "en": "International Law", - "zh": "国际法", - "ru": "Международное право" + "en": "International Economics and Trade", + "zh": "国际经济与贸易", + "ru": "Международная экономика и торговля" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": "Chinese", + "status": "known" + }, + "duration": { + "value": "4 academic years", + "status": "known" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "source_unavailable" + }, + "cycles": [ + { + "academicYear": "2026-2027", + "intake": "fall", + "intakeLabel": null, + "applicationOpen": null, + "applicationDeadline": "2026-05-01", + "statusAsOfCheckedAt": "closed", + "displayAsOpen": false, + "sourceFormat": "canonical" + } + ], + "evidence": { + "officialUrl": "https://iss.cfau.edu.cn/col4183/col4187/19ca2dd7fdbb4f38aac785ae04cdf396.htm", + "sourceTitle": "外交学院2026年外国留学生本科生招生简章", + "checkedAt": "2026-08-04", + "summary": { + "en": "The official source explicitly lists International Economics and Trade for international applicants. The same source states teaching language: Chinese; duration: 4 academic years; verified deadline: 2026-05-01.", + "zh": "官方来源明确列出面向国际申请人的国际经济与贸易。同一来源注明授课语言:Chinese;学制:4 academic years;已核实截止日期:2026-05-01。", + "ru": "Официальный источник прямо указывает программу «Международная экономика и торговля» для иностранных абитуриентов. В том же источнике указано: язык обучения: Chinese; продолжительность: 4 academic years; подтвержденный срок: 2026-05-01." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "Merge after semantic deduplication; publish stable facts only and keep passed or unannounced cycles closed.", + "qualityTier": "A", + "riskFlags": [ + "verified_cycle_closed", + "partial_fact_coverage" + ], + "sourceFiles": [ + "north-specialty-sparse.json" + ] + }, + { + "candidateId": "prog-mew-nss-cfau-international-law-bachelor", + "candidateIds": [ + "prog-mew-nss-cfau-international-law-bachelor" + ], + "institutionSlug": "china-foreign-affairs-university", + "name": { + "en": "International Law", + "zh": "国际法", + "ru": "Международное право" }, "programType": "degree", "level": "bachelor", @@ -15641,6 +15948,109 @@ "wave3-east-south.json" ] }, + { + "candidateId": "sparse-depth-0808-gxu-chinese-language-major-bachelor", + "candidateIds": [ + "sparse-depth-0808-gxu-chinese-language-major-bachelor" + ], + "institutionSlug": "guangxi-university", + "name": { + "en": "Chinese Language Major", + "zh": "汉语言专业", + "ru": "Китайский язык" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": 11000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjxy.gxu.edu.cn/LXXD/sfbz.htm", + "sourceTitle": "Guangxi University International Student Fee Standards", + "checkedAt": "2026-08-08", + "locator": "Tuition section (II), Undergraduate Student, item 1", + "quote": "汉语言专业11000元/年 Chinese Language Major 11000 yuan/year.", + "summary": { + "en": "Guangxi University's official international-student fee standard lists the Chinese Language Major as an undergraduate category at CNY 11,000 per year. Duration, instruction language and the current cycle remain unannounced.", + "zh": "广西大学官方国际生收费标准将汉语言专业列为本科类别,学费为每年11000元;学制、授课语言和当前周期尚未公布。", + "ru": "Официальный тариф для иностранцев относит Chinese Language Major к бакалавриату с платой 11 000 CNY в год; длительность, язык и текущий цикл не объявлены." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_application_cycle_duration_and_language_not_published_fee_reference_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-gxu-chinese-language-student", + "candidateIds": [ + "sparse-depth-0808-gxu-chinese-language-student" + ], + "institutionSlug": "guangxi-university", + "name": { + "en": "Chinese Language Program", + "zh": "汉语进修生项目", + "ru": "Программа китайского языка" + }, + "programType": "language", + "level": "language", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": 10500, + "currency": "CNY", + "period": "academic-year", + "status": "known", + "qualifier": "The same official fee page also lists CNY 5,250 per semester." + }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjxy.gxu.edu.cn/LXXD/sfbz.htm", + "sourceTitle": "Guangxi University International Student Fee Standards", + "checkedAt": "2026-08-08", + "locator": "Tuition section (I), Chinese Language Student", + "quote": "汉语进修生 Chinese Language Student: 5250 yuan/semester; 10500 yuan/academic year.", + "summary": { + "en": "The official international-student fee page explicitly identifies the Chinese Language Student category and publishes CNY 5,250 per semester or CNY 10,500 per academic year. The current application deadline is not stated on this page.", + "zh": "官方国际生收费页明确列出汉语进修生类别,学费为每学期5250元或每学年10500元;该页未公布当前申请截止日。", + "ru": "Официальная страница тарифов для иностранцев прямо указывает Chinese Language Student: 5 250 CNY за семестр или 10 500 CNY за учебный год; текущий срок не указан." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_application_cycle_not_published_fee_reference_only" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, { "candidateId": "wave3-gxtcmu-acupuncture-tuina-bachelor", "candidateIds": [ @@ -24456,6 +24866,62 @@ "local-strong-expansion.json" ] }, + { + "candidateId": "sparse-depth-0808-kust-energy-and-power-engineering-bachelor", + "candidateIds": [ + "sparse-depth-0808-kust-energy-and-power-engineering-bachelor" + ], + "institutionSlug": "kunming-university-of-science-and-technology", + "name": { + "en": "Energy and Power Engineering", + "zh": "能源与动力工程", + "ru": "Энергетика и теплоэнергетика" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjxy.kust.edu.cn/info/1336/1351.htm", + "sourceTitle": "KUST English-Taught Programs", + "checkedAt": "2026-08-08", + "locator": "English-taught program attachment list: Energy and Power Engineering", + "quote": "Energy and Power.pdf", + "summary": { + "en": "KUST's official International College page lists Energy and Power Engineering among its English-taught programs. A separate 2026 official page confirms the current international undergraduate and postgraduate catalogue; duration, fee and open cycle are not asserted.", + "zh": "昆明理工大学国际学院官方页将能源与动力工程列入全英文授课专业,另有2026年官方国际生专业目录页作为当期支持;不声称学制、费用或开放周期。", + "ru": "Официальная страница KUST включает Energy and Power Engineering в число англоязычных программ, а отдельная страница 2026 года подтверждает текущий международный каталог; срок, цена и открытый цикл не утверждаются." + } + }, + "additionalEvidence": [ + { + "officialUrl": "https://gjxy.kust.edu.cn/info/1337/1722.htm", + "sourceTitle": "2026 KUST Undergraduate and Post-graduate Program List" + } + ], + "applicationUrl": "https://gjxy.kust.edu.cn/info/1337/1718.htm", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_2026_catalog_attachment_requires_item_level_recheck_before_dynamic_facts" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, { "candidateId": "breadth-kust-b-international-economics-trade-en", "candidateIds": [ @@ -24519,6 +24985,118 @@ "breadth-fastpack.json" ] }, + { + "candidateId": "sparse-depth-0808-kust-mechanical-engineering-bachelor", + "candidateIds": [ + "sparse-depth-0808-kust-mechanical-engineering-bachelor" + ], + "institutionSlug": "kunming-university-of-science-and-technology", + "name": { + "en": "Mechanical Engineering", + "zh": "机械工程", + "ru": "Механическая инженерия" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjxy.kust.edu.cn/info/1336/1351.htm", + "sourceTitle": "KUST English-Taught Programs", + "checkedAt": "2026-08-08", + "locator": "English-taught program attachment list: Mechanical Engineering", + "quote": "Mechanical Engineering.pdf", + "summary": { + "en": "KUST's official International College page lists Mechanical Engineering among its English-taught programs. A separate 2026 official page confirms the current international undergraduate and postgraduate catalogue; duration, fee and open cycle are not asserted.", + "zh": "昆明理工大学国际学院官方页将机械工程列入全英文授课专业,另有2026年官方国际生专业目录页作为当期支持;不声称学制、费用或开放周期。", + "ru": "Официальная страница KUST включает Mechanical Engineering в число англоязычных программ, а отдельная страница 2026 года подтверждает текущий международный каталог; срок, цена и открытый цикл не утверждаются." + } + }, + "additionalEvidence": [ + { + "officialUrl": "https://gjxy.kust.edu.cn/info/1337/1722.htm", + "sourceTitle": "2026 KUST Undergraduate and Post-graduate Program List" + } + ], + "applicationUrl": "https://gjxy.kust.edu.cn/info/1337/1718.htm", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_2026_catalog_attachment_requires_item_level_recheck_before_dynamic_facts" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-kust-metallurgical-engineering-bachelor", + "candidateIds": [ + "sparse-depth-0808-kust-metallurgical-engineering-bachelor" + ], + "institutionSlug": "kunming-university-of-science-and-technology", + "name": { + "en": "Metallurgical Engineering", + "zh": "冶金工程", + "ru": "Металлургическая инженерия" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://gjxy.kust.edu.cn/info/1336/1351.htm", + "sourceTitle": "KUST English-Taught Programs", + "checkedAt": "2026-08-08", + "locator": "English-taught program attachment list: Metallurgical Engineering", + "quote": "Metallurgical Engineering.pdf", + "summary": { + "en": "KUST's official International College page lists Metallurgical Engineering among its English-taught programs. A separate 2026 official page confirms the current international undergraduate and postgraduate catalogue; duration, fee and open cycle are not asserted.", + "zh": "昆明理工大学国际学院官方页将冶金工程列入全英文授课专业,另有2026年官方国际生专业目录页作为当期支持;不声称学制、费用或开放周期。", + "ru": "Официальная страница KUST включает Metallurgical Engineering в число англоязычных программ, а отдельная страница 2026 года подтверждает текущий международный каталог; срок, цена и открытый цикл не утверждаются." + } + }, + "additionalEvidence": [ + { + "officialUrl": "https://gjxy.kust.edu.cn/info/1337/1722.htm", + "sourceTitle": "2026 KUST Undergraduate and Post-graduate Program List" + } + ], + "applicationUrl": "https://gjxy.kust.edu.cn/info/1337/1718.htm", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_2026_catalog_attachment_requires_item_level_recheck_before_dynamic_facts" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, { "candidateId": "clw-sw-lzu-chinese-language-bachelor", "candidateIds": [ @@ -30317,6 +30895,174 @@ "../official-gap-wave-2026-08-02/wave8-new-local-strong-2.json" ] }, + { + "candidateId": "sparse-depth-0808-ouc-business-administration-bachelor", + "candidateIds": [ + "sparse-depth-0808-ouc-business-administration-bachelor" + ], + "institutionSlug": "ocean-university-of-china", + "name": { + "en": "Business Administration", + "zh": "工商管理", + "ru": "Деловое администрирование" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://eweb.ouc.edu.cn/4200/list.htm", + "sourceTitle": "Ocean University of China — Why OUC", + "checkedAt": "2026-08-08", + "locator": "Paragraph beginning “OUC is now offering various programs to international students”", + "quote": "The Undergraduate Program of Business Administration", + "summary": { + "en": "OUC's official English site explicitly lists the undergraduate Business Administration program among programs offered to international students. Current duration, tuition, instruction language and deadline are not asserted.", + "zh": "中国海洋大学官方英文站明确将工商管理本科列为面向国际学生的项目;不声称当前学制、学费、授课语言或截止日。", + "ru": "Официальный англоязычный сайт OUC прямо включает бакалаврскую программу Business Administration в перечень для иностранцев; текущие сроки, цена, язык и дедлайн не утверждаются." + } + }, + "additionalEvidence": [ + { + "officialUrl": "https://sie.ouc.edu.cn/english/AdmissionBrochures/list.htm", + "sourceTitle": "OUC 2026 International Admission Brochures" + } + ], + "applicationUrl": "https://ouc.at0086.cn/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_program_identity_confirmed_dynamic_facts_not_announced" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-ouc-computer-science-and-technology-bachelor", + "candidateIds": [ + "sparse-depth-0808-ouc-computer-science-and-technology-bachelor" + ], + "institutionSlug": "ocean-university-of-china", + "name": { + "en": "Computer Science and Technology", + "zh": "计算机科学与技术", + "ru": "Информатика и технологии" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://eweb.ouc.edu.cn/4200/list.htm", + "sourceTitle": "Ocean University of China — Why OUC", + "checkedAt": "2026-08-08", + "locator": "Paragraph beginning “OUC is now offering various programs to international students”", + "quote": "The Undergraduate Program of Computer Science and Technology", + "summary": { + "en": "OUC's official English site explicitly lists the undergraduate Computer Science and Technology program among programs offered to international students. Current duration, tuition, instruction language and deadline are not asserted.", + "zh": "中国海洋大学官方英文站明确将计算机科学与技术本科列为面向国际学生的项目;不声称当前学制、学费、授课语言或截止日。", + "ru": "Официальный англоязычный сайт OUC прямо включает бакалаврскую программу Computer Science and Technology в перечень для иностранцев; текущие сроки, цена, язык и дедлайн не утверждаются." + } + }, + "additionalEvidence": [ + { + "officialUrl": "https://sie.ouc.edu.cn/english/AdmissionBrochures/list.htm", + "sourceTitle": "OUC 2026 International Admission Brochures" + } + ], + "applicationUrl": "https://ouc.at0086.cn/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_program_identity_confirmed_dynamic_facts_not_announced" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-ouc-international-economics-and-trade-bachelor", + "candidateIds": [ + "sparse-depth-0808-ouc-international-economics-and-trade-bachelor" + ], + "institutionSlug": "ocean-university-of-china", + "name": { + "en": "International Economics and Trade", + "zh": "国际经济与贸易", + "ru": "Международная экономика и торговля" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://eweb.ouc.edu.cn/4200/list.htm", + "sourceTitle": "Ocean University of China — Why OUC", + "checkedAt": "2026-08-08", + "locator": "Paragraph beginning “OUC is now offering various programs to international students”", + "quote": "The Undergraduate Program of International Economics and Trade", + "summary": { + "en": "OUC's official English site explicitly lists the undergraduate International Economics and Trade program among programs offered to international students. Current duration, tuition, instruction language and deadline are not asserted.", + "zh": "中国海洋大学官方英文站明确将国际经济与贸易本科列为面向国际学生的项目;不声称当前学制、学费、授课语言或截止日。", + "ru": "Официальный англоязычный сайт OUC прямо включает бакалаврскую программу International Economics and Trade в перечень для иностранцев; текущие сроки, цена, язык и дедлайн не утверждаются." + } + }, + "additionalEvidence": [ + { + "officialUrl": "https://sie.ouc.edu.cn/english/AdmissionBrochures/list.htm", + "sourceTitle": "OUC 2026 International Admission Brochures" + } + ], + "applicationUrl": "https://ouc.at0086.cn/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_program_identity_confirmed_dynamic_facts_not_announced" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, { "candidateId": "pku-depth-cs-master-english", "candidateIds": [ @@ -39400,6 +40146,159 @@ "wave6-priority-singletons.json" ] }, + { + "candidateId": "sparse-depth-0808-sustech-bioinformatics-bachelor", + "candidateIds": [ + "sparse-depth-0808-sustech-bioinformatics-bachelor" + ], + "institutionSlug": "southern-university-of-science-and-technology", + "name": { + "en": "Bioinformatics", + "zh": "生物信息学", + "ru": "Биоинформатика" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://infoadmin.sustech.edu.cn/programs/new", + "sourceTitle": "SUSTech International Admissions — Undergraduate Programs", + "checkedAt": "2026-08-08", + "locator": "Department and Major Introduction: Bioinformatics", + "quote": "Bioinformatics", + "summary": { + "en": "SUSTech's official international-admissions catalogue lists Bioinformatics among the majors international undergraduates may choose. Current program-specific duration, tuition, teaching language and deadline remain unannounced.", + "zh": "南方科技大学官方国际招生目录将生物信息学列为国际本科生可选专业;当前专业学制、学费、授课语言和截止日尚未公布。", + "ru": "Официальный международный каталог SUSTech включает Bioinformatics в список направлений, доступных иностранным бакалаврам; срок, цена, язык и дедлайн не объявлены." + } + }, + "additionalEvidence": [], + "applicationUrl": "https://sustech.at0086.cn/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_major_identity_confirmed_program_specific_dynamic_facts_not_announced" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-sustech-chemistry-bachelor", + "candidateIds": [ + "sparse-depth-0808-sustech-chemistry-bachelor" + ], + "institutionSlug": "southern-university-of-science-and-technology", + "name": { + "en": "Chemistry", + "zh": "化学", + "ru": "Химия" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://infoadmin.sustech.edu.cn/programs/new", + "sourceTitle": "SUSTech International Admissions — Undergraduate Programs", + "checkedAt": "2026-08-08", + "locator": "Department and Major Introduction: Chemistry", + "quote": "Chemistry", + "summary": { + "en": "SUSTech's official international-admissions catalogue lists Chemistry among the majors international undergraduates may choose. Current program-specific duration, tuition, teaching language and deadline remain unannounced.", + "zh": "南方科技大学官方国际招生目录将化学列为国际本科生可选专业;当前专业学制、学费、授课语言和截止日尚未公布。", + "ru": "Официальный международный каталог SUSTech включает Chemistry в список направлений, доступных иностранным бакалаврам; срок, цена, язык и дедлайн не объявлены." + } + }, + "additionalEvidence": [], + "applicationUrl": "https://sustech.at0086.cn/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_major_identity_confirmed_program_specific_dynamic_facts_not_announced" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-sustech-computer-science-and-technology-bachelor", + "candidateIds": [ + "sparse-depth-0808-sustech-computer-science-and-technology-bachelor" + ], + "institutionSlug": "southern-university-of-science-and-technology", + "name": { + "en": "Computer Science and Technology", + "zh": "计算机科学与技术", + "ru": "Информатика и технологии" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://infoadmin.sustech.edu.cn/programs/new", + "sourceTitle": "SUSTech International Admissions — Undergraduate Programs", + "checkedAt": "2026-08-08", + "locator": "Department and Major Introduction: Computer Science and Technology", + "quote": "Computer Science and Technology", + "summary": { + "en": "SUSTech's official international-admissions catalogue lists Computer Science and Technology among the majors international undergraduates may choose. Current program-specific duration, tuition, teaching language and deadline remain unannounced.", + "zh": "南方科技大学官方国际招生目录将计算机科学与技术列为国际本科生可选专业;当前专业学制、学费、授课语言和截止日尚未公布。", + "ru": "Официальный международный каталог SUSTech включает Computer Science and Technology в список направлений, доступных иностранным бакалаврам; срок, цена, язык и дедлайн не объявлены." + } + }, + "additionalEvidence": [], + "applicationUrl": "https://sustech.at0086.cn/", + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_major_identity_confirmed_program_specific_dynamic_facts_not_announced" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, { "candidateId": "mew-csw-swjtu-chinese-language-literature-master", "candidateIds": [ @@ -43635,6 +44534,57 @@ "../official-gap-wave-2026-08-02/wave8-new-local-strong.json" ] }, + { + "candidateId": "sparse-depth-0808-wust-international-business-administration-bachelor", + "candidateIds": [ + "sparse-depth-0808-wust-international-business-administration-bachelor" + ], + "institutionSlug": "wuhan-university-of-science-and-technology", + "name": { + "en": "International Business Administration", + "zh": "国际工商管理", + "ru": "Международное деловое администрирование" + }, + "programType": "degree", + "level": "bachelor", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://en.wust.edu.cn/About1/Overview.htm", + "sourceTitle": "Wuhan University of Science and Technology Overview", + "checkedAt": "2026-08-08", + "locator": "International education paragraph describing international degree studies", + "quote": "International students from various countries pursue undergraduate programs in fields such as clinical medicine, civil engineering, and international business administration.", + "summary": { + "en": "WUST's official English overview explicitly identifies International Business Administration among undergraduate fields pursued by international students. No current program-specific duration, tuition, language or deadline is claimed.", + "zh": "武汉科技大学官方英文概况明确将国际工商管理列为国际学生就读的本科领域;不声称当前专业学制、学费、语言或截止日。", + "ru": "Официальный англоязычный обзор WUST прямо называет International Business Administration среди бакалаврских направлений для иностранцев; текущие срок, цена, язык и дедлайн не утверждаются." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "official_overview_confirms_identity_dynamic_facts_require_admission_guide" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, { "candidateId": "wave8-whut-business-administration-bachelor", "candidateIds": [ @@ -49219,6 +50169,266 @@ "sourceFiles": [ "jiangzhehu.json" ] + }, + { + "candidateId": "sparse-depth-0808-zzu-architecture-master", + "candidateIds": [ + "sparse-depth-0808-zzu-architecture-master" + ], + "institutionSlug": "zhengzhou-university", + "name": { + "en": "Architecture", + "zh": "建筑学", + "ru": "Архитектура" + }, + "programType": "degree", + "level": "master", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": null, + "status": "officially_not_announced" + }, + "tuition": { + "amount": null, + "currency": "CNY", + "period": null, + "status": "officially_not_announced" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://international.zzu.edu.cn/en/article/detail?cid=53&detail=65&pid=53", + "sourceTitle": "ZZU 2026 Master Programs with Full Scholarship", + "checkedAt": "2026-08-08", + "locator": "Master of Architecture section and introductory English-program statement", + "quote": "Besides all programs in Chinese, the following programs in English are also promoted by the University with full scholarship. Master of Architecture.", + "summary": { + "en": "ZZU's official 2026 international master page identifies Architecture as an English-taught master program promoted with full scholarship. A current open deadline is not stated in the accessible text.", + "zh": "郑州大学2026年官方国际硕士页将建筑学列为英语授课且配套全额奖学金的硕士项目;可读文本未给出当前开放截止日。", + "ru": "Официальная страница ZZU 2026 года указывает Architecture как англоязычную магистратуру с полной стипендией; текущий открытый срок в доступном тексте не указан." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_deadline_not_present_in_accessible_official_text" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-zzu-medical-foundation", + "candidateIds": [ + "sparse-depth-0808-zzu-medical-foundation" + ], + "institutionSlug": "zhengzhou-university", + "name": { + "en": "International Medical Foundation Program", + "zh": "国际医学预科项目", + "ru": "Международная подготовительная медицинская программа" + }, + "programType": "foundation", + "level": "foundation", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": "1 year", + "status": "known" + }, + "tuition": { + "amount": 15000, + "currency": "CNY", + "period": "program", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://international.zzu.edu.cn/en/admission/detail?cid=17&detail=612&pid=0&spid=0", + "sourceTitle": "ZZU International Medical Foundation Program", + "checkedAt": "2026-08-08", + "locator": "Key information block: degree, duration, school, tuition and target students", + "quote": "Degree: Foundation | Duration: 1 Years | School: International Education | Tuition: 15,000.", + "summary": { + "en": "The official program page confirms a one-year English medical foundation route for international students at CNY 15,000. The related 2026 article prints an impossible calendar date, so no deadline is materialized.", + "zh": "官方项目页确认面向国际学生的一年制英语医学预科,费用为15000元。关联2026年文章印有不存在的日历日期,因此不落库任何截止日。", + "ru": "Официальная страница подтверждает годичную англоязычную медицинскую подготовительную программу за 15 000 CNY. В статье 2026 года указана несуществующая календарная дата, поэтому дедлайн не импортируется." + } + }, + "additionalEvidence": [ + { + "officialUrl": "https://international.zzu.edu.cn/en/article/detail?cid=53&detail=64&pid=53", + "sourceTitle": "ZZU One-year Medical Foundation Program 2026" + } + ], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "official_source_contains_invalid_june_31_deadline_not_materialized" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-zuel-chinese-language", + "candidateIds": [ + "sparse-depth-0808-zuel-chinese-language" + ], + "institutionSlug": "zhongnan-university-of-economics-and-law", + "name": { + "en": "Chinese Language Program", + "zh": "汉语进修项目", + "ru": "Программа китайского языка" + }, + "programType": "language", + "level": "language", + "teachingLanguage": { + "value": null, + "status": "officially_not_announced" + }, + "duration": { + "value": "1 academic year", + "status": "known" + }, + "tuition": { + "amount": 16000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf", + "sourceTitle": "ZUEL International Admissions Guide", + "checkedAt": "2026-08-08", + "locator": "PDF page 2, Chinese Language Students and tuition table", + "quote": "Chinese Language: 1 year, CNY 16,000 per person per year.", + "summary": { + "en": "ZUEL's official guide describes one-year Chinese-language study, including elementary through advanced placement, at CNY 16,000 per year. The guide does not publish a current exact deadline.", + "zh": "中南财经政法大学官方简章介绍一年制汉语进修,包含初级到高级分班,年学费为16000元;未公布当前精确截止日。", + "ru": "Официальное руководство ZUEL описывает годичную программу китайского языка с уровнями от начального до продвинутого за 16 000 CNY в год; точный текущий срок не дан." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "guide_only_provides_reference_season_no_exact_current_deadline" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-zuel-international-law-english-master", + "candidateIds": [ + "sparse-depth-0808-zuel-international-law-english-master" + ], + "institutionSlug": "zhongnan-university-of-economics-and-law", + "name": { + "en": "International Law (English-taught)", + "zh": "国际法(英文授课)", + "ru": "Международное право (на английском языке)" + }, + "programType": "degree", + "level": "master", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": "2 years", + "status": "known" + }, + "tuition": { + "amount": 30000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf", + "sourceTitle": "ZUEL International Admissions Guide", + "checkedAt": "2026-08-08", + "locator": "PDF page 2, Master's majors and tuition table", + "quote": "Master's Degree Program (taught in English, 2 Years): Accounting, Finance, International Law, IMBA, International business.", + "summary": { + "en": "ZUEL's official international guide lists International Law among two-year English-taught master programs and gives CNY 30,000 annual tuition for English-taught master study. The guide provides seasonal reference windows rather than a current exact deadline.", + "zh": "中南财经政法大学官方国际招生简章将国际法列为两年制英文授课硕士,英文硕士年学费为30000元;简章仅提供季节性参考申请期,没有当前精确截止日。", + "ru": "Официальное руководство ZUEL включает International Law в двухлетние англоязычные магистерские программы с платой 30 000 CNY в год; точная текущая дата не дана." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "guide_only_provides_reference_season_no_exact_current_deadline" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, + { + "candidateId": "sparse-depth-0808-zuel-imba-master", + "candidateIds": [ + "sparse-depth-0808-zuel-imba-master" + ], + "institutionSlug": "zhongnan-university-of-economics-and-law", + "name": { + "en": "International MBA (English-taught)", + "zh": "国际工商管理硕士(英文授课)", + "ru": "Международная MBA (на английском языке)" + }, + "programType": "degree", + "level": "master", + "teachingLanguage": { + "value": "English", + "status": "known" + }, + "duration": { + "value": "2 years", + "status": "known" + }, + "tuition": { + "amount": 30000, + "currency": "CNY", + "period": "academic-year", + "status": "known" + }, + "cycles": [], + "evidence": { + "officialUrl": "https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf", + "sourceTitle": "ZUEL International Admissions Guide", + "checkedAt": "2026-08-08", + "locator": "PDF page 2, English-taught master program list and tuition table", + "quote": "Master's Degree Program (taught in English, 2 Years): Accounting, Finance, International Law, IMBA, International business.", + "summary": { + "en": "The official guide names IMBA as a two-year English-taught master program and publishes the CNY 30,000-per-year English-master tuition category. Only reference application seasons are given.", + "zh": "官方简章将IMBA列为两年制英文授课硕士,并公布英文硕士每年30000元学费类别;仅给出参考申请季节。", + "ru": "Официальный справочник называет IMBA двухлетней англоязычной магистратурой и указывает 30 000 CNY в год; даны только ориентировочные сезоны подачи." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "recommendedAction": "publish_program_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "guide_only_provides_reference_season_no_exact_current_deadline" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] } ], "scholarshipCandidates": [ @@ -50430,6 +51640,56 @@ "mew-csw-ccnu-chinese-literature-icl-bachelor" ] }, + { + "candidateId": "sparse-depth-0808-csu-university-scholarship", + "candidateIds": [ + "sparse-depth-0808-csu-university-scholarship" + ], + "institutionSlug": "central-south-university", + "name": { + "en": "Central South University Scholarship for International Students", + "zh": "中南大学国际学生奖学金", + "ru": "Стипендия Центрально-Южного университета для иностранных студентов" + }, + "scholarshipType": "university", + "scope": "International master and doctoral applicants who meet the official academic, age and language requirements.", + "applicableLevels": [ + "master", + "doctorate" + ], + "programCandidateIds": [], + "funding": { + "status": "known", + "tiers": [ + "Full scholarship: tuition, on-campus accommodation, and monthly stipend", + "Partial scholarship: tuition" + ] + }, + "cycles": [], + "evidence": { + "officialUrl": "https://intl.csu.edu.cn/English/Scholarship/University_Scholarship.htm", + "sourceTitle": "2026 CSU Scholarship for International Students", + "checkedAt": "2026-08-08", + "locator": "Sections 1, 2, 4 and 7: coverage, levels, closed deadline and online application", + "quote": "Full scholarship: coverage of tuition, on-campus accommodation, and a monthly stipend. Partial scholarship: coverage of tuition.", + "summary": { + "en": "The official 2026 guide defines full and partial CSU scholarship tiers for international master and doctoral applicants and a direct CSU online application route. The May 31 deadline is closed and is not published as current.", + "zh": "2026年官方简章定义了面向国际硕士和博士申请者的中南大学全额与部分奖学金及校方在线申请路线;5月31日截止期已关闭,不展示为当前。", + "ru": "Официальное руководство 2026 года определяет полную и частичную стипендии CSU для иностранных магистров и докторантов; дедлайн 31 мая закрыт и не показывается как текущий." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "applicationRouteStatus": "not_confirmed", + "recommendedAction": "publish_scholarship_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "closed_or_unannounced_application_cycle_not_materialized" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, { "candidateId": "wave3-sch-cust-csc-graduate", "candidateIds": [ @@ -54044,6 +55304,56 @@ "mve-ecma-gafa-visual-communication-bachelor" ] }, + { + "candidateId": "sparse-depth-0808-gzhmu-guangdong-government-freshmen", + "candidateIds": [ + "sparse-depth-0808-gzhmu-guangdong-government-freshmen" + ], + "institutionSlug": "guangzhou-medical-university", + "name": { + "en": "Guangdong Government Outstanding International Students Scholarship for Freshmen", + "zh": "广东政府来粤留学生新生奖学金", + "ru": "Стипендия правительства Гуандуна для выдающихся новых иностранных студентов" + }, + "scholarshipType": "province", + "scope": "Self-funded international master and doctoral freshmen at Guangzhou Medical University; award paid after registration, while fees remain payable.", + "applicableLevels": [ + "master", + "doctorate" + ], + "programCandidateIds": [], + "funding": { + "status": "known", + "tiers": [ + "Master: CNY 20,000 one-time award", + "Doctorate: CNY 30,000 one-time award" + ] + }, + "cycles": [], + "evidence": { + "officialUrl": "https://fao.gzhmu.edu.cn/info/1301/9522.htm", + "sourceTitle": "Guangzhou Medical University 2026 International Master and Doctoral Admission Guide", + "checkedAt": "2026-08-08", + "locator": "Section IX Scholarships", + "quote": "Doctoral students: RMB30,000 per person for one-time reward. Master's students: RMB20,000 per person for one-time reward.", + "summary": { + "en": "The 2026 official guide states that self-funded international freshmen may apply after admission: CNY 20,000 for master students and CNY 30,000 for doctoral students, paid once after registration. No independent open deadline is asserted.", + "zh": "2026年官方简章说明自费国际新生可在录取后申请:硕士一次性20000元,博士一次性30000元,注册后发放;不声称独立开放截止日。", + "ru": "В официальном руководстве 2026 года указано, что самофинансируемые новые иностранные студенты могут податься после зачисления: 20 000 CNY магистрам и 30 000 CNY докторантам единовременно после регистрации; отдельный дедлайн не утверждается." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "applicationRouteStatus": "not_confirmed", + "recommendedAction": "publish_scholarship_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "post_admission_freshman_award_no_independent_deadline" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] + }, { "candidateId": "clw-sw-gzhu-belt-road-scholarship", "candidateIds": [ @@ -66055,6 +67365,54 @@ "sourceFiles": [ "../official-gap-wave-2026-08-02/wave8-scholarship-gaps.json" ] + }, + { + "candidateId": "sparse-depth-0808-zzu-2026-master-full-scholarship", + "candidateIds": [ + "sparse-depth-0808-zzu-2026-master-full-scholarship" + ], + "institutionSlug": "zhengzhou-university", + "name": { + "en": "ZZU 2026 Master Programs Full Scholarship", + "zh": "郑州大学2026年硕士项目全额奖学金", + "ru": "Полная стипендия ZZU для магистерских программ 2026 года" + }, + "scholarshipType": "csc", + "scope": "Eligible non-Chinese master applicants meeting the official academic, age and language requirements, including promoted English-taught programs.", + "applicableLevels": [ + "master" + ], + "programCandidateIds": [], + "funding": { + "status": "known", + "tiers": [ + "Full scholarship: tuition, accommodation, living allowance, and medical insurance" + ] + }, + "cycles": [], + "evidence": { + "officialUrl": "https://international.zzu.edu.cn/en/article/detail?cid=53&detail=65&pid=53", + "sourceTitle": "ZZU 2026 Master Programs with Full Scholarship", + "checkedAt": "2026-08-08", + "locator": "Chinese Government Scholarship coverage and eligibility sections", + "quote": "It covers tuition, accommodation, living allowance, and medical insurance.", + "summary": { + "en": "ZZU's official 2026 page describes a full Chinese Government Scholarship for eligible international master applicants, covering tuition, accommodation, living allowance and medical insurance. The accessible text does not provide a reliable current deadline.", + "zh": "郑州大学2026年官方页介绍面向符合条件的国际硕士申请者的中国政府全额奖学金,覆盖学费、住宿、生活补助和医疗保险;可读文本未提供可靠的当前截止日。", + "ru": "Официальная страница ZZU 2026 года описывает полную государственную стипендию для подходящих иностранных магистров, покрывающую обучение, жильё, стипендию на жизнь и страховку; надёжный текущий срок не указан." + } + }, + "additionalEvidence": [], + "applicationUrl": null, + "applicationRouteStatus": "not_confirmed", + "recommendedAction": "publish_scholarship_identity_without_open_cycle", + "qualityTier": "A", + "riskFlags": [ + "current_deadline_not_present_in_accessible_official_text" + ], + "sourceFiles": [ + "sparse-depth-and-scholarships.json" + ] } ], "archiveInstitutionSlugs": [ @@ -66370,6 +67728,19 @@ "representedScholarshipCandidates": 23, "programDuplicateGroups": [], "scholarshipDuplicateGroups": [] + }, + "sparseDepthWave20260808": { + "rawCities": 0, + "rawUniversities": 0, + "rawPrograms": 23, + "publishablePrograms": 23, + "quarantinedPrograms": [], + "rawScholarships": 3, + "droppedScholarshipProgramReferences": [], + "representedProgramCandidates": 23, + "representedScholarshipCandidates": 3, + "programDuplicateGroups": [], + "scholarshipDuplicateGroups": [] } } } diff --git a/scripts/catalog/build-release.ts b/scripts/catalog/build-release.ts index 571a6d1..2eca915 100644 --- a/scripts/catalog/build-release.ts +++ b/scripts/catalog/build-release.ts @@ -264,6 +264,11 @@ function hasOfficialSource(bundle: DataBundle, sourceIds: string[]) { return bundle.sources.some((source) => source.official && wanted.has(source.id)) } +function officialSourceUrl(bundle: DataBundle, sourceIds: string[]) { + const wanted = new Set(sourceIds) + return bundle.sources.find((source) => source.official && wanted.has(source.id))?.url ?? null +} + export function buildLegacyRelease(bundleInput: DataBundle): ReleaseArtifacts { const bundle = bundleSchema.parse(bundleInput) const bundleJson = JSON.stringify(bundle) @@ -558,12 +563,14 @@ export function buildLegacyRelease(bundleInput: DataBundle): ReleaseArtifacts { for (const scholarship of bundle.scholarships) { const providerId = `provider-${scholarship.id}` + const officialUrl = scholarship.applicationUrl ?? officialSourceUrl(bundle, scholarship.sourceIds) + if (!officialUrl) throw new Error(`Official source not found for scholarship ${scholarship.id}`) statements.push(recordRow(releaseId, { ...scholarship, id: providerId, slug: `provider-${scholarship.slug}` }, 'organization', { providerId, scholarship })) statements.push(insert('organizations', { release_id: releaseId, organization_id: providerId, organization_type: scholarship.providerType === 'university' ? 'university' : 'scholarship_provider', - official_url: scholarship.applicationUrl, + official_url: officialUrl, })) addSources(statements, releaseId, providerId, scholarship.sourceIds) statements.push(recordRow(releaseId, scholarship, 'scholarship', scholarship)) @@ -572,7 +579,7 @@ export function buildLegacyRelease(bundleInput: DataBundle): ReleaseArtifacts { scholarship_id: scholarship.id, provider_organization_id: providerId, scheme_type: scholarship.providerType === 'csc' ? 'government' : scholarship.providerType, - official_url: scholarship.applicationUrl, + official_url: officialUrl, })) addLocalized(statements, releaseId, scholarship.id, 'name', scholarship.name) addLocalized(statements, releaseId, scholarship.id, 'summary', scholarship.summary) diff --git a/scripts/cloudflare/backup-preflight.ts b/scripts/cloudflare/backup-preflight.ts index 4830467..166fcac 100644 --- a/scripts/cloudflare/backup-preflight.ts +++ b/scripts/cloudflare/backup-preflight.ts @@ -12,6 +12,8 @@ export const BACKUP_DATABASES = [ 'studyinchina-pipeline', ] as const export const BACKUP_BUCKET = 'studyinchina-releases' +export const BACKUP_CONFIGURATION_DOC = + 'docs/backup-and-restore.md#github-actions-configuration' const BACKUP_FILES = ['catalog.sql.gz', 'pipeline.sql.gz'] as const export type BackupArtifactReport = { @@ -25,14 +27,42 @@ export function validateBackupCredentials( ): { databases: number; bucket: string } { const token = environment.CLOUDFLARE_API_TOKEN?.trim() const accountId = environment.CLOUDFLARE_ACCOUNT_ID?.trim() - if (!token) throw new Error('CLOUDFLARE_API_TOKEN is not configured') - if (!accountId) throw new Error('CLOUDFLARE_ACCOUNT_ID is not configured') + if (!token || !accountId) { + const missing = [ + !token ? 'CLOUDFLARE_API_TOKEN' : undefined, + !accountId ? 'CLOUDFLARE_ACCOUNT_ID' : undefined, + ].filter((name): name is string => Boolean(name)) + throw new Error( + `Missing required GitHub Actions repository secret(s): ${missing.join(', ')}. ` + + `Configure them before rerunning; see ${BACKUP_CONFIGURATION_DOC}. No backup was created.`, + ) + } if (!/^[0-9a-f]{32}$/iu.test(accountId)) { - throw new Error('CLOUDFLARE_ACCOUNT_ID must be a 32-character hexadecimal identifier') + throw new Error( + 'CLOUDFLARE_ACCOUNT_ID must be a 32-character hexadecimal identifier. ' + + `See ${BACKUP_CONFIGURATION_DOC}. No backup was created.`, + ) } return { databases: BACKUP_DATABASES.length, bucket: BACKUP_BUCKET } } +function escapeWorkflowCommand(value: string): string { + return value + .replaceAll('%', '%25') + .replaceAll('\r', '%0D') + .replaceAll('\n', '%0A') +} + +export function formatBackupPreflightError( + error: unknown, + githubActions = false, +): string { + const detail = error instanceof Error ? error.message : String(error) + const message = `Cloudflare D1 backup preflight failed: ${detail}` + if (!githubActions) return `${message}\n` + return `::error title=Cloudflare D1 backup preflight failed::${escapeWorkflowCommand(message)}\n${message}\n` +} + function checksum(path: string): string { return createHash('sha256').update(readFileSync(path)).digest('hex') } @@ -118,7 +148,7 @@ if (isMainModule()) { try { main() } catch (error) { - process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`) + process.stderr.write(formatBackupPreflightError(error, process.env.GITHUB_ACTIONS === 'true')) process.exitCode = 1 } } diff --git a/scripts/ingestion/apply-international-coverage-wave-2026-07-30.cjs b/scripts/ingestion/apply-international-coverage-wave-2026-07-30.cjs index b29c065..7299b8c 100644 --- a/scripts/ingestion/apply-international-coverage-wave-2026-07-30.cjs +++ b/scripts/ingestion/apply-international-coverage-wave-2026-07-30.cjs @@ -849,7 +849,12 @@ function importScholarship(candidate, state) { programIds, coverage: scholarshipCoverage(candidate), deadline, - applicationUrl: httpsUrl(candidate.evidence?.officialUrl, `${candidate.candidateId} official URL`), + applicationUrl: candidate.applicationRouteStatus === 'not_confirmed' + ? null + : httpsUrl( + candidate.evidence?.officialUrl, + `${candidate.candidateId} official URL`, + ), summary, sourceIds, verifiedAt: checkedAt, diff --git a/scripts/ingestion/build-sparse-depth-wave-2026-08-08.cjs b/scripts/ingestion/build-sparse-depth-wave-2026-08-08.cjs new file mode 100644 index 0000000..4cc9f7c --- /dev/null +++ b/scripts/ingestion/build-sparse-depth-wave-2026-08-08.cjs @@ -0,0 +1,733 @@ +const fs = require('node:fs') +const path = require('node:path') + +const root = path.resolve(__dirname, '..', '..') +const checkedAt = '2026-08-08' +const outputDirectory = path.join(root, 'quality', 'multiversity-expansion-wave-2026-08-08') +const outputPath = path.join(outputDirectory, 'sparse-depth-and-scholarships.json') +const sourceFile = 'sparse-depth-and-scholarships.json' + +function unavailableFact(extra = {}) { + return { value: null, status: 'officially_not_announced', ...extra } +} + +function knownFact(value) { + return { value, status: 'known' } +} + +function knownTuition(amount, period = 'academic-year', qualifier = undefined) { + return { + amount, + currency: 'CNY', + period, + status: 'known', + ...(qualifier ? { qualifier } : {}), + } +} + +function unknownTuition() { + return { + amount: null, + currency: 'CNY', + period: null, + status: 'officially_not_announced', + } +} + +function evidence({ officialUrl, sourceTitle, locator, quote, summary }) { + return { + officialUrl, + sourceTitle, + checkedAt, + locator, + quote, + summary, + } +} + +function program({ + id, + institutionSlug, + name, + level, + programType = 'degree', + teachingLanguage = unavailableFact(), + duration = unavailableFact(), + tuition = unknownTuition(), + evidence: primaryEvidence, + additionalEvidence = [], + applicationUrl = null, + riskFlags = ['current_application_cycle_not_published'], +}) { + return { + candidateId: id, + candidateIds: [id], + institutionSlug, + name, + programType, + level, + teachingLanguage, + duration, + tuition, + cycles: [], + evidence: evidence(primaryEvidence), + additionalEvidence, + applicationUrl, + recommendedAction: 'publish_program_identity_without_open_cycle', + qualityTier: 'A', + riskFlags, + sourceFiles: [sourceFile], + } +} + +function scholarship({ + id, + institutionSlug, + name, + scholarshipType, + scope, + applicableLevels, + tiers, + evidence: primaryEvidence, + applicationUrl = null, + applicationRouteStatus = 'not_confirmed', + riskFlags = ['closed_or_unannounced_application_cycle_not_materialized'], +}) { + return { + candidateId: id, + candidateIds: [id], + institutionSlug, + name, + scholarshipType, + scope, + applicableLevels, + programCandidateIds: [], + funding: { status: 'known', tiers }, + cycles: [], + evidence: evidence(primaryEvidence), + additionalEvidence: [], + applicationUrl, + applicationRouteStatus, + recommendedAction: 'publish_scholarship_identity_without_open_cycle', + qualityTier: 'A', + riskFlags, + sourceFiles: [sourceFile], + } +} + +const programCandidates = [ + program({ + id: 'sparse-depth-0808-csu-computing-science-bachelor', + institutionSlug: 'central-south-university', + name: { + en: 'Computing Science', + zh: '计算科学', + ru: 'Вычислительная наука', + }, + level: 'bachelor', + teachingLanguage: knownFact('English'), + duration: knownFact('4 years'), + tuition: knownTuition(69000), + evidence: { + officialUrl: 'https://intl.csu.edu.cn/English/Admission/Undergraduate_Programs/English_taught_Programs.htm', + sourceTitle: '2026 CSU English-taught Undergraduate Programs', + locator: 'Sections II and IV: catalogue, duration, tuition and application procedure', + quote: 'CSU offers five English-taught undergraduate programs: Civil Engineering, Mathematics, Computing Science, Mechanical Engineering, and Mechanical Engineering with Transportation.', + summary: { + en: 'The 2026 official international guide lists Computing Science among CSU\'s English-taught four-year undergraduate programs and publishes tuition of CNY 69,000 per year. The May 31 application deadline is closed and is not exposed as a current cycle.', + zh: '2026年官方国际生简章将计算科学列为中南大学四年制英语授课本科项目,学费为每年69000元。5月31日截止期已关闭,不作为当前周期展示。', + ru: 'Официальное руководство 2026 года включает Computing Science в число четырёхлетних англоязычных бакалаврских программ; плата — 69 000 CNY в год. Закрытый срок не публикуется как текущий.', + }, + }, + applicationUrl: 'https://csu.17gz.org/', + riskFlags: ['2026_application_deadline_closed_identity_and_fee_reference_only'], + }), + program({ + id: 'sparse-depth-0808-csu-mechanical-engineering-bachelor', + institutionSlug: 'central-south-university', + name: { + en: 'Mechanical Engineering', + zh: '机械工程', + ru: 'Механическая инженерия', + }, + level: 'bachelor', + teachingLanguage: knownFact('English'), + duration: knownFact('4 years'), + tuition: knownTuition(69000), + evidence: { + officialUrl: 'https://intl.csu.edu.cn/English/Admission/Undergraduate_Programs/English_taught_Programs.htm', + sourceTitle: '2026 CSU English-taught Undergraduate Programs', + locator: 'Sections II and IV: catalogue, duration, tuition and application procedure', + quote: 'CSU offers five English-taught undergraduate programs: Civil Engineering, Mathematics, Computing Science, Mechanical Engineering, and Mechanical Engineering with Transportation.', + summary: { + en: 'The 2026 official international guide lists Mechanical Engineering as a four-year English-taught undergraduate program with reference tuition of CNY 69,000 per year. Its closed 2026 deadline is withheld.', + zh: '2026年官方国际生简章列出四年制英语授课机械工程本科,参考学费为每年69000元;已关闭的2026年截止期不展示。', + ru: 'Официальное руководство 2026 года указывает четырёхлетний англоязычный бакалавриат по Mechanical Engineering с ориентировочной платой 69 000 CNY в год; закрытый срок 2026 года скрыт.', + }, + }, + applicationUrl: 'https://csu.17gz.org/', + riskFlags: ['2026_application_deadline_closed_identity_and_fee_reference_only'], + }), + program({ + id: 'sparse-depth-0808-csu-chinese-language', + institutionSlug: 'central-south-university', + name: { + en: 'Chinese Language Program', + zh: '汉语进修项目', + ru: 'Программа китайского языка', + }, + level: 'language', + programType: 'language', + duration: knownFact('One semester or one academic year'), + evidence: { + officialUrl: 'https://intl.csu.edu.cn/info/1141/3799.htm', + sourceTitle: '2026 CSU Chinese Language Program for International Students', + locator: 'Sections I, II and III: duration, eligibility and funding route', + quote: 'One academic year: September 2026 - July 2027; One semester: September 2026 - January 2027.', + summary: { + en: 'CSU\'s official 2026 guide confirms an individually applicable Chinese-language route for non-Chinese citizens in one-semester and one-academic-year formats. The June 10 deadline is closed and omitted.', + zh: '中南大学2026年官方简章确认面向非中国籍申请者的一学期和一学年汉语进修路线;6月10日截止期已关闭并已隐藏。', + ru: 'Официальное руководство CSU 2026 года подтверждает индивидуальную подачу иностранцев на семестровую или годичную программу; закрытый срок 10 июня скрыт.', + }, + }, + applicationUrl: 'https://csu.17gz.org/', + riskFlags: ['2026_application_deadline_closed_identity_only'], + }), + + program({ + id: 'sparse-depth-0808-ccmusic-music-education-vocal-bachelor', + institutionSlug: 'china-conservatory-of-music', + name: { + en: 'Music Education (Vocal Specialty)', + zh: '音乐教育(声乐特长)', + ru: 'Музыкальное образование (вокальная специализация)', + }, + level: 'bachelor', + duration: knownFact('4 years'), + tuition: knownTuition(32000), + evidence: { + officialUrl: 'https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf', + sourceTitle: 'China Conservatory of Music 2026 International Undergraduate Admission Guide', + locator: 'PDF page 4 program table; pages 5-6 eligibility, application and fees', + quote: '教育学院:音乐教育(声乐特长),学制四年。', + summary: { + en: 'The official 2026 international undergraduate guide lists Music Education (Vocal Specialty), a four-year route with tuition of CNY 32,000 per year. Its January application window is closed.', + zh: '2026年官方留学生本科简章列出音乐教育(声乐特长)四年制项目,学费为每年32000元;1月申请期已关闭。', + ru: 'Официальное руководство 2026 года указывает четырёхлетнюю программу Music Education (Vocal Specialty) с платой 32 000 CNY в год; январский приём закрыт.', + }, + }, + riskFlags: ['2026_application_deadline_closed_identity_and_fee_reference_only'], + }), + program({ + id: 'sparse-depth-0808-ccmusic-composition-bachelor', + institutionSlug: 'china-conservatory-of-music', + name: { + en: 'Composition and Composition Theory', + zh: '作曲与作曲技术理论', + ru: 'Композиция и теория композиции', + }, + level: 'bachelor', + duration: knownFact('5 years'), + tuition: knownTuition(32000), + evidence: { + officialUrl: 'https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf', + sourceTitle: 'China Conservatory of Music 2026 International Undergraduate Admission Guide', + locator: 'PDF page 4 program table; pages 5-6 eligibility, application and fees', + quote: '作曲系:作曲与作曲技术理论,学制五年。', + summary: { + en: 'The 2026 international guide names Composition and Composition Theory as a five-year undergraduate route and publishes annual tuition of CNY 32,000. No expired deadline is materialized.', + zh: '2026年国际生简章将作曲与作曲技术理论列为五年制本科项目,每年学费32000元;已过期截止日不落库。', + ru: 'Руководство 2026 года подтверждает пятилетний бакалавриат Composition and Composition Theory с платой 32 000 CNY в год; просроченная дата не импортируется.', + }, + }, + riskFlags: ['2026_application_deadline_closed_identity_and_fee_reference_only'], + }), + program({ + id: 'sparse-depth-0808-ccmusic-conducting-bachelor', + institutionSlug: 'china-conservatory-of-music', + name: { + en: 'Music Performance (Conducting)', + zh: '音乐表演(指挥)', + ru: 'Музыкальное исполнительство (дирижирование)', + }, + level: 'bachelor', + duration: knownFact('5 years'), + tuition: knownTuition(32000), + evidence: { + officialUrl: 'https://gjjl.ccmusic.edu.cn/docs/2026-01/143de8ad89dd4daf90d199deb54228b0.pdf', + sourceTitle: 'China Conservatory of Music 2026 International Undergraduate Admission Guide', + locator: 'PDF page 4 program table; pages 5-6 eligibility, application and fees', + quote: '指挥系:音乐表演(指挥),学制五年。', + summary: { + en: 'The official international guide confirms Music Performance (Conducting) as a five-year undergraduate route with CNY 32,000 annual tuition. The January 2026 application period is not presented as open.', + zh: '官方国际生简章确认音乐表演(指挥)为五年制本科,每年学费32000元;2026年1月申请期不作为开放周期展示。', + ru: 'Официальный справочник подтверждает пятилетний бакалавриат Music Performance (Conducting) с платой 32 000 CNY в год; январский приём 2026 года не считается открытым.', + }, + }, + riskFlags: ['2026_application_deadline_closed_identity_and_fee_reference_only'], + }), + + program({ + id: 'sparse-depth-0808-gxu-chinese-language-student', + institutionSlug: 'guangxi-university', + name: { + en: 'Chinese Language Program', + zh: '汉语进修生项目', + ru: 'Программа китайского языка', + }, + level: 'language', + programType: 'language', + tuition: knownTuition(10500, 'academic-year', 'The same official fee page also lists CNY 5,250 per semester.'), + evidence: { + officialUrl: 'https://gjxy.gxu.edu.cn/LXXD/sfbz.htm', + sourceTitle: 'Guangxi University International Student Fee Standards', + locator: 'Tuition section (I), Chinese Language Student', + quote: '汉语进修生 Chinese Language Student: 5250 yuan/semester; 10500 yuan/academic year.', + summary: { + en: 'The official international-student fee page explicitly identifies the Chinese Language Student category and publishes CNY 5,250 per semester or CNY 10,500 per academic year. The current application deadline is not stated on this page.', + zh: '官方国际生收费页明确列出汉语进修生类别,学费为每学期5250元或每学年10500元;该页未公布当前申请截止日。', + ru: 'Официальная страница тарифов для иностранцев прямо указывает Chinese Language Student: 5 250 CNY за семестр или 10 500 CNY за учебный год; текущий срок не указан.', + }, + }, + applicationUrl: null, + riskFlags: ['current_application_cycle_not_published_fee_reference_only'], + }), + program({ + id: 'sparse-depth-0808-gxu-chinese-language-major-bachelor', + institutionSlug: 'guangxi-university', + name: { + en: 'Chinese Language Major', + zh: '汉语言专业', + ru: 'Китайский язык', + }, + level: 'bachelor', + tuition: knownTuition(11000), + evidence: { + officialUrl: 'https://gjxy.gxu.edu.cn/LXXD/sfbz.htm', + sourceTitle: 'Guangxi University International Student Fee Standards', + locator: 'Tuition section (II), Undergraduate Student, item 1', + quote: '汉语言专业11000元/年 Chinese Language Major 11000 yuan/year.', + summary: { + en: 'Guangxi University\'s official international-student fee standard lists the Chinese Language Major as an undergraduate category at CNY 11,000 per year. Duration, instruction language and the current cycle remain unannounced.', + zh: '广西大学官方国际生收费标准将汉语言专业列为本科类别,学费为每年11000元;学制、授课语言和当前周期尚未公布。', + ru: 'Официальный тариф для иностранцев относит Chinese Language Major к бакалавриату с платой 11 000 CNY в год; длительность, язык и текущий цикл не объявлены.', + }, + }, + applicationUrl: null, + riskFlags: ['current_application_cycle_duration_and_language_not_published_fee_reference_only'], + }), + + ...[ + { + slug: 'mechanical-engineering', + en: 'Mechanical Engineering', + zh: '机械工程', + ru: 'Механическая инженерия', + quote: 'Mechanical Engineering.pdf', + }, + { + slug: 'energy-and-power-engineering', + en: 'Energy and Power Engineering', + zh: '能源与动力工程', + ru: 'Энергетика и теплоэнергетика', + quote: 'Energy and Power.pdf', + }, + { + slug: 'metallurgical-engineering', + en: 'Metallurgical Engineering', + zh: '冶金工程', + ru: 'Металлургическая инженерия', + quote: 'Metallurgical Engineering.pdf', + }, + ].map((item) => program({ + id: `sparse-depth-0808-kust-${item.slug}-bachelor`, + institutionSlug: 'kunming-university-of-science-and-technology', + name: { en: item.en, zh: item.zh, ru: item.ru }, + level: 'bachelor', + teachingLanguage: knownFact('English'), + evidence: { + officialUrl: 'https://gjxy.kust.edu.cn/info/1336/1351.htm', + sourceTitle: 'KUST English-Taught Programs', + locator: `English-taught program attachment list: ${item.en}`, + quote: item.quote, + summary: { + en: `KUST's official International College page lists ${item.en} among its English-taught programs. A separate 2026 official page confirms the current international undergraduate and postgraduate catalogue; duration, fee and open cycle are not asserted.`, + zh: `昆明理工大学国际学院官方页将${item.zh}列入全英文授课专业,另有2026年官方国际生专业目录页作为当期支持;不声称学制、费用或开放周期。`, + ru: `Официальная страница KUST включает ${item.en} в число англоязычных программ, а отдельная страница 2026 года подтверждает текущий международный каталог; срок, цена и открытый цикл не утверждаются.`, + }, + }, + additionalEvidence: [{ + officialUrl: 'https://gjxy.kust.edu.cn/info/1337/1722.htm', + sourceTitle: '2026 KUST Undergraduate and Post-graduate Program List', + }], + applicationUrl: 'https://gjxy.kust.edu.cn/info/1337/1718.htm', + riskFlags: ['current_2026_catalog_attachment_requires_item_level_recheck_before_dynamic_facts'], + })), + + ...[ + { + slug: 'international-economics-and-trade', + en: 'International Economics and Trade', + zh: '国际经济与贸易', + ru: 'Международная экономика и торговля', + }, + { + slug: 'business-administration', + en: 'Business Administration', + zh: '工商管理', + ru: 'Деловое администрирование', + }, + { + slug: 'computer-science-and-technology', + en: 'Computer Science and Technology', + zh: '计算机科学与技术', + ru: 'Информатика и технологии', + }, + ].map((item) => program({ + id: `sparse-depth-0808-ouc-${item.slug}-bachelor`, + institutionSlug: 'ocean-university-of-china', + name: { en: item.en, zh: item.zh, ru: item.ru }, + level: 'bachelor', + evidence: { + officialUrl: 'https://eweb.ouc.edu.cn/4200/list.htm', + sourceTitle: 'Ocean University of China — Why OUC', + locator: 'Paragraph beginning “OUC is now offering various programs to international students”', + quote: `The Undergraduate Program of ${item.en}`, + summary: { + en: `OUC's official English site explicitly lists the undergraduate ${item.en} program among programs offered to international students. Current duration, tuition, instruction language and deadline are not asserted.`, + zh: `中国海洋大学官方英文站明确将${item.zh}本科列为面向国际学生的项目;不声称当前学制、学费、授课语言或截止日。`, + ru: `Официальный англоязычный сайт OUC прямо включает бакалаврскую программу ${item.en} в перечень для иностранцев; текущие сроки, цена, язык и дедлайн не утверждаются.`, + }, + }, + additionalEvidence: [{ + officialUrl: 'https://sie.ouc.edu.cn/english/AdmissionBrochures/list.htm', + sourceTitle: 'OUC 2026 International Admission Brochures', + }], + applicationUrl: 'https://ouc.at0086.cn/', + riskFlags: ['current_program_identity_confirmed_dynamic_facts_not_announced'], + })), + + ...[ + { + slug: 'chemistry', en: 'Chemistry', zh: '化学', ru: 'Химия', + }, + { + slug: 'computer-science-and-technology', + en: 'Computer Science and Technology', + zh: '计算机科学与技术', + ru: 'Информатика и технологии', + }, + { + slug: 'bioinformatics', en: 'Bioinformatics', zh: '生物信息学', ru: 'Биоинформатика', + }, + ].map((item) => program({ + id: `sparse-depth-0808-sustech-${item.slug}-bachelor`, + institutionSlug: 'southern-university-of-science-and-technology', + name: { en: item.en, zh: item.zh, ru: item.ru }, + level: 'bachelor', + evidence: { + officialUrl: 'https://infoadmin.sustech.edu.cn/programs/new', + sourceTitle: 'SUSTech International Admissions — Undergraduate Programs', + locator: `Department and Major Introduction: ${item.en}`, + quote: item.en, + summary: { + en: `SUSTech's official international-admissions catalogue lists ${item.en} among the majors international undergraduates may choose. Current program-specific duration, tuition, teaching language and deadline remain unannounced.`, + zh: `南方科技大学官方国际招生目录将${item.zh}列为国际本科生可选专业;当前专业学制、学费、授课语言和截止日尚未公布。`, + ru: `Официальный международный каталог SUSTech включает ${item.en} в список направлений, доступных иностранным бакалаврам; срок, цена, язык и дедлайн не объявлены.`, + }, + }, + applicationUrl: 'https://sustech.at0086.cn/', + riskFlags: ['current_major_identity_confirmed_program_specific_dynamic_facts_not_announced'], + })), + + program({ + id: 'sparse-depth-0808-zzu-architecture-master', + institutionSlug: 'zhengzhou-university', + name: { + en: 'Architecture', + zh: '建筑学', + ru: 'Архитектура', + }, + level: 'master', + teachingLanguage: knownFact('English'), + evidence: { + officialUrl: 'https://international.zzu.edu.cn/en/article/detail?cid=53&detail=65&pid=53', + sourceTitle: 'ZZU 2026 Master Programs with Full Scholarship', + locator: 'Master of Architecture section and introductory English-program statement', + quote: 'Besides all programs in Chinese, the following programs in English are also promoted by the University with full scholarship. Master of Architecture.', + summary: { + en: 'ZZU\'s official 2026 international master page identifies Architecture as an English-taught master program promoted with full scholarship. A current open deadline is not stated in the accessible text.', + zh: '郑州大学2026年官方国际硕士页将建筑学列为英语授课且配套全额奖学金的硕士项目;可读文本未给出当前开放截止日。', + ru: 'Официальная страница ZZU 2026 года указывает Architecture как англоязычную магистратуру с полной стипендией; текущий открытый срок в доступном тексте не указан.', + }, + }, + applicationUrl: null, + riskFlags: ['current_deadline_not_present_in_accessible_official_text'], + }), + program({ + id: 'sparse-depth-0808-zzu-medical-foundation', + institutionSlug: 'zhengzhou-university', + name: { + en: 'International Medical Foundation Program', + zh: '国际医学预科项目', + ru: 'Международная подготовительная медицинская программа', + }, + level: 'foundation', + programType: 'foundation', + teachingLanguage: knownFact('English'), + duration: knownFact('1 year'), + tuition: knownTuition(15000, 'program'), + evidence: { + officialUrl: 'https://international.zzu.edu.cn/en/admission/detail?cid=17&detail=612&pid=0&spid=0', + sourceTitle: 'ZZU International Medical Foundation Program', + locator: 'Key information block: degree, duration, school, tuition and target students', + quote: 'Degree: Foundation | Duration: 1 Years | School: International Education | Tuition: 15,000.', + summary: { + en: 'The official program page confirms a one-year English medical foundation route for international students at CNY 15,000. The related 2026 article prints an impossible calendar date, so no deadline is materialized.', + zh: '官方项目页确认面向国际学生的一年制英语医学预科,费用为15000元。关联2026年文章印有不存在的日历日期,因此不落库任何截止日。', + ru: 'Официальная страница подтверждает годичную англоязычную медицинскую подготовительную программу за 15 000 CNY. В статье 2026 года указана несуществующая календарная дата, поэтому дедлайн не импортируется.', + }, + }, + additionalEvidence: [{ + officialUrl: 'https://international.zzu.edu.cn/en/article/detail?cid=53&detail=64&pid=53', + sourceTitle: 'ZZU One-year Medical Foundation Program 2026', + }], + applicationUrl: null, + riskFlags: ['official_source_contains_invalid_june_31_deadline_not_materialized'], + }), + + program({ + id: 'sparse-depth-0808-zuel-international-law-english-master', + institutionSlug: 'zhongnan-university-of-economics-and-law', + name: { + en: 'International Law (English-taught)', + zh: '国际法(英文授课)', + ru: 'Международное право (на английском языке)', + }, + level: 'master', + teachingLanguage: knownFact('English'), + duration: knownFact('2 years'), + tuition: knownTuition(30000), + evidence: { + officialUrl: 'https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf', + sourceTitle: 'ZUEL International Admissions Guide', + locator: 'PDF page 2, Master\'s majors and tuition table', + quote: 'Master\'s Degree Program (taught in English, 2 Years): Accounting, Finance, International Law, IMBA, International business.', + summary: { + en: 'ZUEL\'s official international guide lists International Law among two-year English-taught master programs and gives CNY 30,000 annual tuition for English-taught master study. The guide provides seasonal reference windows rather than a current exact deadline.', + zh: '中南财经政法大学官方国际招生简章将国际法列为两年制英文授课硕士,英文硕士年学费为30000元;简章仅提供季节性参考申请期,没有当前精确截止日。', + ru: 'Официальное руководство ZUEL включает International Law в двухлетние англоязычные магистерские программы с платой 30 000 CNY в год; точная текущая дата не дана.', + }, + }, + riskFlags: ['guide_only_provides_reference_season_no_exact_current_deadline'], + }), + program({ + id: 'sparse-depth-0808-zuel-imba-master', + institutionSlug: 'zhongnan-university-of-economics-and-law', + name: { + en: 'International MBA (English-taught)', + zh: '国际工商管理硕士(英文授课)', + ru: 'Международная MBA (на английском языке)', + }, + level: 'master', + teachingLanguage: knownFact('English'), + duration: knownFact('2 years'), + tuition: knownTuition(30000), + evidence: { + officialUrl: 'https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf', + sourceTitle: 'ZUEL International Admissions Guide', + locator: 'PDF page 2, English-taught master program list and tuition table', + quote: 'Master\'s Degree Program (taught in English, 2 Years): Accounting, Finance, International Law, IMBA, International business.', + summary: { + en: 'The official guide names IMBA as a two-year English-taught master program and publishes the CNY 30,000-per-year English-master tuition category. Only reference application seasons are given.', + zh: '官方简章将IMBA列为两年制英文授课硕士,并公布英文硕士每年30000元学费类别;仅给出参考申请季节。', + ru: 'Официальный справочник называет IMBA двухлетней англоязычной магистратурой и указывает 30 000 CNY в год; даны только ориентировочные сезоны подачи.', + }, + }, + riskFlags: ['guide_only_provides_reference_season_no_exact_current_deadline'], + }), + program({ + id: 'sparse-depth-0808-zuel-chinese-language', + institutionSlug: 'zhongnan-university-of-economics-and-law', + name: { + en: 'Chinese Language Program', + zh: '汉语进修项目', + ru: 'Программа китайского языка', + }, + level: 'language', + programType: 'language', + duration: knownFact('1 academic year'), + tuition: knownTuition(16000), + evidence: { + officialUrl: 'https://ies-en.zuel.edu.cn/_upload/article/files/9e/a1/f493cff64425b1bbf55d031a056b/283f0e72-29f6-4dc8-b85d-4e400c5c50f9.pdf', + sourceTitle: 'ZUEL International Admissions Guide', + locator: 'PDF page 2, Chinese Language Students and tuition table', + quote: 'Chinese Language: 1 year, CNY 16,000 per person per year.', + summary: { + en: 'ZUEL\'s official guide describes one-year Chinese-language study, including elementary through advanced placement, at CNY 16,000 per year. The guide does not publish a current exact deadline.', + zh: '中南财经政法大学官方简章介绍一年制汉语进修,包含初级到高级分班,年学费为16000元;未公布当前精确截止日。', + ru: 'Официальное руководство ZUEL описывает годичную программу китайского языка с уровнями от начального до продвинутого за 16 000 CNY в год; точный текущий срок не дан.', + }, + }, + riskFlags: ['guide_only_provides_reference_season_no_exact_current_deadline'], + }), + + program({ + id: 'sparse-depth-0808-wust-international-business-administration-bachelor', + institutionSlug: 'wuhan-university-of-science-and-technology', + name: { + en: 'International Business Administration', + zh: '国际工商管理', + ru: 'Международное деловое администрирование', + }, + level: 'bachelor', + evidence: { + officialUrl: 'https://en.wust.edu.cn/About1/Overview.htm', + sourceTitle: 'Wuhan University of Science and Technology Overview', + locator: 'International education paragraph describing international degree studies', + quote: 'International students from various countries pursue undergraduate programs in fields such as clinical medicine, civil engineering, and international business administration.', + summary: { + en: 'WUST\'s official English overview explicitly identifies International Business Administration among undergraduate fields pursued by international students. No current program-specific duration, tuition, language or deadline is claimed.', + zh: '武汉科技大学官方英文概况明确将国际工商管理列为国际学生就读的本科领域;不声称当前专业学制、学费、语言或截止日。', + ru: 'Официальный англоязычный обзор WUST прямо называет International Business Administration среди бакалаврских направлений для иностранцев; текущие срок, цена, язык и дедлайн не утверждаются.', + }, + }, + applicationUrl: null, + riskFlags: ['official_overview_confirms_identity_dynamic_facts_require_admission_guide'], + }), +] + +const scholarshipCandidates = [ + scholarship({ + id: 'sparse-depth-0808-csu-university-scholarship', + institutionSlug: 'central-south-university', + name: { + en: 'Central South University Scholarship for International Students', + zh: '中南大学国际学生奖学金', + ru: 'Стипендия Центрально-Южного университета для иностранных студентов', + }, + scholarshipType: 'university', + scope: 'International master and doctoral applicants who meet the official academic, age and language requirements.', + applicableLevels: ['master', 'doctorate'], + tiers: [ + 'Full scholarship: tuition, on-campus accommodation, and monthly stipend', + 'Partial scholarship: tuition', + ], + evidence: { + officialUrl: 'https://intl.csu.edu.cn/English/Scholarship/University_Scholarship.htm', + sourceTitle: '2026 CSU Scholarship for International Students', + locator: 'Sections 1, 2, 4 and 7: coverage, levels, closed deadline and online application', + quote: 'Full scholarship: coverage of tuition, on-campus accommodation, and a monthly stipend. Partial scholarship: coverage of tuition.', + summary: { + en: 'The official 2026 guide defines full and partial CSU scholarship tiers for international master and doctoral applicants and a direct CSU online application route. The May 31 deadline is closed and is not published as current.', + zh: '2026年官方简章定义了面向国际硕士和博士申请者的中南大学全额与部分奖学金及校方在线申请路线;5月31日截止期已关闭,不展示为当前。', + ru: 'Официальное руководство 2026 года определяет полную и частичную стипендии CSU для иностранных магистров и докторантов; дедлайн 31 мая закрыт и не показывается как текущий.', + }, + }, + }), + scholarship({ + id: 'sparse-depth-0808-gzhmu-guangdong-government-freshmen', + institutionSlug: 'guangzhou-medical-university', + name: { + en: 'Guangdong Government Outstanding International Students Scholarship for Freshmen', + zh: '广东政府来粤留学生新生奖学金', + ru: 'Стипендия правительства Гуандуна для выдающихся новых иностранных студентов', + }, + scholarshipType: 'province', + scope: 'Self-funded international master and doctoral freshmen at Guangzhou Medical University; award paid after registration, while fees remain payable.', + applicableLevels: ['master', 'doctorate'], + tiers: [ + 'Master: CNY 20,000 one-time award', + 'Doctorate: CNY 30,000 one-time award', + ], + evidence: { + officialUrl: 'https://fao.gzhmu.edu.cn/info/1301/9522.htm', + sourceTitle: 'Guangzhou Medical University 2026 International Master and Doctoral Admission Guide', + locator: 'Section IX Scholarships', + quote: 'Doctoral students: RMB30,000 per person for one-time reward. Master\'s students: RMB20,000 per person for one-time reward.', + summary: { + en: 'The 2026 official guide states that self-funded international freshmen may apply after admission: CNY 20,000 for master students and CNY 30,000 for doctoral students, paid once after registration. No independent open deadline is asserted.', + zh: '2026年官方简章说明自费国际新生可在录取后申请:硕士一次性20000元,博士一次性30000元,注册后发放;不声称独立开放截止日。', + ru: 'В официальном руководстве 2026 года указано, что самофинансируемые новые иностранные студенты могут податься после зачисления: 20 000 CNY магистрам и 30 000 CNY докторантам единовременно после регистрации; отдельный дедлайн не утверждается.', + }, + }, + riskFlags: ['post_admission_freshman_award_no_independent_deadline'], + }), + scholarship({ + id: 'sparse-depth-0808-zzu-2026-master-full-scholarship', + institutionSlug: 'zhengzhou-university', + name: { + en: 'ZZU 2026 Master Programs Full Scholarship', + zh: '郑州大学2026年硕士项目全额奖学金', + ru: 'Полная стипендия ZZU для магистерских программ 2026 года', + }, + scholarshipType: 'csc', + scope: 'Eligible non-Chinese master applicants meeting the official academic, age and language requirements, including promoted English-taught programs.', + applicableLevels: ['master'], + tiers: [ + 'Full scholarship: tuition, accommodation, living allowance, and medical insurance', + ], + evidence: { + officialUrl: 'https://international.zzu.edu.cn/en/article/detail?cid=53&detail=65&pid=53', + sourceTitle: 'ZZU 2026 Master Programs with Full Scholarship', + locator: 'Chinese Government Scholarship coverage and eligibility sections', + quote: 'It covers tuition, accommodation, living allowance, and medical insurance.', + summary: { + en: 'ZZU\'s official 2026 page describes a full Chinese Government Scholarship for eligible international master applicants, covering tuition, accommodation, living allowance and medical insurance. The accessible text does not provide a reliable current deadline.', + zh: '郑州大学2026年官方页介绍面向符合条件的国际硕士申请者的中国政府全额奖学金,覆盖学费、住宿、生活补助和医疗保险;可读文本未提供可靠的当前截止日。', + ru: 'Официальная страница ZZU 2026 года описывает полную государственную стипендию для подходящих иностранных магистров, покрывающую обучение, жильё, стипендию на жизнь и страховку; надёжный текущий срок не указан.', + }, + }, + riskFlags: ['current_deadline_not_present_in_accessible_official_text'], + }), +] + +const representedInstitutions = [...new Set( + [...programCandidates, ...scholarshipCandidates].map((candidate) => candidate.institutionSlug), +)].sort() + +const bundle = { + schemaVersion: '2026-08-08.sparse-depth-and-scholarships.v1', + generatedAt: '2026-08-08T17:00:00+08:00', + sourceFiles: [sourceFile], + cities: [], + universities: [], + programCandidates, + scholarshipCandidates, + exclusions: [ + { + institutionSlug: 'tibet-university', + reason: 'Retains its documented limited catalogue: no second individually applicable identity was confirmed from current official sources.', + }, + { + institutionSlug: 'hunan-university-of-technology-and-business', + reason: 'The 2026 official guide exposes exactly International Business and Chinese Language, both already public; no placeholder was added.', + }, + { + institutionSlug: 'wuhan-textile-university', + reason: 'The 2026 official doctoral guide exposes exactly Textile Science and Engineering and Design, both already public.', + }, + { + institutionSlug: 'all-targets', + reason: 'Domestic-student catalogues, group-only routes, expired cycles, invalid dates, search snippets and generated evidence templates were excluded.', + }, + ], + coverageSummary: { + representedInstitutions: representedInstitutions.length, + programCandidates: programCandidates.length, + scholarshipCandidates: scholarshipCandidates.length, + openProgramCycles: 0, + openScholarshipCycles: 0, + officialHttpsPrimaryEvidence: programCandidates.length + scholarshipCandidates.length, + }, +} + +fs.mkdirSync(outputDirectory, { recursive: true }) +fs.writeFileSync(outputPath, `${JSON.stringify(bundle, null, 2)}\n`, 'utf8') + +console.log(JSON.stringify({ + output: path.relative(root, outputPath), + programs: programCandidates.length, + scholarships: scholarshipCandidates.length, + representedInstitutions, +}, null, 2)) diff --git a/scripts/ingestion/classify-candidate-discipline.cjs b/scripts/ingestion/classify-candidate-discipline.cjs index eeee108..e1d1b26 100644 --- a/scripts/ingestion/classify-candidate-discipline.cjs +++ b/scripts/ingestion/classify-candidate-discipline.cjs @@ -26,7 +26,10 @@ function classifyCandidateDiscipline(candidate) { if (/business|econom|finance|account|management|commerce|trade|logistics|mba|经济|金融|管理|商务|贸易|会计|物流/i.test(text)) return 'business' if (/law|legal|法学|法律/i.test(text)) return 'law-ir' if (/educational technology|education|pedagog|curriculum|教育技术学?|教育学|课程与教学|学前教育|特殊教育/i.test(text)) return 'humanities' - if (/art|design|music|drama|film|theatre|美术|艺术|设计|音乐|戏剧|电影/i.test(text)) return 'art-design' + // Match composition, conducting and vocal-study titles before the generic + // Chinese `技术` fallback below. Otherwise a title such as + // `作曲与作曲技术理论` is incorrectly classified as engineering. + if (/art|design|music|composition|conducting|vocal|drama|film|theatre|美术|艺术|设计|音乐|作曲|指挥|声乐|戏剧|电影/i.test(text)) return 'art-design' if (/technology|marine|mining|electrical|electronic|mechanical|automation|技术|海洋|矿业|电气|电子|机械|自动化/i.test(text)) return 'engineering' if (/science|mathemat|physics|chemistry|biology|environment|科学|数学|物理|化学|生物|环境/i.test(text)) return 'science' if (/history|literature|language|education|psychology|历史|文学|语言|教育|心理/i.test(text)) return 'humanities' diff --git a/scripts/ingestion/integrate-multiversity-expansion-wave-2026-08-03.cjs b/scripts/ingestion/integrate-multiversity-expansion-wave-2026-08-03.cjs index b17b910..266944b 100644 --- a/scripts/ingestion/integrate-multiversity-expansion-wave-2026-08-03.cjs +++ b/scripts/ingestion/integrate-multiversity-expansion-wave-2026-08-03.cjs @@ -178,7 +178,9 @@ function cycleUnion(left = [], right = []) { } function mergeProgram(left, right) { - const primary = candidateScore(right) > candidateScore(left) ? right : left + const primary = left.candidateId === right.candidateId + ? right + : candidateScore(right) > candidateScore(left) ? right : left const secondary = primary === left ? right : left return { ...primary, @@ -203,7 +205,9 @@ function mergeProgram(left, right) { } function mergeScholarship(left, right) { - const primary = scholarshipScore(right) > scholarshipScore(left) ? right : left + const primary = left.candidateId === right.candidateId + ? right + : scholarshipScore(right) > scholarshipScore(left) ? right : left const secondary = primary === left ? right : left const tiers = [...new Set([...(primary.funding?.tiers ?? []), ...(secondary.funding?.tiers ?? [])])] return { @@ -228,6 +232,9 @@ function mergeScholarship(left, right) { status: tiers.length > 0 ? 'known' : primary.funding?.status ?? secondary.funding?.status, tiers, }, + applicationUrl: Object.hasOwn(right, 'applicationUrl') + ? right.applicationUrl + : primary.applicationUrl ?? secondary.applicationUrl, cycles: cycleUnion(primary.cycles, secondary.cycles), additionalEvidence: evidenceUnion(primary, secondary), sourceFiles: [...new Set([...(primary.sourceFiles ?? []), ...(secondary.sourceFiles ?? [])])].sort(), diff --git a/scripts/quality/synthetic-regression.ts b/scripts/quality/synthetic-regression.ts index 243840a..6d8e0bb 100644 --- a/scripts/quality/synthetic-regression.ts +++ b/scripts/quality/synthetic-regression.ts @@ -70,6 +70,13 @@ function digest(value: Buffer): string { return createHash('sha256').update(value).digest('hex') } +export function canonicalSyntheticFixtureBytes(value: Buffer): Buffer { + // These fixtures are text/HTML/JSON. Git may materialize them with CRLF on + // Windows, so the integrity contract hashes canonical UTF-8 with LF endings. + // Content changes remain protected while checkout policy stays irrelevant. + return Buffer.from(value.toString('utf8').replaceAll('\r\n', '\n'), 'utf8') +} + function sorted(values: readonly string[]): string[] { return [...values].sort((left, right) => left.localeCompare(right)) } @@ -207,7 +214,9 @@ export function runSyntheticRegression( if (fixture.officialGoldEligible !== false) { throw new Error(`${fixture.fixtureId}: synthetic fixture cannot be official gold`) } - const bytes = readFileSync(fixturePath(projectRoot, fixture.inputPath)) + const bytes = canonicalSyntheticFixtureBytes( + readFileSync(fixturePath(projectRoot, fixture.inputPath)), + ) if (digest(bytes) !== fixture.sha256) { throw new Error(`${fixture.fixtureId}: fixture checksum mismatch`) } diff --git a/scripts/validate-data.ts b/scripts/validate-data.ts index b93567e..925cecd 100644 --- a/scripts/validate-data.ts +++ b/scripts/validate-data.ts @@ -1,6 +1,7 @@ import { readFileSync } from 'node:fs' import { join } from 'node:path' import { bundleSchema } from '../src/lib/data/schema' +import { resolveDataValidationDate } from '../src/lib/data/freshness' const read = (name: string) => JSON.parse(readFileSync(join(process.cwd(), 'content', 'data', `${name}.json`), 'utf8')) const result = bundleSchema.safeParse({ sources: read('sources'), cities: read('cities'), universities: read('universities'), programs: read('programs'), admissionCycles: read('admission-cycles'), scholarships: read('scholarships') }) @@ -11,7 +12,7 @@ if (!result.success) { } const data = result.data -const today = (process.env.DATA_VALIDATION_DATE || new Date().toISOString()).slice(0, 10) +const today = resolveDataValidationDate(process.env.DATA_VALIDATION_DATE) const audited = [...data.cities, ...data.universities, ...data.programs, ...data.admissionCycles, ...data.scholarships] const overdueVerified = audited.filter((item) => item.status === 'verified' && item.reviewAfter < today) if (overdueVerified.length) { diff --git a/scripts/validate-maintenance.mjs b/scripts/validate-maintenance.mjs index 747e51e..8d3af93 100644 --- a/scripts/validate-maintenance.mjs +++ b/scripts/validate-maintenance.mjs @@ -74,6 +74,21 @@ requirePattern( /37 18 \* \* \*/, 'Daily D1 backups are required.', ) +requirePattern( + backup, + /node --disable-warning=MODULE_TYPELESS_PACKAGE_JSON scripts\/cloudflare\/backup-preflight\.ts --phase credentials[\s\S]*Install dependencies/, + 'The backup must validate configuration before installing dependencies.', +) +requirePattern( + backup, + /Verify read access to both remote D1 databases/, + 'The backup must verify both remote D1 resources before export.', +) +requirePattern( + backup, + /if:\s*\$\{\{ failure\(\) \}\}[\s\S]*does \*\*not\*\* satisfy/, + 'Failed backup runs must publish explicit incomplete-checkpoint guidance.', +) requirePattern( restore, /15 1,4,7,10 \*/, @@ -89,6 +104,11 @@ requirePattern( /api\/v1\/releases\/current/, 'Vercel alias promotion must smoke-test the public release API.', ) +requirePattern( + alias, + /VERCEL_TOKEN is not configured[\s\S]*exit 1/, + 'A missing Vercel token must fail the alias workflow instead of producing a false green result.', +) const programs = JSON.parse(await text('content/data/programs.json')) const currentPrograms = programs.filter( diff --git a/src/app/[locale]/cities/page.tsx b/src/app/[locale]/cities/page.tsx index 1b372f7..f032e98 100644 --- a/src/app/[locale]/cities/page.tsx +++ b/src/app/[locale]/cities/page.tsx @@ -1,18 +1,27 @@ import { notFound } from 'next/navigation' -import { Badge, Card, LinkButton, PageHero, SectionHeading } from '@/components/ui' -import { CityConstellation } from '@/components/features/CityConstellation' +import { CityExplorer } from '@/components/features/CityExplorer' +import { PageHero, SectionHeading } from '@/components/ui' import { getMessages } from '@/i18n/messages' -import { localize } from '@/lib/data/format' -import { regionLabels } from '@/lib/data/labels' +import { + parseCityExplorerSearchParams, + type CityExplorerSearchParams, +} from '@/lib/city-explorer' import { getCatalogData, getData } from '@/lib/data/load' import { pageMetadata, requireLocale } from '@/lib/site' export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) { const locale = requireLocale((await params).locale) || 'en'; const m = getMessages(locale); return pageMetadata(locale, m.cities.title, m.cities.intro, 'cities') } -export default async function CitiesPage({ params }: { params: Promise<{ locale: string }> }) { +export default async function CitiesPage({ + params, + searchParams, +}: { + params: Promise<{ locale: string }> + searchParams: Promise +}) { const locale = requireLocale((await params).locale) if (!locale) notFound() const messages = getMessages(locale) + const explorerState = parseCityExplorerSearchParams(await searchParams) const catalogData = await getCatalogData() const stableDirectory = getData() @@ -22,13 +31,19 @@ export default async function CitiesPage({ params }: { params: Promise<{ locale: for (const city of catalogData.cities) citiesById.set(city.id, city) const cities = [...citiesById.values()] + // Only serialize fields used by the interactive explorer. City editorial + // content remains on detail routes instead of inflating every list request. + const explorerCities = cities.map(({ id, slug, name, province, region, coordinates }) => ({ + id, slug, name, province, region, coordinates, + })) + const universitiesById = new Map(stableDirectory.universities.map((university) => [university.id, university])) for (const university of catalogData.universities) universitiesById.set(university.id, university) const universities = [...universitiesById.values()] - const universityCounts = Object.fromEntries(cities.map((city) => [ - city.id, - universities.filter((university) => university.cityId === city.id).length, - ])) + const universityCounts: Record = Object.fromEntries(cities.map((city) => [city.id, 0])) + for (const university of universities) { + universityCounts[university.cityId] = (universityCounts[university.cityId] ?? 0) + 1 + } return <>
- +

{messages.cities.officialMapService} ↗

-
-
- {cities.map((city) => -
- {city.region ? regionLabels(locale)[city.region] : messages.common.unknown} - {universityCounts[city.id]} {messages.nav.universities} -
-

{localize(city.name, locale)}

-

{localize(city.overview, locale)}

-
- - {messages.common.viewDetails} → - -
-
)} -
-
} diff --git a/src/app/[locale]/guides/[slug]/page.tsx b/src/app/[locale]/guides/[slug]/page.tsx index a31ebe3..51dfc7f 100644 --- a/src/app/[locale]/guides/[slug]/page.tsx +++ b/src/app/[locale]/guides/[slug]/page.tsx @@ -1,11 +1,149 @@ +import Link from 'next/link' import { notFound } from 'next/navigation' import { Badge, Card, PageHero } from '@/components/ui' import { launchLocales } from '@/i18n/config' +import { getCityGuideExperience } from '@/i18n/city-guide-experience' import { getMessages } from '@/i18n/messages' import { formatDate, localize } from '@/lib/data/format' +import { getGuideEnhancement } from '@/lib/guide-experience' import { getGuide, guides } from '@/lib/guides' -import { pageMetadata, requireLocale } from '@/lib/site' +import { pageMetadata, requireLocale, siteUrl } from '@/lib/site' -export function generateStaticParams() { return launchLocales.flatMap((locale) => guides.map(({ slug }) => ({ locale, slug }))) } -export async function generateMetadata({ params }: { params: Promise<{ locale: string; slug: string }> }) { const { locale: raw, slug } = await params; const locale = requireLocale(raw) || 'en'; const guide = getGuide(slug); if (!guide) return {}; return pageMetadata(locale, localize(guide.title, locale), localize(guide.summary, locale), `guides/${slug}`) } -export default async function GuideDetail({ params }: { params: Promise<{ locale: string; slug: string }> }) { const { locale: raw, slug } = await params; const locale = requireLocale(raw); if (!locale) notFound(); const guide = getGuide(slug); if (!guide) notFound(); const messages = getMessages(locale); return <>
{guide.sections.map((section, sectionIndex) =>
0{sectionIndex + 1}

{localize(section.title, locale)}

    {section.items.map((item, index) =>
  1. {localize(item, locale)}
  2. )}
)}

{messages.guide.usingTitle}

{messages.common.authoritativeNotice}

{messages.guide.disclaimer}

} +export function generateStaticParams() { + return launchLocales.flatMap((locale) => guides.map(({ slug }) => ({ locale, slug }))) +} + +export async function generateMetadata({ params }: { params: Promise<{ locale: string; slug: string }> }) { + const { locale: raw, slug } = await params + const locale = requireLocale(raw) || 'en' + const guide = getGuide(slug) + if (!guide) return {} + return pageMetadata(locale, localize(guide.title, locale), localize(guide.summary, locale), `guides/${slug}`) +} + +function jsonLd(value: unknown): string { + return JSON.stringify(value).replace(/ }) { + const { locale: raw, slug } = await params + const locale = requireLocale(raw) + if (!locale) notFound() + + const guide = getGuide(slug) + if (!guide) notFound() + + const messages = getMessages(locale) + const experience = getCityGuideExperience(locale).guides + const enhancement = getGuideEnhancement(guide.slug) + const updatedAt = enhancement?.updatedAt ?? guide.updatedAt + const readTime = enhancement?.readTimeMinutes ?? Math.max(4, guide.sections.length * 2) + const chapters = enhancement?.chapters ?? guide.sections.map((section, index) => ({ + id: `step-${index + 1}`, + title: section.title, + introduction: null, + items: section.items, + })) + const canonicalUrl = new URL(`/${locale}/guides/${guide.slug}`, siteUrl).toString() + const articleStructuredData = { + '@context': 'https://schema.org', + '@type': 'Article', + headline: localize(guide.title, locale), + description: localize(guide.summary, locale), + datePublished: guide.updatedAt, + dateModified: updatedAt, + inLanguage: locale, + mainEntityOfPage: canonicalUrl, + author: { '@type': 'Organization', name: messages.brand }, + publisher: { '@type': 'Organization', name: messages.brand }, + articleSection: chapters.map((chapter) => localize(chapter.title, locale)), + } + const faqStructuredData = enhancement?.faq.length ? { + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: enhancement.faq.map((item) => ({ + '@type': 'Question', + name: localize(item.question, locale), + acceptedAnswer: { '@type': 'Answer', text: localize(item.answer, locale) }, + })), + } : null + + return <> +