{ "schemaVersion": 1, "environment": "production", "releaseTargets": [ "h5" ], "artifactIntegrityNote": "Every check must record artifactSha256. Generate it with sha256sum or shasum -a 256; launch gate rejects missing, empty, or hash-mismatched artifacts. The H5 release manifest also records full-directory treeSha256 values, which deployment verifies against the candidate release.", "commit": "replace-with-deployed-git-sha", "target": { "apiBaseUrl": "replace-with-real-production-api-https-url", "studentH5Url": "replace-with-real-production-student-h5-https-url", "tenantAdminH5Url": "replace-with-real-production-tenant-admin-h5-https-url", "platformAdminH5Url": "replace-with-real-production-platform-admin-h5-https-url" }, "liveH5": { "releaseManifestArtifact": "launch-artifacts/taro-h5-release-manifest.json", "releaseManifestSha256": "replace-with-64-char-sha256" }, "checks": [ { "id": "readiness.production.env", "status": "pass", "command": "npm run readiness:production -- --json > docs/refactor/launch-artifacts/readiness-production.json", "completedAt": "2026-06-30T10:00:00+08:00", "artifact": "launch-artifacts/readiness-production.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "blocker": 0 } }, { "id": "readiness.production.db", "status": "pass", "command": "npm run readiness:production:db -- --json > docs/refactor/launch-artifacts/readiness-production-db.json", "completedAt": "2026-06-30T10:05:00+08:00", "artifact": "launch-artifacts/readiness-production-db.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "blocker": 0 } }, { "id": "db.migration-history", "status": "pass", "command": "node -e \"const fs=require('fs'),crypto=require('crypto');const source='docs/refactor/launch-artifacts/readiness-production-db.json';const bytes=fs.readFileSync(source);const readiness=JSON.parse(bytes);const check=readiness.checks.find(item=>item.id==='db.migrations.current'&&item.status==='pass');if(!check)throw new Error('readiness db.migrations.current pass evidence is missing');const d=check.details||{};const payload={schemaVersion:1,status:'pass',failed:0,latestRepositoryMigration:String(d.expectedVersion||''),latestAppliedMigration:String(d.latestAppliedVersion||''),missingMigrations:d.expectedVersionApplied===true?[]:[String(d.expectedVersion||'')],readinessArtifactSha256:crypto.createHash('sha256').update(bytes).digest('hex')};fs.writeFileSync('docs/refactor/launch-artifacts/db-migration-history.json',JSON.stringify(payload,null,2)+'\\n')\"", "completedAt": "2026-06-30T10:06:00+08:00", "artifact": "launch-artifacts/db-migration-history.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "schemaVersion": 1, "status": "pass", "failed": 0, "latestRepositoryMigration": "replace-with-repository-latest-migration-version", "latestAppliedMigration": "replace-with-production-latest-applied-migration-version", "missingMigrations": [], "readinessArtifactSha256": "replace-with-64-char-sha256" } }, { "id": "postgres.tuning-evidence", "status": "pass", "command": "PG_TUNING_PROFILE=shared-host npm run perf:postgres:evidence -- --strict --json > docs/refactor/launch-artifacts/postgres-tuning-evidence.json", "completedAt": "2026-06-30T10:08:00+08:00", "artifact": "launch-artifacts/postgres-tuning-evidence.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "status": "pass", "profile": "shared-host", "failures": 0, "pgStatStatementsAvailable": true, "pendingRestart": 0 } }, { "id": "auth.remote-smoke", "status": "pass", "command": "AUTH_SMOKE_REQUIRE_ADMIN_TOKENS=true npm run smoke:auth:remote > docs/refactor/launch-artifacts/auth-remote-smoke.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:auth.remote-smoke' >> docs/refactor/launch-artifacts/auth-remote-smoke.log", "completedAt": "2026-06-30T10:10:00+08:00", "artifact": "launch-artifacts/auth-remote-smoke.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0, "requireAdminTokens": true } }, { "id": "auth.platform-admin-bootstrap", "status": "pass", "command": "Run npm run bootstrap:platform-admin dry-run, then npm run bootstrap:platform-admin -- --apply --confirm BOOTSTRAP_FIRST_PLATFORM_ADMIN, verify the platform.admin.bootstrapped audit event, and run npm run smoke:auth:remote with AUTH_SMOKE_EXPECTED_PLATFORM_ADMIN_USER_ID set to the same Auth identity; save the three raw artifacts and generate this redacted summary with SHA-256 identity bindings", "completedAt": "2026-06-30T10:10:30+08:00", "artifact": "launch-artifacts/platform-admin-bootstrap.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "schemaVersion": 1, "status": "pass", "failed": 0, "dryRunVerified": true, "applied": true, "adminUserIdSha256": "replace-with-sha256-of-bootstrap-auth-user-uuid", "authSmokeExpectedUserIdSha256": "replace-with-same-sha256", "identityMatches": true, "auditEvent": "platform.admin.bootstrapped", "auditVerified": true, "dryRunArtifactSha256": "replace-with-64-char-sha256", "applyArtifactSha256": "replace-with-64-char-sha256", "authSmokeArtifactSha256": "replace-with-64-char-sha256", "auditArtifactSha256": "replace-with-64-char-sha256" } }, { "id": "auth.sms-pnvs-diagnostics", "status": "pass", "command": "PNVS_TENANT_ID=00000000-0000-0000-0000-000000000001 npm run diagnose:aliyun-pnvs > docs/refactor/launch-artifacts/sms-pnvs-diagnostics.json", "completedAt": "2026-06-30T10:11:00+08:00", "artifact": "launch-artifacts/sms-pnvs-diagnostics.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "ok": true, "env": { "providerMatchesPnvs": true }, "provider": { "found": true, "provider": "aliyun-pnvs", "status": "active", "publicConfig": { "templateParamHasCodePlaceholder": true } }, "secret": { "found": true, "accessKeyIdLength": 16, "accessKeySecretLength": 32 } } }, { "id": "auth.sms-pnvs-remote-smoke", "status": "pass", "command": "SMS_SMOKE_API_BASE_URL=https://api.example.com SMS_SMOKE_TENANT_ID=00000000-0000-0000-0000-000000000001 SMS_SMOKE_PHONE=replace-with-real-phone SMS_SMOKE_ORIGIN=https://admin.example.com npm run smoke:sms-login:remote -- --write docs/refactor/launch-artifacts/sms-pnvs-remote-smoke.json", "completedAt": "2026-06-30T10:12:00+08:00", "artifact": "launch-artifacts/sms-pnvs-remote-smoke.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0, "provider": "aliyun-pnvs", "loginVerified": true, "authMe": true } }, { "id": "rls.tenant-isolation", "status": "pass", "command": "DATABASE_URL= npm run test:rls > docs/refactor/launch-artifacts/rls-tenant-isolation.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:rls.tenant-isolation' >> docs/refactor/launch-artifacts/rls-tenant-isolation.log", "completedAt": "2026-06-30T10:20:00+08:00", "artifact": "launch-artifacts/rls-tenant-isolation.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0, "databaseEnvironment": "ci", "databaseSource": "isolated-production-schema-or-sanitized-snapshot-clone" } }, { "id": "db.tenant-foreign-key-audit", "status": "pass", "command": "DATABASE_URL= npm run audit:tenant-foreign-keys -- --confirm=SMOKE_SEED_LOCAL_OR_CI_ONLY --write=docs/refactor/launch-artifacts/tenant-foreign-key-audit.json", "completedAt": "2026-06-30T10:25:00+08:00", "artifact": "launch-artifacts/tenant-foreign-key-audit.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "status": "pass", "kind": "tenant-foreign-key-audit", "safety": { "databaseEnvironment": "ci" }, "schema": { "schemaMatches": true, "relationCount": 189, "exceptionCount": 3 }, "data": { "auditedRelations": 189, "invalidRelations": 0 } } }, { "id": "migration.pb-production-dry-run", "status": "pass", "command": "npm run pb:import:dry-run -- --profile=production --json --fail-on-warnings > docs/refactor/launch-artifacts/pb-production-dry-run.json", "completedAt": "2026-06-30T10:30:00+08:00", "artifact": "launch-artifacts/pb-production-dry-run.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "blocker": 0, "warning": 0, "migrationProfile": "production", "requiredCollectionsMissing": 0, "criticalFieldCoverageWarnings": 0 } }, { "id": "migration.pb-import-validate", "status": "pass", "command": "FAIL_ON_WARNINGS=true npm run pb:import:validate > docs/refactor/launch-artifacts/pb-import-validate.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:migration.pb-import-validate' >> docs/refactor/launch-artifacts/pb-import-validate.log", "completedAt": "2026-06-30T10:40:00+08:00", "artifact": "launch-artifacts/pb-import-validate.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "fail": 0 } }, { "id": "migration.pb-import-sample", "status": "pass", "command": "PB_SAMPLE_WRITE_REPORT=true npm run pb:import:sample > docs/refactor/launch-artifacts/pb-import-sample.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:migration.pb-import-sample' >> docs/refactor/launch-artifacts/pb-import-sample.log", "completedAt": "2026-06-30T10:45:00+08:00", "artifact": "launch-artifacts/pb-import-sample.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "fail": 0, "warn": 0, "skip": 0, "pass": 0 } }, { "id": "performance.api-real-data-read", "status": "pass", "command": "PERF_START_SERVER=false PERF_API_BASE=https://api.example.com PERF_DURATION_SECONDS=300 PERF_CONCURRENCY=30 PERF_RAMP_SECONDS=30 PERF_INCLUDE_WRITES=false npm run perf:api:local > docs/refactor/launch-artifacts/api-real-data-read-benchmark.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:performance.api-real-data-read' >> docs/refactor/launch-artifacts/api-real-data-read-benchmark.log", "completedAt": "2026-06-30T10:48:00+08:00", "artifact": "launch-artifacts/api-real-data-read-benchmark.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "errors": 0, "errorRate": 0, "p95Ms": 0, "p99Ms": 0, "concurrency": 30, "durationSeconds": 300, "includeWrites": false } }, { "id": "performance.api-real-data-mixed", "status": "pass", "command": "PERF_START_SERVER=false PERF_API_BASE=https://api.example.com PERF_DURATION_SECONDS=120 PERF_CONCURRENCY=50 PERF_RAMP_SECONDS=15 PERF_INCLUDE_WRITES=true PERF_PRACTICE_FLOW_RATIO=0.1 PERF_AUTH_MODE=app_session npm run perf:api:local > docs/refactor/launch-artifacts/api-real-data-mixed-benchmark.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:performance.api-real-data-mixed' >> docs/refactor/launch-artifacts/api-real-data-mixed-benchmark.log", "completedAt": "2026-06-30T10:49:00+08:00", "artifact": "launch-artifacts/api-real-data-mixed-benchmark.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "errors": 0, "errorRate": 0, "p95Ms": 0, "p99Ms": 0, "concurrency": 50, "durationSeconds": 120, "includeWrites": true } }, { "id": "performance.tenant-students-100k", "status": "pass", "command": "output_dir=$(mktemp -d) && DATABASE_URL= npm run perf:tenant-students:evidence -- --count=100000 --batch-size=10000 --iterations=20 --warmup-iterations=3 --output-dir=\"$output_dir\" --confirm=SMOKE_SEED_LOCAL_OR_CI_ONLY && cp \"$output_dir\"/tenant-student-capacity-*.json docs/refactor/launch-artifacts/tenant-student-capacity-100k.json", "completedAt": "2026-06-30T10:49:10+08:00", "artifact": "launch-artifacts/tenant-student-capacity-100k.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "databaseEnvironment": "test", "fixture": { "platformUsers": 100000, "tenantMemberships": 100000, "studentProfiles": 100000 }, "caseCount": 5, "deepCursorApproximateOffset": 90000, "firstPageP95Ms": 0, "deepCursorP95Ms": 0, "searchP95MaxMs": 0, "keysetIndexUsed": true, "trigramIndexUsed": true, "cleanupVerified": true, "remainingManagedUsers": 0 } }, { "id": "api.dynamic-tenant-cors-smoke", "status": "pass", "command": "TENANT_CORS_API_BASE_URL=https://api.example.com TENANT_CORS_ACTIVE_ORIGIN=https://active-tenant.example.com TENANT_CORS_DISABLED_ORIGIN=https://disabled-tenant.example.com TENANT_CORS_UNKNOWN_ORIGIN=https://unknown-tenant.example.com npm run smoke:tenant-cors:remote -- --write docs/refactor/launch-artifacts/tenant-cors-remote-smoke.json", "completedAt": "2026-06-30T10:49:15+08:00", "artifact": "launch-artifacts/tenant-cors-remote-smoke.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0, "activeTenantOriginAllowed": true, "unknownOriginDenied": true, "disabledOriginDenied": true, "noOriginHealthAllowed": true } }, { "id": "deploy.linux-systemd-verify", "status": "pass", "command": "(systemd-analyze verify /etc/systemd/system/tiku-api.service /etc/systemd/system/tiku-worker@.service /etc/systemd/system/tiku-worker-job@.service /etc/systemd/system/tiku-worker-*.service /etc/systemd/system/tiku-worker-*.timer && systemctl is-active tiku-api.service tiku-workers.target && systemctl list-timers 'tiku-worker-*' --no-legend && echo 'TIKU_LAUNCH_GATE_SUCCESS:deploy.linux-systemd-verify') > docs/refactor/launch-artifacts/linux-systemd-verify.log", "completedAt": "2026-06-30T10:49:20+08:00", "artifact": "launch-artifacts/linux-systemd-verify.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0, "apiServiceActive": true, "workerTargetActive": true, "workerJobServices": 9, "enabledTimers": 6 } }, { "id": "backup.restore-drill", "status": "pass", "command": "RESTORE_DRILL_VERIFY_COMMAND= && eval \"$RESTORE_DRILL_VERIFY_COMMAND\" > docs/refactor/launch-artifacts/backup-restore-verification.log && node -e \"const fs=require('fs'),crypto=require('crypto');const required=name=>{const value=String(process.env[name]||'').trim();if(!value)throw new Error(name+' is required');return value};const number=name=>{const value=Number(required(name));if(!Number.isFinite(value)||value<0)throw new Error(name+' must be non-negative');return value};const verification=fs.readFileSync('docs/refactor/launch-artifacts/backup-restore-verification.log');const payload={schemaVersion:1,status:'pass',failed:0,snapshotId:required('RESTORE_DRILL_SNAPSHOT_ID'),restoreTarget:required('RESTORE_DRILL_TARGET'),isolated:true,integrityVerified:true,rtoMinutes:number('RESTORE_DRILL_RTO_MINUTES'),rpoMinutes:number('RESTORE_DRILL_RPO_MINUTES'),verificationArtifactSha256:crypto.createHash('sha256').update(verification).digest('hex')};fs.writeFileSync('docs/refactor/launch-artifacts/backup-restore-drill.json',JSON.stringify(payload,null,2)+'\\n')\"", "completedAt": "2026-06-30T10:49:25+08:00", "artifact": "launch-artifacts/backup-restore-drill.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "schemaVersion": 1, "status": "pass", "failed": 0, "snapshotId": "replace-with-provider-snapshot-or-backup-id", "restoreTarget": "replace-with-isolated-restore-target", "isolated": true, "integrityVerified": true, "rtoMinutes": 0, "rpoMinutes": 0, "verificationArtifactSha256": "replace-with-64-char-sha256" } }, { "id": "api.launch-persona-smoke", "status": "pass", "command": "LAUNCH_SMOKE_AUTH_MODE=app_session npm run smoke:launch-persona -- --write docs/refactor/launch-artifacts/launch-persona-smoke.json --write-md docs/refactor/launch-artifacts/launch-persona-smoke.md > docs/refactor/launch-artifacts/launch-persona-smoke.log", "completedAt": "2026-06-30T10:49:30+08:00", "artifact": "launch-artifacts/launch-persona-smoke.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "status": "pass", "authMode": "app_session", "student": { "status": "pass", "result": { "entitlement": { "isSvip": true }, "practice": { "questionCount": 3 }, "favorite": { "favoriteCount": 1, "reviewSessionId": "replace-with-favorite-review-session-id" }, "wrongReview": { "reviewPlanCount": 0 } } }, "tenantAdmin": { "status": "pass", "result": { "guards": { "studentDashboardDenied": "TENANT_ADMIN_REQUIRED", "crossTenantDenied": "AUTH_TENANT_MISMATCH" } } }, "platformAdmin": { "status": "pass", "result": { "guards": { "studentPlatformDenied": "PLATFORM_ADMIN_REQUIRED" } } } } }, { "id": "api.integration", "status": "pass", "command": "npm run test:api > docs/refactor/launch-artifacts/api-integration.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:api.integration' >> docs/refactor/launch-artifacts/api-integration.log", "completedAt": "2026-06-30T10:50:00+08:00", "artifact": "launch-artifacts/api-integration.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0 } }, { "id": "worker.assets", "status": "pass", "command": "npm run test:worker:assets > docs/refactor/launch-artifacts/worker-assets.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:worker.assets' >> docs/refactor/launch-artifacts/worker-assets.log", "completedAt": "2026-06-30T11:00:00+08:00", "artifact": "launch-artifacts/worker-assets.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0 } }, { "id": "worker.commerce", "status": "pass", "command": "npm run test:worker:commerce > docs/refactor/launch-artifacts/worker-commerce.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:worker.commerce' >> docs/refactor/launch-artifacts/worker-commerce.log", "completedAt": "2026-06-30T11:10:00+08:00", "artifact": "launch-artifacts/worker-commerce.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0 } }, { "id": "worker.platform-billing", "status": "pass", "command": "npm run test:worker:platform-billing > docs/refactor/launch-artifacts/worker-platform-billing.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:worker.platform-billing' >> docs/refactor/launch-artifacts/worker-platform-billing.log", "completedAt": "2026-06-30T11:15:00+08:00", "artifact": "launch-artifacts/worker-platform-billing.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0 } }, { "id": "worker.platform-dunning", "status": "pass", "command": "npm run test:worker:platform-dunning > docs/refactor/launch-artifacts/worker-platform-dunning.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:worker.platform-dunning' >> docs/refactor/launch-artifacts/worker-platform-dunning.log", "completedAt": "2026-06-30T11:18:00+08:00", "artifact": "launch-artifacts/worker-platform-dunning.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0 } }, { "id": "worker.imports", "status": "pass", "command": "npm run test:worker:imports > docs/refactor/launch-artifacts/worker-imports.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:worker.imports' >> docs/refactor/launch-artifacts/worker-imports.log", "completedAt": "2026-06-30T11:20:00+08:00", "artifact": "launch-artifacts/worker-imports.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0 } }, { "id": "worker.public-banks", "status": "pass", "command": "npm run test:worker:public-banks > docs/refactor/launch-artifacts/worker-public-banks.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:worker.public-banks' >> docs/refactor/launch-artifacts/worker-public-banks.log", "completedAt": "2026-06-30T11:30:00+08:00", "artifact": "launch-artifacts/worker-public-banks.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0 } }, { "id": "taro.check", "status": "pass", "command": "npm run check:taro > docs/refactor/launch-artifacts/taro-check.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:taro.check' >> docs/refactor/launch-artifacts/taro-check.log", "completedAt": "2026-06-30T11:40:00+08:00", "artifact": "launch-artifacts/taro-check.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0 } }, { "id": "taro.supply-chain", "status": "pass", "command": "npm --silent run audit:taro:supply-chain -- --json > docs/refactor/launch-artifacts/taro-supply-chain.json", "completedAt": "2026-06-30T11:45:00+08:00", "artifact": "launch-artifacts/taro-supply-chain.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "schemaVersion": 1, "status": "pass-with-reviewed-toolchain-risk", "securedBundleDependencies": { "swiper": "12.1.2", "lodash-es": "4.18.1" }, "audit": { "counts": { "critical": 3, "high": 10 } }, "reviewedInvalidEdgeCount": 4, "riskBoundaryPresent": true, "riskControlCount": 4 } }, { "id": "taro.build.student", "status": "pass", "command": "npm run build:taro:h5:student > docs/refactor/launch-artifacts/taro-build-student.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:taro.build.student' >> docs/refactor/launch-artifacts/taro-build-student.log", "completedAt": "2026-06-30T11:50:00+08:00", "artifact": "launch-artifacts/taro-build-student.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0 } }, { "id": "taro.build.tenant", "status": "pass", "command": "npm run build:taro:h5:tenant > docs/refactor/launch-artifacts/taro-build-tenant.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:taro.build.tenant' >> docs/refactor/launch-artifacts/taro-build-tenant.log", "completedAt": "2026-06-30T12:00:00+08:00", "artifact": "launch-artifacts/taro-build-tenant.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0 } }, { "id": "taro.build.platform", "status": "pass", "command": "npm run build:taro:h5:platform > docs/refactor/launch-artifacts/taro-build-platform.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:taro.build.platform' >> docs/refactor/launch-artifacts/taro-build-platform.log", "completedAt": "2026-06-30T12:10:00+08:00", "artifact": "launch-artifacts/taro-build-platform.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "failed": 0 } }, { "id": "taro.h5-static-smoke", "status": "pass", "command": "npm --silent run smoke:taro:h5 -- --json > docs/refactor/launch-artifacts/taro-h5-static-smoke.json", "completedAt": "2026-06-30T12:12:00+08:00", "artifact": "launch-artifacts/taro-h5-static-smoke.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "fail": 0, "portals": 3, "tenantResolveRequests": 3 } }, { "id": "taro.h5-interaction-smoke", "status": "pass", "command": "npm --silent run smoke:taro:h5:interaction -- --json > docs/refactor/launch-artifacts/taro-h5-interaction-smoke.json", "completedAt": "2026-06-30T12:13:00+08:00", "artifact": "launch-artifacts/taro-h5-interaction-smoke.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "fail": 0, "pass": 32, "mockApi": { "keyRequests": { "answers": 1, "favorites": 2, "ordersCreated": 1, "paymentsCreated": 1, "orderStatus": 1, "tenantResolve": 3, "tenantContentWrites": 1, "tenantAdminWrites": 1, "crmWrites": 1, "commissionWrites": 1, "platformAdminWrites": 1 } } } }, { "id": "taro.h5-release-guardrails", "status": "pass", "command": "node scripts/taro-h5-release-guardrails-test.js --require-dist --require-runtime-config --json > docs/refactor/launch-artifacts/taro-h5-release-guardrails.json", "completedAt": "2026-06-30T12:15:00+08:00", "artifact": "launch-artifacts/taro-h5-release-guardrails.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "fail": 0, "warn": 0 } }, { "id": "taro.h5-release-manifest", "status": "pass", "command": "npm --silent run manifest:taro:h5 -- --require-dist --require-runtime-config --json --write docs/refactor/launch-artifacts/taro-h5-release-manifest.json > docs/refactor/launch-artifacts/taro-h5-release-manifest.stdout.json", "completedAt": "2026-06-30T12:16:00+08:00", "artifact": "launch-artifacts/taro-h5-release-manifest.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "fail": 0, "warn": 0, "portals": 3, "distReady": 3, "runtimeConfigs": 3, "treeHashes": 3 } }, { "id": "audit.runtime", "status": "pass", "command": "npm run audit:runtime > docs/refactor/launch-artifacts/audit-runtime.log && echo 'TIKU_LAUNCH_GATE_SUCCESS:audit.runtime' >> docs/refactor/launch-artifacts/audit-runtime.log", "completedAt": "2026-06-30T12:20:00+08:00", "artifact": "launch-artifacts/audit-runtime.log", "artifactSha256": "replace-with-64-char-sha256", "summary": { "critical": 0, "high": 0 } }, { "id": "security.repo-scan", "status": "pass", "command": "npm run security:repo -- --json > docs/refactor/launch-artifacts/repo-security-scan.json", "completedAt": "2026-06-30T12:22:00+08:00", "artifact": "launch-artifacts/repo-security-scan.json", "artifactSha256": "replace-with-64-char-sha256", "summary": { "critical": 0, "high": 0 } }, { "id": "security.codex-scan", "status": "replace-with-pass-after-real-scan", "command": "Run the real @codex-security scan only when the tool is exposed; save findings to docs/refactor/launch-artifacts/codex-security.md and append a final line TIKU_LAUNCH_GATE_SUCCESS:security.codex-scan only after the scan exits successfully", "completedAt": "replace-with-real-scan-time", "artifact": "launch-artifacts/codex-security.md", "artifactSha256": "replace-with-64-char-sha256", "summary": { "critical": "replace-with-number", "high": "replace-with-number" } } ], "attestations": [ { "id": "backup.snapshot", "status": "approved", "approver": "replace-with-owner", "approvedAt": "2026-06-30T13:00:00+08:00", "notes": "Production database backup/snapshot ID and restore test notes." }, { "id": "rollback.plan", "status": "approved", "approver": "replace-with-owner", "approvedAt": "2026-06-30T13:05:00+08:00", "notes": "Old PocketBase read-only snapshot, DNS rollback path and responsible people are confirmed." }, { "id": "migration.sampling", "status": "approved", "approver": "replace-with-owner", "approvedAt": "2026-06-30T13:10:00+08:00", "notes": "Real users, questions, orders, entitlements, assets and learning records sampled; pb:import:sample warnings, skips and manual review rows have owner-approved handling conclusions." }, { "id": "provider.production-accounts", "status": "approved", "approver": "replace-with-owner", "approvedAt": "2026-06-30T13:15:00+08:00", "notes": "Aliyun/Tencent SMS, WeChat/QQ OAuth, WeChat Pay and Alipay callbacks verified." }, { "id": "object-storage.production-controls", "status": "approved", "approver": "replace-with-owner", "approvedAt": "2026-06-30T13:20:00+08:00", "notes": "AV/content scanner, CDN anti-leeching, watermark, lifecycle and private asset access sampled." }, { "id": "payment.reconciliation-sampling", "status": "approved", "approver": "replace-with-owner", "approvedAt": "2026-06-30T13:25:00+08:00", "notes": "Real payment/refund bills sampled and reconciliation differences handled." }, { "id": "frontend.runtime-config-review", "status": "approved", "approver": "replace-with-owner", "approvedAt": "2026-06-30T13:30:00+08:00", "notes": "Student, tenant-admin and platform-admin runtime-config.json contain public values only." } ] }