seed_home_workbench.py
给创业平台首页工作台造一套演示数据:只经 HTTP 接口(假登录头
Fake <subject>),不直接写库,可重复运行。只接受
127.0.0.1/localhost 的后端,其余地址直接退出
2。
本机栈要和 apps/web/playwright.config.ts 的 webServer
段一样接仓库内的假服务。区别只有一处:库用开发库
venture_os,不用
venture_os_e2e(端到端每轮会清空那个库)。
make db-up,然后在 apps/api
下执行 uv run alembic upgrade head。apps/api 下,各开一个终端):
uv run python -m tests.fake_credits --port 9801uv run python -m tests.fake_cs --port 9800 --service-name venture_os_csuv run python -m tests.fake_story --port 9810(脚本只用手工资产,不调它;和端到端保持一致,方便演示时在界面上导入项目).env 里要有
APP_ENV=local、FAKE_LOGIN_ENABLED=true、DATABASE_URL
指向
venture_os、CS_HOST=http://127.0.0.1:9800,积分一组照抄
.env.test(AGENTIA_CREDITS_ENABLED=true、AGENTIA_CREDITS_BASE_URL
与 BTS_BASE_URL 指向
http://127.0.0.1:9801,以及同一份假密钥),然后
uv run uvicorn app.main:app --port 8000。档里不能有公司凭据或
CLOUD_CONFIG_*。uc-demo-admin
发任务、建认证、公开作品。第一次运行会让它先登录一次,然后停下,提示执行
uv run python -m app.cli grant-admin uc-demo-admin;授予后重跑即可。uv run --directory apps/api python -m tests.demo.seed_home_workbench \
--base-url http://127.0.0.1:8000 --demo-at 2026-10-16T14:00:00+08:00必须在 apps/api 里运行(这里用
--directory):tests 包从当前目录导入,只写
--project apps/api 找不到它。--demo-at
是演示时刻,必须带时区;截止时间都按它算。一次完整运行约 50
秒,大部分时间在等假积分发放预付和尾款。
| 对象 | 内容 |
|---|---|
| 官方认证 | 迁移自带的「AI漫剧制作流程」,加上按名字新建的「AI 分镜脚本认证」「AI 配音与音效认证」「数字人直播认证」 |
| 公开任务 9 条 | 截止取演示日 −1、当天、+2、+5、+10 天的北京时间 18:00(演示时刻已过 18:00 时,当天那单改为 23:59)。认证要求混合:老用户现在能接、只差一个(含任务专属的「福州文旅品牌规范认证」)、差两个 |
uc-demo-worker |
有两项官方认证;四单进行中(截止分别是当天、+2、+5、+10
天);两单已提交交付,尾款 succeeded |
uc-demo-peer |
一单已完成,用来凑够第三件公开作品 |
| 公开作品 3 件 | 上面三单完成后生成,由管理员设为公开 |
uc-demo-newbie |
全新,无承接,首页拿起步布局 |
不造团团项目:项目归团团那一路,首页本批也不读项目。
--demo-at
改。要换演示日,就换一个空库重跑。seed_cold_start.py
给平台放一批「别人做的作品」、几条开着等人接的任务和可以去学的官方认证:新用户自己还没有单时,首页「看看别人在做什么」与发现页「作品」页签里也有东西可看,「我能接的单」里有单可接,认证目录里有可学的认证。看板卡
AIC-3277。和上面的首页演示数据不同,这批内容会放到测试环境给真实新用户看,所以标题与说明写成真实需求的口吻,不出现「演示」「测试」字样。
| 文件 | 内容 |
|---|---|
cold_start/works.toml |
六件作品,以 AI 漫剧为主:《海上丝路》关键画面与分镜、亲子漫剧《小熊找月亮》分镜与角色设定、《白茶记》女主 3D 定妆与茶室场景、《星海漫游》宣传海报与片头视觉,另有三坊七巷文旅 AI 短片与武夷岩茶 AI 主视觉海报各一件,都是会做 AI 漫剧的人能接的活。所有任务只要求「AI漫剧制作流程」一项认证(10-16 策划结论)。每件写明任务标题、需求方、简介、制作与交付要求、预付与尾款积分、截止规则、要求的认证、封面与过程图、交付说明、是否公开 |
cold_start/open_tasks.toml |
六条开放任务(白晨 10-16 要求),截止都是运行当天北京时间 18:00 再加 60 天,任务类型都是「AI 漫剧制作」。新手练习四条:用 AI 给自己做头像和 15 秒自我介绍短片、把一句家乡话做成 4 格漫剧短片、给家里的毛孩子做一段 AI 漫剧小剧场、用 15 秒 AI 漫剧记录我的一个早晨;标题以「新手练习:」开头,需求方「AI 创业平台新手营」,不要求任何认证,报酬取最小档位。AI 漫剧需求两条:都市治愈《巷口面馆》第一集分镜与 30 秒预告片(拾光短剧工作室,200/500 积分)、武侠《竹林听雨》主角设定与对决分镜(青锋动漫,300/700 积分),要求「AI漫剧制作流程」。每条写明去 Story(https://story.ndhy.com/)做、做到什么、交哪三样。详见下文「开放任务」 |
cold_start/certifications.toml |
官方认证清单,目前只有「AI漫剧制作流程」:说明与学习材料「Story漫剧创作指南」(测试环境后台已配的真实地址)。这一项迁移自带、各环境都已存在,脚本只在它的说明或学习入口为空时补上,已有内容不改 |
cold_start/assets/ |
24 张图(每件作品 1 张封面+2 张过程图,每条开放任务 1 张封面
starter-*-cover.jpg/comic-*-cover.jpg),用户级
imagegen 生成,1280 宽 JPEG,单张不超过 300KB;原始 PNG 在
.raw/,不入库 |
cold_start/page_request.js |
测试环境那条路线在页面里代发请求的代码(见下文) |
cold_start_plan.py |
清单读取、清单自检与判重(纯函数);单测
test_cold_start_plan.py |
每件作品走一遍真实业务流程,不直接写库:管理员发布任务(任务封面=作品封面)→
承接账号先为任务要求的认证提交截图,再承接 → 交付三件套(工程包
ZIP:全部原图+交付说明;成片:脚本用 ffmpeg 把封面与两张过程图合成约 11
秒的 1280×720 MP4;过程资产:两张过程图;另传封面作为作品封面)→
提交即系统自动验收、发尾款、生成隐藏作品 →
管理员设为公开。成片与工程包在临时目录现做,不入库。本机要装
ffmpeg。
作品是「发布 → 承接 → 交付 →
公开」走完的成品;开放任务是另一种流程,只由管理员发布,不承接、不交付,以开放状态挂在平台上等新用户来接。两类的用意是新用户在首页「我能接的单」里两组都有单:四条新手练习进「现在就能接」,接下来去
Story 做一条 15 秒左右的短片,走一遍「接单 → 制作 → 交付 → 系统验收 →
拿到报酬」;两条 AI
漫剧需求要求「AI漫剧制作流程」,没有这项认证的人在「差 1
个认证」里看到,学习推荐因此写「学完可多接 2
单」,引他去拿认证。交付门槛和普通任务一样(工程包 ZIP 或 Story
工程二选一、一个成片视频、至少一个过程资产,见
app/deliveries/README.md),所以新手题目都设计成一两个小时能做完、三样都交得出来的练习。
app/tasks/schemas.py 的
require_bounded_response、前端
features/tasks/logic.ts
同步放开,AC-231)。不要求认证的任务在前台任务卡上写「无需认证」,谁都能直接承接。测试环境要先部署含这处改动的后端,browser
路线才发得出新手单。app/tasks/schemas.py:47-54
必填),0
积分档位在规则判定里不可用(app/credits/rule_policy.py:139,credits <= 0
判
not_fixed_positive_credits)。所以清单里不写积分,预付与尾款都取目标环境奖励目录里积分最少的档位(本机假积分服务是
1 积分),脚本读目录时自动选、不写死数值,只读核对会打出取到的档位。AI
漫剧需求两条照作品的量级写明积分。alembic/versions/0003_tasks.py:56),新增「新手练习」类型要迁移,10-16
定不做;新手单靠标题前缀「新手练习:」和需求方区分。apps/web/src/features/workbench/rules/opportunities.ts
的
hasOpenTask),开放任务挂着,新用户看到的是任务清单而不是认证引导。六条都被接走或过期后,引导才会回来。本机栈同上文「运行前提」,库换成独立的冷启动库(不要用开发库,也不要用端到端每轮清空的
venture_os_e2e):
docker exec venture-os-postgres-1 psql -U venture -d postgres -c "create database venture_os_coldstart"
cd apps/api
DATABASE_URL=postgresql+asyncpg://venture:venture@127.0.0.1:5433/venture_os_coldstart uv run alembic upgrade head
DATABASE_URL=postgresql+asyncpg://venture:venture@127.0.0.1:5433/venture_os_coldstart \
uv run uvicorn app.main:app --host 127.0.0.1 --port 8002
# 管理员:先让它登录一次,再授权(grant-admin 读的也是 DATABASE_URL,要指向同一个库)
curl -s --noproxy '*' http://127.0.0.1:8002/me -H "Authorization: Fake uc-official-ops" >/dev/null
DATABASE_URL=postgresql+asyncpg://venture:venture@127.0.0.1:5433/venture_os_coldstart \
uv run python -m app.cli grant-admin uc-official-ops
# 导入(仓库根)
uv run --directory apps/api python -m tests.demo.seed_cold_start local --base-url http://127.0.0.1:8002管理员默认 uc-official-ops,承接账号默认
uc-studio-creator(--admin/--worker
可改);认证截图用仓库里的测试图片。加 --plan
只读核对、不写。一次完整运行约一分钟,多半时间在等假积分服务确认预付与尾款。
测试环境走公司 UC 登录,每个请求要 UC SDK 现算 MAC
签名,脚本自己没有签名能力,也不碰令牌。做法是在已登录的浏览器页面里发请求:脚本把每个请求写成一段代码,经
playwright-cli -s=<会话> --raw run-code --filename=…
交给那个会话执行;页面里按应用自己的规矩取后端地址(window.__VENTURE_RUNTIME_CONFIG__.VITE_API_BASE_URL,测试环境是
https://venture-os.debug.ndaeweb.com)、用运行配置里的网关与
sdp-app-id 构造 UC SDK、对「后端实际收到的绝对地址」现算签名头,再
fetch。签名头与令牌只在页面里用,不回传给脚本。文件上传把字节以
base64 带进页面再组 FormData。
前置(要白晨本人):
works.toml
为准),开放任务里两条 AI 漫剧需求另需预付 500、尾款
1,200,四条新手练习各占预付、尾款各一个最小档位;写明积分的档位必须在测试环境的奖励目录里存在,只读核对会先报出缺的档位,并打出取到的最小档位。--cert-screenshot),提交即认证、本人不能替换,只有管理员能在后台移除;账号已有这项认证则跳过。mkdir -p /tmp/vos-cold-start-pw && cd /tmp/vos-cold-start-pw
playwright-cli -s=cold-admin open --headed --persistent https://start.debug.ndaeweb.com/
playwright-cli -s=cold-worker open --headed --persistent https://start.debug.ndaeweb.com/然后先只读核对(只发
GET:核对身份、认证、奖励档位、每件作品还差哪几步、每条开放任务发没发),确认无误再加
--write:
uv run --directory apps/api python -m tests.demo.seed_cold_start browser \
--web-url https://start.debug.ndaeweb.com --admin-session cold-admin --worker-session cold-worker
uv run --directory apps/api python -m tests.demo.seed_cold_start browser \
--web-url https://start.debug.ndaeweb.com --admin-session cold-admin --worker-session cold-worker \
--cert-screenshot <认证截图.png> --write--signer fake 用假登录身份代替 UC
签名,只许对本机站点用,作用是在本机把这条浏览器路线完整演练一遍:起一个指向本机后端的前端(假登录模式),开两个会话各自写好
localStorage 的
venture-os:fake-subject,--web-url
指向这个前端即可。UC
签名本身只能在白晨登录后由只读核对那一步验证;未登录时页面内构造 UC SDK
并拦下请求这一段已对测试环境核过(不发任何请求)。
每一步之前先读现状再决定做不做,所以任何一步失败后排除原因原样重跑即可,只补缺的步骤:
| 步骤 | 怎么判重 | 中途失败的后果 |
|---|---|---|
| 认证 | 按名字;库里没有才新建,已有的只补为空的说明或学习入口,不覆盖后台已配的内容 | 无 |
| 认证截图 | 承接账号已有该认证就跳过 | 截图已上传但没提交认证:留一个孤立文件,无害 |
| 发布任务(作品与开放任务) | 按任务标题(后台任务列表) | 封面已传、任务没发:孤立文件;任务已发但回执丢了:重跑按标题认出,不会重复发、不会重复扣分 |
| 承接 | 按任务找承接账号的承接;任务被别的账号接走则这一件跳过并提示 | 承接已成立即有预付,重跑不再承接 |
| 交付 | 交付状态不是 submitted 才做 | 文件已传、草稿未提交:重跑重新上传并整体替换草稿,旧文件成孤立文件 |
| 设为公开 | 后台作品可见性不是 visible 才设 | 无 |
尾款到账由积分工作器异步确认,脚本最后最多等 90 秒,没到账只提示、不报错——作品与公开不依赖到账。 要改内容:任务一旦发布,标题、说明、截止都不会随清单变;要换就在后台处理旧任务后改标题重跑。