feat: publish Dever core with project scaffolding and versioned AI skills
This commit is contained in:
1 parent
70fa73cdc2
commit
ac458ffa7f
960 files changed
+221319
-1163
No files matched your search
@@ -0,0 +1,3 @@
|
||||
{"file":".trellis/spec/backend/quality-guidelines.md","reason":"Focused CMS/compiler/runtime verification"}
|
||||
{"file":".trellis/spec/backend/directory-structure.md","reason":"No junk layers and dual-source ownership"}
|
||||
{"file":".trellis/spec/backend/error-handling.md","reason":"Business/API/Job failure flow review"}
|
||||
@@ -0,0 +1,24 @@
|
||||
# CMS 业务闭环设计
|
||||
|
||||
## 复用与依赖
|
||||
保留路径角色、生成入口与核心 RBAC。认证走配置站点/account.verify,权限目录自动生成,不新增身份注入。跨领域只调用 App。
|
||||
依赖单向:content.revision、publishing.schedule 调用 news.article;news.article 可依赖 content.category、media.asset、audit.operation,不反向调用 revision/schedule。修订拥有编辑编排,文章拥有作者、状态和版本规则。普通 CRUD 保留生成 REST。
|
||||
|
||||
## 数据与行为
|
||||
文章增加可空分类/媒体引用及受保护版本;关联校验复用叶领域 App。修订调用文章受约束更新再保存快照,复用同一租户事务;使用现有条件 update 的 affected rows 判断竞争,不用 count+1 分配版本。
|
||||
手动与定时发布共用内聚实现;手动重复保持冲突,任务在已完成状态幂等成功。定时创建验证真实作者,保存必要业务引用并使用 enqueue_at。Worker 仍由核心重新验证可信身份和权限,payload 不能成为认证来源。
|
||||
API/Job 保持薄适配。数据库回滚不等于任意文件回滚;区分 Upload 临时资源与已提交存储文件。
|
||||
|
||||
## 测试分层
|
||||
- 应用源码测试验证 App/Domain 和正常存储结果,用例由运行器隔离;错误、权限和会话失效通过真实 HTTP 验证。Test/Job 不能调用身份 getter,不增加后门。
|
||||
- 自有 HTTP 验收使用复制的 CMS、临时 SQLite/配置、随机 loopback 端口、真实登录与角色及正常 Worker。
|
||||
- 复用 test/performance/cms.py 客户端与现有过程 owner;业务验收留在根 test/,不启动压测。
|
||||
- 等价检查覆盖声明、Model/API/Job/Port 和设置,Markdown 保留真实文档合同。
|
||||
|
||||
## 变更边界
|
||||
主要修改 examples/cms 双源码与测试、根 test/ 相关验收和 examples/README.md;复用编译器/runtime,默认不重建发行包或升级依赖。
|
||||
改前备份:target/cms-workflows-before.v1FzWO/source.tar.gz。
|
||||
|
||||
## 已证实的核心阻塞
|
||||
- SQL 返回同领域 App View,复用既有行解码;拒绝非存储类型、private 字段和未经解码证明的字段 bounds。仅两个方言均为完整单表简单投影时证明只读,其他 SQL 保持 write 效果。
|
||||
- 可信用户/租户 ID 可在明确 nullable ModelId 上下文中保持名义类型,API 与 REST 均按当前 Provider 的 verify 字段验证,不把 Int 任意转换成 ID。CMS 直接读取已验证身份,避免租户写入链重读全局 Session;保留跨库事务禁止规则。
|
||||
@@ -0,0 +1,4 @@
|
||||
{"file":".trellis/spec/backend/compiler-contracts.md","reason":"Final application role/API/Job/visibility contract"}
|
||||
{"file":".trellis/spec/backend/database-guidelines.md","reason":"CMS Models, transactions, migrations and test isolation"}
|
||||
{"file":".trellis/spec/backend/logging-guidelines.md","reason":"Audit and secret-free request logging"}
|
||||
{"file":".trellis/spec/backend/toolchain-and-library.md","reason":"Runtime modes, Port/Job/API standard packages"}
|
||||
@@ -0,0 +1,40 @@
|
||||
# CMS 业务闭环实施记录
|
||||
|
||||
## 2026-10-04 基线
|
||||
用户批准本轮实施。旧勾选不代表当前业务验收完成:每套45个生产文件/12领域,3个应用测试中2个固定字符串断言;cms_acceptance只比较API/Model。定时发布用了enqueue而不是enqueue_at,修订版本用count+1。此前真实PG/RBAC/租户和核心Job验收有效,但不代替CMS业务用例。
|
||||
|
||||
## 执行顺序
|
||||
- [x] 更新要求/设计/上下文,保存改前备份。
|
||||
- [x] 分类/媒体关联、文章版本竞争、修订事务。
|
||||
- [x] 到期入队、共享发布和任务幂等。
|
||||
- [x] 替换空测试、同步Markdown、完善等价与CLI预期。
|
||||
- [x] 有界HTTP验收:身份权限、编辑冲突、上传、到期/重试/回滚。
|
||||
- [x] 两套check/fmt/test、相关Rust/Python检查和真实验收。
|
||||
- [x] 独立复核,修复阻塞,更新示例与记录。
|
||||
|
||||
## 验证约束
|
||||
磁盘约462MiB空闲,复用target/debug/dever和runtime pack,Cargo单并发。自有HTTP/Worker前说明;不连真实数据库,不运行全量测试/压测,不变更全局命令/服务。配置只在自有临时项目写config/setting.json;子进程有超时与清理,分别记录通过/失败/未运行。
|
||||
|
||||
## 结果
|
||||
本轮业务闭环已完成。真实HTTP、CLI、核心约束回归、独立复核和静态质量门均通过;未执行范围外的全量CI、真实PG或压测,不将当前结果当作这些验证的替代。所有改动保留在工作区,未创建Git提交。
|
||||
|
||||
## 已完成的定向证据与直接阻塞
|
||||
- 两套源改为46个生产文件+5个真实应用测试;51对源码声明一致,check/fmt及各5/5应用测试已通过。源测试验证正常业务输出,拒绝和失效放在真实HTTP验证,不伪造认证上下文。
|
||||
- Python CMS调用迁移单测12/12;SQL View/字段范围/跨域约束4/4;API声明与GET只读SQL规则18/18;CMS语义/配置/测试等价2/2通过。
|
||||
- HTTP第1轮在build发现published_detail误删既有业务校验,已恢复;第2轮构建成功,但bootstrap启动拒绝global Session读取与tenant Article写入同一事务。日志保存在target/cms-business-acceptance-{1,2}/,尚未进入HTTP业务断言。
|
||||
- 直接语言修复:SQL可返回同领域App View,普通SQL结果record拒绝未经数据库解码证明的bounds;仅完整自有表简单投影可证明只读,两方言都通过才允许GET,其他SQL保留write效果。复用现有类型/行解码/事务,不增依赖和运行时ABI。
|
||||
- 已修可信身份的名义ModelId取值,以已验证的auth metadata替代业务重复读取global Session;不放宽跨库事务,不将模型ID改成Int。
|
||||
- 第3轮真实HTTP/Worker验收10组全部通过,report在target/cms-business-acceptance-3/report.json:真实登录/角色拒绝、上传清理、关联/非作者/过期版本、修订晚失败回滚、两请求单胜者、发布快照与晚失败回滚、未来到期/同刻任务、完成任务重放、失败重试、撤权阻断任务、会话注销/过期与站点隔离。fixture程序8,465,384 bytes,临时配置/DB和进程已清理;非压测。
|
||||
- 独立审查确证REST字段create/replace也可产生typed身份getter,原新增validator只遍历显式API;现已用同一IdentityContext校验API、REST create/replace/search与名义ID owner。新增正反例、跨站点provider错配、native/LLVM生成验证。完整API目标26/26通过,原错误fixture被CLI明确C006拒绝后已清理。普通Int和nullable边界保留。
|
||||
- 最终源码等价2/2、typed_sql 4/4、Python CMS调用单测12/12。CLI精确用例2/2:双格式各5个应用测试各运行两次(故意阻断部署DB,证明测试隔离),check/run/build及无源码打包运行;混合6用例验证仅数据库用例初始化临时DB。更新了该混合用例残留的旧3测试预期。
|
||||
- HTTP最终运行器显式关闭SQLite连接;复用已构建程序复验10组全部通过,最终报告target/cms-business-acceptance-final/report.json。不改源码/部署配置,不遗留HTTP/Worker/测试进程。此结果不覆盖真实PG、浏览器HTTPS或性能/长压测。
|
||||
- 两套最终check/fmt通过,check各有7条W001未读取返回值提示,非错误;语言只允许零输出调用作为动作语句,未用虚假读取或抑制消除提示。Rust改动文件rustfmt --check通过。
|
||||
- 定向clippy通过(dever-core/dever-tests/dever-cli,lib、dever bin及api_declarations/orm_native_sql/contract_execution/cms_acceptance/cms_project,sqlite feature,-D warnings)。最终diff检查通过。独立复核指出的SQL bounds和REST身份绑定缺口均修复并保留回归;主线程确认实际测试输出。任务直接在既有main工作区完成、没有PR分支,归档使用skip-branch-validation且no-commit。
|
||||
- 磁盘紧张时暂移的可再生成target/native-artifacts已压缩为target/cms-workflows-before.v1FzWO/native-artifacts-cache.tar.xz(约190MiB)。先逐文件比较,再验证重压缩前后tar SHA256一致(675338b0d4af58b76689ae3ec9bc2c7202a1b5aa3e3f117d0df5930f7e88a7d0);原路径恢复普通空缓存目录,软链和自有内存盘临时副本均已清理。源码、数据库和其他服务未动。
|
||||
|
||||
## Bug Analysis: SQL投影与业务集成边界
|
||||
1. 根因:跨层合同与测试覆盖缺口。私有Model不能穿越App边界,但SQL结果又只能是Model内部record;查询不能直接返回已定义的App View。数据库decoder也不会证明源级bounds。
|
||||
2. 失败尝试:只开放同域私有record引用仍会触发公开App签名约束;把Session重新读进文章调用链则实际触发跨库事务限制。不能通过放宽隐私或事务检查解决。
|
||||
3. 防止复发:共享SQL result检查同时验证归属、字段类型/可见性和bounds;GET效果采用完整受限语法证明,保留反例;HTTP按正常入口启动、验证完整提交与回滚。
|
||||
4. 扩展核对:双源码、旧CMS性能/PG调用方及CLI测试预期同步迁移;原SQL私有record同样拒绝未证明bounds。
|
||||
5. 已更新backend/database-guidelines.md和LANGUAGE.md;本仓库无对应spec模板副本,不创建;按用户约束不提交Git。
|
||||
@@ -0,0 +1,25 @@
|
||||
# 双源码 CMS 业务闭环验收
|
||||
|
||||
## 当前目标与授权
|
||||
2026-10-04 用户批准继续完善 CMS:替换空断言,贯通分类、文章、修订、媒体和定时发布,验证权限拒绝、并发冲突、重试与回滚。沿用本任务;旧规划中的手写 main、Principal 入参、业务 RBAC 和旧命令名已被后续语言合同取代,不恢复旧实现。
|
||||
|
||||
## 要求
|
||||
- 两套示例保持业务声明、Model/API/Job/Port 和测试等价。
|
||||
- 复用现有 ORM、自动权限、database-only 租户、Upload/Storage Port 和延时 Job;业务规则留在 App/Domain,不绕过真实身份。
|
||||
- 分类与媒体可关联文章,创建/编辑时校验。修订快照与文章更新同租户事务;过期版本或并发竞争明确冲突,不丢失更新。
|
||||
- 手动发布保持作者校验;定时创建验证作者和文章状态,按真实到期时间执行;重复任务不重复发布/审计,失败不留下部分完成状态。
|
||||
- 普通应用测试只用运行器临时 SQLite、结果捕获和 fake,不加身份后门、不读部署配置。认证、租户、上传与 Worker 由自有 HTTP 验收覆盖。
|
||||
- 两个固定字符串断言必须删除或改为真实业务测试;check、健康接口、快照不代表业务验收。
|
||||
- 配置只用 config/setting.json,不增加环境变量、权限表或框架层。
|
||||
|
||||
## 验收
|
||||
- [x] 两套 check/fmt、应用测试和语义等价通过。
|
||||
- [x] 分类/媒体关联、修订编辑、发布快照形成完整链路。
|
||||
- [x] 未授权/非作者请求失败且无写入,保留即时撤权。
|
||||
- [x] 并发/过期修订只有合法更新成功;失败回滚文章和修订/审计。
|
||||
- [x] 任务不提前运行,到期发布、重复执行、失败回滚/重试有真实断言。
|
||||
- [x] 上传成功与受限/失败路径验证文件、临时资源归属。
|
||||
- [x] 定向 build、自有临时 HTTP/Worker 验收通过,记录范围和限制。
|
||||
|
||||
## 范围外
|
||||
前端、富文本/搜索产品、外部云服务、公开发行、ARM、全量 CI 和长压测。仅确证阻止本任务的缺陷才修改语言核心。
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"id": "large-cms-acceptance",
|
||||
"name": "large-cms-acceptance",
|
||||
"title": "Dever 大型双源码 CMS 验收",
|
||||
"description": "扩展 Dever 与 Markdown CMS,验证大型项目的安全、Port、Job、API 和测试合同",
|
||||
"status": "completed",
|
||||
"dev_type": null,
|
||||
"scope": null,
|
||||
"package": null,
|
||||
"priority": "P1",
|
||||
"creator": "Antigravity",
|
||||
"assignee": "Antigravity",
|
||||
"createdAt": "2026-09-20",
|
||||
"completedAt": "2026-10-04",
|
||||
"branch": "main",
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [],
|
||||
"parent": "09-20-production-application-language",
|
||||
"relatedFiles": [],
|
||||
"notes": "",
|
||||
"meta": {}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{"file":".trellis/spec/backend/quality-guidelines.md","reason":"定向验证、真实执行和资源所有权"}
|
||||
{"file":".trellis/spec/backend/compiler-contracts.md","reason":"命令合同不得扩散到API和Worker"}
|
||||
{"file":".trellis/spec/backend/toolchain-and-library.md","reason":"打包闭包与沙箱完整性"}
|
||||
@@ -0,0 +1,36 @@
|
||||
# 普通二进制调用设计
|
||||
|
||||
## 源码合同
|
||||
|
||||
Adapter:`external command "bin/tool" { allow file }`,路径沿用领域相对资源路径,allow 沿用现有能力名。不接受 setting/lib;部署配置和授权沿用已有 adapter 节点。
|
||||
|
||||
每个 command Adapter 对应一个只有一个操作的 Port,操作名按业务自定:`execute(args: List<Text>, stdin: Bytes?) (output: dever.process.Output) fails dever.process.Error`。第二个 stdin 参数允许整项省略(仅 args),传 null 表示立即关闭 stdin。固定字段名防止增加映射 DSL。标准 Output 是 `{code: Int, stdout: Bytes, stderr: Bytes}`;标准 Error 是 `error Failed(message: Text)`,满足现有 Port failure 合同。命令非零退出按沙箱传播的退出码返回,不猜测 signal;启动/超时/超限继续作为源位置 runtime fault。
|
||||
|
||||
## 编译器与进程边界
|
||||
|
||||
新增 ExternalEcosystem::Command,保留现有 external 合成函数、Port fake、effect 和 suspends 链路。共享 wire 增加仅 Command policy 可用的 Bytes/base64;API/Job/真实 Worker 原有 wire policy 不变。两个后端仍用同一 external start/call/reply ABI,只给 Bytes wire 增加最小桥接函数。
|
||||
|
||||
HIR 共用合同构造实现,但 external_worker_contracts 只返回 exec/pip/npm/go,external_command_contracts 返回 command,避免 Lib lock/resolver 散落 command 特判。command 不需要 dever.lock;有真实生态依赖的同项目仍保持原 lock 行为。
|
||||
|
||||
## 运行时
|
||||
|
||||
复用 invocation Session、Managed、registry、bounded requests 和 structured Scope。command supervisor 启动不执行二进制或协议握手;收到每个请求才启动一个独立沙箱进程,并发写 stdin、读 stdout/stderr 和等待退出。不追加 --dever-component,不重放命令。超时、调用取消和关闭均 kill/wait,再返回结果;空闲 supervisor 可继续服务后续请求,不为正常多次调用套用 Worker crash restart 次数。
|
||||
|
||||
复用 verified extraction、launch manifest owner 和 sandbox Launch。内部资源 argv 继续映射,动态调用 argv 作为普通数据追加,不当宿主路径重写。保留只读程序树、grant、namespace/seccomp 与空环境。沙箱 PID namespace 负责后代收束,测试必须观察真实后代清理。
|
||||
|
||||
限额来自 config/setting.json 的 `adapter.<port>.command`:timeout_ms(默认30000,最大3600000)、output_limit(默认1048576,最大8388608,两路输出合计)。argv 总量最多65536字节,stdin最多8388608字节;拒绝NUL。base64膨胀及JSON包装不得超过已有16MiB wire上限。Worker Adapter 不使用这组命令限额。
|
||||
|
||||
## 离线打包
|
||||
|
||||
CLI 专门 command packager 接受一个 ELF 文件及同目录 lib/ 中的普通库文件;只采集所属项目/Package 的显式资源,不扫描宿主或调用 ldd。静态 ELF 可直接运行。动态 ELF 复用签名 sandbox GNU loader/OS库,递归解析 DT_NEEDED、验证目标、SONAME和版本需求,私有库按随附 lib/ 查找,缺少依赖构建期报错。共享已有 Python native ELF 闭包校验算法,不复制第三套解析器。使用固定私有 loader 参数关闭系统 cache,库搜索受打包树与sandbox库限制。
|
||||
|
||||
资源沿用SHA、私有原子提取、缓存/签名和Package归属验证;每次启动重新校验。具体 launch manifest 字段按既有owner扩展,不能从运行配置接受任意可执行路径。
|
||||
|
||||
## 改动边界
|
||||
|
||||
- core syntax/parser/check/ports/hir/wire/native/llvm,library/dever/process.dever,以及 wire runtime/bridge:一条类型与调用合同。
|
||||
- runtime component/command/external/config 与 sandbox:一次调用的进程和资源生命周期。
|
||||
- CLI workers command/ELF依赖、libs资源准备:离线可执行资源闭包。
|
||||
- 根test、LANGUAGE/README和已有规范:真实证据和可用示例。
|
||||
|
||||
不增加通用执行注册中心、新依赖、第二套SDK/JSON引擎,不改CMS业务。回滚按上述拥有者整体撤销本任务差异,保留开始前源码备份与用户已有改动。
|
||||
@@ -0,0 +1,4 @@
|
||||
{"file":".trellis/spec/backend/index.md","reason":"Rust语言仓库开发边界"}
|
||||
{"file":".trellis/spec/backend/compiler-contracts.md","reason":"Port/Adapter和两后端的类型与失败合同"}
|
||||
{"file":".trellis/spec/backend/toolchain-and-library.md","reason":"外部资源、沙箱、目标与生命周期"}
|
||||
{"file":".trellis/spec/backend/error-handling.md","reason":"源位置错误和资源清理"}
|
||||
@@ -0,0 +1,56 @@
|
||||
# 实施与验证
|
||||
|
||||
## 执行顺序
|
||||
|
||||
1. [x] 读取规范、调查编译/运行/沙箱/打包,固定用户已确认范围和合同。
|
||||
2. [x] 备份当前源码;并行实施编译器合同及runtime进程执行,主线程实现CLI资源打包。
|
||||
3. [x] 串行运行必要offline Cargo检查和定向测试;修复真实失败。
|
||||
4. [x] 用独立ELF与真实Dever源码验证check/run/build、移除源码运行、动态库、取消和完整性;验证ARM目标。
|
||||
5. [x] 独立Trellis复核、清理本任务冗余、更新语言规范及验证证据,归档;不提交Git。
|
||||
|
||||
## 所有权
|
||||
|
||||
- 编译代理:core、library/dever/process.dever、runtime/wire.rs、bridge ffi/runtime.h、对应编译/codec测试。
|
||||
- runtime代理:runtime component/command/external/config、sandbox及进程测试,不改wire.rs和CLI。
|
||||
- 主代理:CLI workers/libs/ELF闭包/Package必要集成及测试、任务/文档、全部Cargo和重资源验证。
|
||||
|
||||
代理不并行运行Cargo,不覆盖其他代理或用户改动。涉及共同合同先沟通。
|
||||
|
||||
## 验证原则
|
||||
|
||||
仅本任务所需定向检查,无全量测试/业务服务/长测;提前说明自有沙箱进程测试。先check与轻量测试,后更新实际runtime ABI再运行真实源码,不能用旧archive验证新codec。开始可用磁盘约3.3GiB,复用现有目标目录,串行构建。
|
||||
|
||||
预期目标:port_adapter、command专用runtime/CLI测试、external_workers/resources、llvm_external_source中command案例;原Worker回归按实际共享代码影响选择。fmt/clippy只覆盖改动所属目标。错误、跳过和未运行独立记录。
|
||||
|
||||
## 最终证据
|
||||
|
||||
- 改动前备份:`target/external-command-before.lBL9wU/source.tar.gz`。
|
||||
- CLI/core/runtime 初次 offline check 已通过;command 编译/codec/format/fake 5项通过。
|
||||
- external_workers 当前13项通过,10项需特定资产的旧真实生态测试未运行。command 打包4项通过,后续新增越界 RPATH 回归需复验。
|
||||
- runtime 首轮3过5失败为未优化debug哈希耗时超过fixture启动等待;作者构建为sha2/miniz_oxide/flate2指定opt-level=3,测试等待与命令deadline分离。随后即时文件锁断言揭示真实namespace清理竞态:管道EOF早于内核后代回收。最终改为info-fd + block-fd门禁,在放行guard前pin namespace pidfd并核验PPid,取消等待pidfd readiness后回收wrapper。9/9定向测试通过(17.86s),包括启动错误、无FD泄露、非零1/127、输入输出、限额、取消/超时/root close/queued/explicit shutdown。
|
||||
- 独立复核发现启动失败与非零退出混淆、RPATH越出程序树两项问题;已修复,复核确认无剩余阻塞。新增RPATH回归4/4及共用Python ELF闭包2/2通过。
|
||||
- 旧 Port 原生测试先因测试作者 rustc 路径缺失中断;指定作者工具路径后相关测试运行,期间新增sandbox直接依赖导致 --locked 拒绝。Cargo offline check已增量更新锁,不升级第三方包;最终21/21复验已关闭这些失败。
|
||||
- 新runtime ABI archive已离线重建(runtime-api/external/sqlite/postgres,3m25s),真实LLVM/CLI验收使用该新档案;未连接任何数据库。改动Rust格式检查及C fixture语法检查通过。
|
||||
- LLVM command对象+真实调用2/2通过(102.33s);六目标对象生成,预热+64轮每轮3次普通程序调用,二进制/EOF/退出7和allocation ledger全通过。初次60s fixture预算仅完成42轮,给command probe单独180s预算后保留全部65轮与相同断言;原Worker预算不变。
|
||||
- native_runtime_link 的Bytes wire C ABI验收1/1通过(7.18s)。
|
||||
- signed_cli_runs_and_packages_ordinary_command_with_private_library 1/1通过(172.02s):当前核心和新ABI、真实C动态工具+私有.so、check/run/build、无Lib锁、Package锁定资源、删除项目/作者/机器目录后两种产物独立运行、篡改.so拒绝。所有daemon/程序均为自有临时fixture,未安装全局命令。
|
||||
- 最终旧Worker生命周期1/1、external_resources 8/8通过;1项旧Rust bootstrap打包用例维持ignored,本次已有新的真实LLVM/签名CLI独立打包证据。
|
||||
- 最终Port/Adapter(包含普通/fake实际原生执行)21/21通过(103.41s),此前作者路径/锁文件导致的失败已全部关闭。
|
||||
- Linux ARM64 runtime-api/runtime-external桥接库、runtime、sandbox/guard 交叉cargo check通过(65s);结合六目标LLVM对象生成与CLI跨目标打包/拒绝错架构验证。未重发四个ARM发行profile、未运行ARM实机/虚拟机验收,不能将这些检查表述为ARM执行通过。
|
||||
- 所有改动所属库、guard及6个相关测试target的clippy `-D warnings`通过(45.21s);Rust定向fmt和C语法检查通过。git diff --check通过但本仓库核心文件为untracked,实际差异还通过改动前tar对比、逐文件检查与独立复核覆盖。
|
||||
|
||||
## 最终检查入口
|
||||
|
||||
Cargo均为offline、单并发,不使用全量测试。作者工具路径仅影响构建/验证进程,未加入应用环境配置。作者测试使用`profile.dev.package.{sha2,miniz_oxide,flate2}.opt-level=3`减少大量重复资源校验耗时。
|
||||
|
||||
- `dever-tests --features external --test port_adapter`:21通过。
|
||||
- `dever-tests --features external --test external_command`:9通过。
|
||||
- `dever-tests --features external --test external_component --test external_resources`:1+8通过,1旧bootstrap用例ignored。
|
||||
- `dever-cli --test external_workers`:13通过、10个旧真实生态fixture ignored;最终command过滤4通过。
|
||||
- `dever-cli --test external_libs wheel_tests::native_`:2通过。
|
||||
- `dever-backend-bridge --features embedded,runtime-external --test llvm_external_source command_ -- --include-ignored`:2通过。
|
||||
- `dever-backend-bridge --features embedded,runtime-external --test native_runtime_link wire_codecs_validate_slots_before_callback_and_release_partial_values -- --ignored --exact`:1通过。
|
||||
- `dever-cli --test native_release signed_cli_runs_and_packages_ordinary_command_with_private_library -- --ignored`:1通过。
|
||||
- ARM交叉check使用现有`target/arm64-cross`作者sysroot/工具,profile runtime-pack,target aarch64-unknown-linux-gnu;检查sandbox和bridge runtime-api/runtime-external。
|
||||
|
||||
未运行:全量测试、长压测、真实数据库、ARM目标执行及Windows;未替换全局安装或修改主机策略。当前无已知本任务阻塞。原有两篇tracked文档删除及其他既存任务保持原状。
|
||||
@@ -0,0 +1,33 @@
|
||||
# Linux 普通二进制调用
|
||||
|
||||
## Goal
|
||||
|
||||
在 Port/Adapter 下直接执行现成 Linux 二进制,支持参数、标准输入输出、退出状态、超时取消及独立打包
|
||||
|
||||
## 已确认范围
|
||||
|
||||
用户已在上一轮审阅普通命令调用、Port/Adapter、参数数组、可选标准输入、两路输出、退出码、超时取消、二进制与动态库打包、Linux x86_64/ARM64、无 shell/env 的方案,并批准创建任务、规划和实施。本任务不再次请求相同授权。
|
||||
|
||||
## 需求
|
||||
|
||||
- R1:直接调用现成 Linux ELF,无需程序实现 Dever 协议或用户编写其他语言包装;Port/Adapter 保留唯一外部调用边界。
|
||||
- R2:参数按数组原样传递,标准输入可省略;输出不丢失非 UTF-8 字节,正常非零退出码属于结果。
|
||||
- R3:启动失败、超时、取消、输出超限明确处理;每次调用均回收自有进程及沙箱后代,不自动重试命令。
|
||||
- R4:run/build 离线准备并嵌入程序和显式随附的必要动态库;检查目标架构、依赖闭包和完整性,部署不依赖源码/机器缓存/宿主语言工具。
|
||||
- R5:继续使用 config/setting.json 管理部署文件授权和调用限额,不添加环境变量或 PATH/shell 查找。复用现有沙箱,不修改宿主策略。
|
||||
- R6:保持现有 exec/pip/npm/go Worker 合同;普通 Dever 测试继续 Port fake,不执行真实命令。兼容 Package 资源与 Markdown 源码。
|
||||
|
||||
## 验收
|
||||
|
||||
- [x] 编译检查并格式化合法 command Adapter;拒绝错误 Port 签名、额外操作、setting/lib 和非法路径;其他 wire 边界仍拒绝 Bytes。
|
||||
- [x] 真实无协议 ELF 收到空格、引号、shell 元字符和绝对沙箱路径原文;stdin EOF、二进制输入输出、两路并发大输出、正常非零退出正确。
|
||||
- [x] 超时/调用取消/根关闭/输出超限均有界完成并回收沙箱进程树;后续调用仍可执行,无自动重放。
|
||||
- [x] 打包拒绝错架构、缺库、错误 SONAME/ABI、越界路径和篡改;完整动态程序在移除原始源码后运行。
|
||||
- [x] 真实 Dever check/run/build 和独立产物覆盖完整路径;Package 资源与现有 Worker 定向回归通过。
|
||||
- [x] Linux ARM64 构建与目标校验覆盖;目标运行证据单独报告,不能由 ELF 标签推导运行通过。
|
||||
|
||||
ARM64本次证据为Rust交叉检查、LLVM目标对象生成及打包目标校验;实际普通命令与独立产物运行证据来自Linux x86_64。完整验证命令、失败修复及未运行项见implement.md。
|
||||
|
||||
## 非目标
|
||||
|
||||
Windows/macOS、FFI、shell/管道语法、后台守护进程/交互式终端、隐式下载或宿主库扫描、全量测试和长压测。
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"id": "external-command",
|
||||
"name": "external-command",
|
||||
"title": "Linux 普通二进制调用",
|
||||
"description": "在 Port/Adapter 下直接执行现成 Linux 二进制,支持参数、标准输入输出、退出状态、超时取消及独立打包",
|
||||
"status": "completed",
|
||||
"dev_type": null,
|
||||
"scope": "external-command",
|
||||
"package": null,
|
||||
"priority": "P2",
|
||||
"creator": "Antigravity",
|
||||
"assignee": "Antigravity",
|
||||
"createdAt": "2026-10-04",
|
||||
"completedAt": "2026-10-04",
|
||||
"branch": "main",
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [],
|
||||
"notes": "Linux普通二进制调用已实现并完成定向及真实打包验收;ARM证据为交叉检查/对象生成/目标校验,不含目标执行。备份与完整证据见implement.md。不提交Git、不替换全局安装。",
|
||||
"meta": {}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
{"file":".trellis/spec/backend/toolchain-and-library.md","reason":"目标贯穿、共享缓存、安全闭包、Worker部署一致性"}
|
||||
{"file":".trellis/spec/backend/quality-guidelines.md","reason":"真实跨目标执行证据与最小回归边界"}
|
||||
@@ -0,0 +1,25 @@
|
||||
# Linux ARM64 应用交叉构建设计
|
||||
|
||||
## 边界与复用
|
||||
|
||||
只有应用部署目标变化,编译器/daemon/build tools 仍在当前 x86 宿主运行。复用 LLVM bridge 的 Target、现有 pack 清单/签名验证、NativeProgram 发布、Lib resolver/lock/Worker 以及 CacheStore,不建立平行流水线。主机平台身份继续用于 launcher/daemon 验证;新增独立、封闭的构建目标值,不能全局替换 platform_identity。
|
||||
|
||||
## 目标数据流
|
||||
|
||||
CLI build 参数 → 明确的 BuildTarget → 目标 Lib 资源准备 → CompileRequest → daemon 验证目标 pack 与缓存 → worker 加载目标 runtime → LLVM object/LLD → 独立程序。私有编译走同一目标与 pack owner。run/test 在入口固定使用 host;应用配置不保存编译器状态。
|
||||
|
||||
toolchain/target.rs 拥有 BuildTarget(LinuxX86_64、LinuxAarch64),严格解析 linux-x86_64/linux-aarch64,提供 host/platform/triple 映射。共享库不引用 bridge,避免 launcher/deverd 引入 LLVM。原始六目标 bridge 保持独立。
|
||||
|
||||
每个 runtime/<target>/manifest.json 验证实际目标与 compiler_version/ABI;所选目标的整个输入闭包必须纳入安装签名,缓存键包含目标和该 pack 身份。pack 制作器接受显式准备的目标运行输入,同时只验证/打包 x86 宿主核心,不要求构建 ARM 核心。
|
||||
|
||||
## Lib 与宿主执行
|
||||
|
||||
资源路径、runtime/构建收据和 ELF 校验使用部署目标;实际启动的编译工具使用构建宿主。Go 交叉编译工具必须在 x86 执行且输出 ARM,标准库/importcfg 和源码 tags 选择 ARM。Python wheel 与 npm addon 遵守目标 ABI;跨目标源码构建不能把 ARM 工具直接作为 x86 可执行文件启动,也不能无条件接受宿主生成的收据。共用现有显式 Lib 准备入口传递目标,离线 build 只消费完整、已校验的目标材料。lock 模式如需变化直接迁移仓库合同/fixture,不增加旧格式回退。
|
||||
|
||||
源项目与 Dever Package 的业务声明不增加架构分支。只有明确的部署目标选择和作者工具输入区分架构。缺少目标资产给出明确准备错误,不能退回宿主资源或无沙箱执行。
|
||||
|
||||
## 验证与运维
|
||||
|
||||
作者资源/模拟器解包到本任务专用目录,使用绝对工具路径与校验摘要,不全局安装。所有 Cargo/原生构建由主代理串行执行,优先复用现有缓存,开工前检查磁盘与内存预算。跨编译测试验证 ELF、执行结果及坏输入拒绝;共享编译验证目标隔离和命中前完整性校验。模拟 ARM 内核只在任务自有进程/镜像内运行,不修改主机 AppArmor 或已有服务。
|
||||
|
||||
ARM 真机吞吐和不同硬件/内核兼容性不从模拟结果推导。本次不重新跑既有全量矩阵或长压测。
|
||||
@@ -0,0 +1,4 @@
|
||||
{"file":".trellis/spec/backend/directory-structure.md","reason":"编译/运行库/Lib/资源的唯一owner和根test归属"}
|
||||
{"file":".trellis/spec/backend/error-handling.md","reason":"显式目标错误与资源/发布清理"}
|
||||
{"file":".trellis/spec/backend/quality-guidelines.md","reason":"离线定向验证和资源预算"}
|
||||
{"file":".trellis/spec/backend/toolchain-and-library.md","reason":"运行输入、签名闭包、daemon/cache与生态宿主/目标合同"}
|
||||
@@ -0,0 +1,61 @@
|
||||
# 执行记录
|
||||
|
||||
## 已确认范围
|
||||
|
||||
用户已批准 x86 构建 ARM 应用及创建任务继续实施。最终方案沿用已确认目标,没有 ARM 开发工具链/公开发行/长压测。旧生产化父任务的其他平台延期范围,仅为本任务的 Linux ARM 应用部署这一项解除延期。
|
||||
|
||||
## 收口结果
|
||||
|
||||
本任务范围全部通过。最终汇总为 `target/arm64-cross/acceptance.json`,逐项绑定构建日志、运行日志和当前产物SHA。最终完整ARM内核模拟日志为 `target/arm64-cross/logs/guest-1791082810005965465.log`:Python、JavaScript、Go各自成功/故障/恢复/清理全部通过,HTTP返回`arm-http`,guest退出0,222.57s,无超时。四profile、私有/共享编译、缓存隔离/篡改拒绝和SQLite真实CRUD由此前独立验收覆盖。
|
||||
|
||||
本机构建、41项初始定向回归、Lib 73项、Worker 9项、迁移后的真实Go构建运行1项、Python/JavaScript SDK合同、作者Python输入2项及相关Clippy/格式检查通过;这些测试集有交集,不相加成独立总数。最新Python签名构建201.28s通过,包已包含最终reader及completion清理修复。
|
||||
|
||||
没有ARM真机;未运行ARM真机性能/长测、真实PostgreSQL服务器或全工作区CI。模拟器验证功能,不推导真机吞吐。Python sdist/npm hook跨目标仍需事先准备匹配目标的输出和完整收据;纯Python/npm与Go交叉构建已实际覆盖。产品仍不隐式联网或从环境变量/PATH读取语言工具。未安装/替换全局命令、修改主机AppArmor/sysctl或业务服务,未提交Git。
|
||||
|
||||
## 实施
|
||||
|
||||
1. [x] 调查 CLI、runtime pack、daemon/cache、Lib/Worker 目标链路,建立可审查任务。
|
||||
2. [x] 编译链路:BuildTarget、build 参数、CompileRequest、runtime/签名/缓存及打包者,配套回归。
|
||||
3. [x] Lib 链路:显式目标准备、lock/resource/runtime/Worker/build pack 的宿主与目标分离,错架构拒绝与回归。
|
||||
4. [x] 准备可复现 ARM 运行输入与模拟器;构建四 runtime profile 和所需生态资源。
|
||||
5. [x] 串行定向检查,执行 ARM 真实应用/三生态模拟验收及 x86 最小回归。
|
||||
6. [x] 独立复核、修复实际问题,更新规范/CLI 文档/执行证据,清理自有进程与临时配置,不提交。
|
||||
|
||||
## 所有权
|
||||
|
||||
- 编译实施代理:CLI main/compile/worker、toolchain target/runtime_pack/compilation/service/release/cache、packaging.rs 主文件与编译相关根 test。
|
||||
- Lib 实施代理:libs.rs 与 libs/**、workers.rs 与 workers/**、packages 的传递 Lib 必需接线、packaging/{ecosystems,builds,sandbox}.rs、生态相关根 test。CLI 参数集成通过主代理/编译代理协调,禁止重写对方文件。
|
||||
- 主代理:任务/规范/SDK/README、作者 ARM 资源和模拟验收 owner、所有 Cargo 和重资源命令、最终集成。
|
||||
|
||||
## 检查原则
|
||||
|
||||
先参数/目标映射/清单/缓存/锁的定向测试,再用真实 ARM 产物执行。编译命令明确 offline/locked 和单作业;不让子代理并行 Cargo。真实业务服务仅在自有临时项目/端口或模拟机里启动,提前说明。失败保存证据,不放宽断言、不能将未准备目标或模拟器缺失标成通过。
|
||||
|
||||
初始磁盘可用约8.2GiB;现有 debug 3.1GiB、参考 runtime 948MiB 均保留。准备资源前重新核算,不删除用户不明文件、不恢复旧长测。
|
||||
|
||||
## 过程与证据(按执行顺序保留)
|
||||
|
||||
- 编译与 Lib 两条接线已实施,新增 BuildTarget、请求/缓存目标绑定、显式目标 Lib 准备及 ELF/Go archive 检查;尚待 Cargo 与真实产物验收,未将代理报告记成通过。
|
||||
- 作者工具均在 `target/arm64-cross/`:Rust 1.98 ARM std、GCC 13 ARM cross、QEMU user/system、同版本私有 rustfmt/clippy。未安装全局工具。Ubuntu 包按现有受信 metadata 的 SHA256 验证,ARM OS 库索引另外通过 Ubuntu InRelease 签名验证。
|
||||
- ARM base 和 sqlite 已使用 `runtime-pack` 串行构建成功,保存到 `archives/`;postgres/both 仍在构建。初次失败是私有 cross as 找不到同目录 libopcodes,已仅在作者 Cargo 子进程设置私有库路径修复,未加入产品环境变量。
|
||||
- Python 3.12.14 ARM standalone 和 Node 24.15.0 ARM 已按上游发布摘要下载并生成目标 pack;真实 six/is-number 包及 Google UUID 现有官方校验证据供后续 Worker 验收。
|
||||
- Alpine 3.22.6 ARM 内核完整系统模拟启动成功,日志 `target/arm64-cross/logs/guest-1791077299508695065.log`:`aarch64`、user namespace 存在、`DEVER_ARM_GUEST_EXIT=0`。这只是模拟机准备,不是 Dever/Worker 验收。
|
||||
- author native release helper 增加目标参数复用现有 Python/npm选取/manifest;Go author fixture通过私有 Go overlay 固定交叉工具默认目标(源码未改全局SDK),待实际构建与执行。
|
||||
|
||||
- 四份 ARM runtime 全部通过:base 311.91s/81,418,028B、sqlite 362.84s/96,034,088B、postgres 338.03s/102,287,968B、both 237.84s/109,661,934B。总作者构建20m52s,峰值1.9GiB、无swap/OOM;每份SHA和命令在对应log JSON。`target/debug/runtime/linux-aarch64`已按真实输入准备,未改原x86 pack。
|
||||
- 新host工具构建通过;定向测试39项通过:CLI参数3、native maker24、请求目标2、LLVM CLI5、共享缓存1、resolver目标1、exec架构1、managed runtime目标2。未执行的ignored项未算通过。作者Python输入测试2项通过。
|
||||
- `trellis-check`独立复核修复1处多余借用,17个生产Rust文件格式检查通过;未发现目标数据流/签名/缓存的功能性阻塞。主代理继续负责实际测试,不以复核替代执行。
|
||||
- 实际签名安装/shared+private ARM构建验收1/1通过(177.32s):4共享profile + 私有base均在删除源码与机器目录后由QEMU执行成功;SQLite真实CRUD、ARM/x86缓存隔离、重复命中、命中前篡改拒绝通过。结果 `target/arm64-cross/compile-acceptance.json`,HTTP应用已导出但尚待完整guest运行。未运行真实PG服务器。
|
||||
- ARM guard已按私有sysroot成功链接,sandbox OS assets准备完成;前两次作者链接失败(缺libgcc_s、GNU脚本绝对sysroot)均保留日志,修复只在私有作者输入/链接参数,不改变产品配置。Go交叉pack正在构建。
|
||||
|
||||
- Go交叉pack已成功(144.86s);签名安装后的三生态ARM应用离线构建1/1通过(453.51s),各应用导出后删除源码和机器目录。完整guest运行尚未通过,构建成功不算Worker执行成功。
|
||||
- 完整模拟定位两个独立问题:fixture直接从initramfs rootfs运行导致bwrap `pivot_root: EINVAL`,已改为switch_root到正常tmpfs根;随后日志 `guest-1791080132703634001.log`明确显示ARM loader为0600,guard启动Permission denied。
|
||||
- 根因属隐含宿主假设/跨层传播与测试缺口:`asset_executable`只识别宿主loader,ELF架构校验正确但打包和嵌入权限错误;首轮复核未覆盖这条权限数据流。已在共享owner精确识别两种目标loader,并增加真实pack权限回归(输入0600→loader/guard/bwrap0755、库0644)和负例。目标架构校验、guard和沙箱策略未放宽;规范已补齐。主代理正在重建host工具及全部三生态产物复验,旧产物不能作为修复证据。
|
||||
- loader修复后host工具重建通过,定向测试41/41通过(原39项加sandbox默认2项);三生态应用重新生成通过(461.13s,日志 `ecosystems-1791080644145693595.log`)。旧失败应用保存在 `target/arm64-cross/failed-loader-mode/`,当前guest/apps均是修复后产物。
|
||||
- 完整系统验收脚本固化在根test下 `test/ecosystem-release/arm64/{simulate.py,init.sh,bootstrap.sh,guest.sh}`;独立复核补上源码定位的预期错误、每次调用后 `/worker/*` 进程检查、流水线子进程回收,语法检查通过。完整guest正在运行。
|
||||
- 四ARM静态runtime/guard沿用前述已验证构建:本次最后修复的`asset_executable`仅由宿主作者/CLI打包与嵌入路径调用,ARM运行期不调用它;重新构建host core并重生成应用资源标记即覆盖实际修复,不重复20分钟runtime构建。
|
||||
- `guest-1791081118958747964.log`已得到Python `data:true`,随后Worker以134退出,验收正确判失败。宿主SDK合同用例保持stdin打开后稳定复现 `_enter_buffered_busy`:daemon读线程持有BufferedReader锁,之前测试先关stdin掩盖了退出竞争。SDK已改用asyncio管道与有界队列,finally取消并等待reader、关闭transport;修改后的整个Python SDK握手/调用/业务错误/取消/关闭/拒绝检查通过。只需重嵌入Python SDK,ARM runtime/Node/Go源字节未变;共用原签名构建fixture增加Python定向入口,不复制构建流程。
|
||||
- SDK复核补齐有界队列中completion通知任务的取消/等待,`test/external-sdk/check.py`新增Python队列满时关闭、保留stdin等待退出且stderr为空的回归。Python完整合同与JavaScript原合同检查均通过。该保留stdin回归针对CPython退出竞争;JavaScript继续遵循原测试/真实host在shutdown应答后关闭stdin的流程。
|
||||
- `guest-1791081776953594061.log`完整通过Python成功/故障/恢复/清理,但整个三生态模拟在180s总上限时被停止,记为未通过。模拟器需反复读取校验大型独立程序,后续有限总预算改为600s并增加每步marker;这是9次调用加HTTP的功能验收,不是长压测。
|
||||
- 旧host Go fixture缺少新增的`build.host`,已校验原SHA及358个leaf,保留工具/stdlib原字节和mode,仅重封装descriptor并同步6个作者文件、锁及prepared摘要;原文件完整备份在 `target/arm64-cross/host-go/backup`。新固定SHA `8818a1eccb510948a55f63088c01678391a5e0c2236e6eacadfe45d0a5edbb43`,prepare.py和SDK文档同步,未改其他语言收据和UUID/sumdb。实际host Go重复编译/移除源码后运行回归1/1通过(18.06s)。
|
||||
- 静态检查修复沙箱条件嵌套、Go编译参数过多(组合现有构建输入)、共享ELF测试fixture在两个新消费者中的未用辅助方法告警;CLI相关bin/test及sandbox全部target的Clippy `-D warnings`通过。受影响Lib默认73/73、Worker默认9/9通过;各10项ignored未算通过。最后改动Rust格式检查通过,作者Python输入2/2通过。
|
||||
@@ -0,0 +1,33 @@
|
||||
# Linux ARM64 应用交叉构建
|
||||
|
||||
## 目标
|
||||
|
||||
在现有 Linux x86_64 开发机执行 Dever build,得到能在 Linux ARM64 独立运行的应用。部署端不安装 Dever 编译器、Rust、Cargo 或 LLVM。用户已确认上述范围及创建任务、继续实施;不重复要求实施确认。
|
||||
|
||||
## 实施前基线
|
||||
|
||||
- LLVM bridge 已有 LinuxAarch64 对象生成和链接;CLI compile.rs、toolchain/runtime_pack.rs 仍按 host 选 pack。
|
||||
- toolchain/compilation.rs 的请求未携带产物目标;service/compile.rs 的缓存目标固定为 host。
|
||||
- libs.rs、workers.rs 与 Go/build pack 的验证多处把运行目标视为开发机;不能仅改最终主程序而混入 x86 资源。
|
||||
- 启动本任务时没有 ARM 真机及模拟器。准备作者工具与 ARM 资源属于本任务,模拟通过不等于真机性能验收。
|
||||
|
||||
## 要求
|
||||
|
||||
1. `dever build <root> --target linux-aarch64 --output <new-file>` 选择产物目标;省略目标保持本机构建。run/test 继续本机执行,未知/重复参数明确失败。
|
||||
2. 私有 CLI 与机器共享编译均传递同一目标;验证正确版本、ABI、目标 pack 和签名闭包,缓存按目标隔离。不能用宿主 pack 替代缺失 ARM pack。
|
||||
3. 制作并验证 ARM64 的 base/sqlite/postgres/both 运行库及必要 CRT/静态库;构建端保持 x86_64。
|
||||
4. Lib 准备/锁定/离线打包区分构建宿主与部署目标,Python/Node 解释器、Go/exec Worker、原生扩展和沙箱资产不得混入错误架构。复用原协议、resolver 和资源 owner,不另建跨编译框架。
|
||||
5. 产品配置只用 config/setting.json;run/build 不联网、不读取环境变量或系统 PATH 获取语言工具。准备目标依赖必须显式进行。
|
||||
6. 用模拟环境运行生成的真实应用与目标 Worker,验证输出、失败和清理;涉及 namespace/seccomp 的验收使用带 ARM 内核的完整系统模拟,不能拿用户态模拟结果替代沙箱证据。
|
||||
|
||||
## 验收
|
||||
|
||||
- [x] 默认本机 check/run/build 行为及参数拒绝定向回归通过。
|
||||
- [x] x86 构建的应用 ELF 标记 AArch64,模拟器中执行实际 CMD/HTTP/数据库路径并得到预期输出。
|
||||
- [x] 四 profile 都使用真实 ARM 输入;私有与共享构建命中正确目标缓存,缺失/错误/篡改目标输入均拒绝。
|
||||
- [x] pip/npm/go 与 exec 的目标资源选择、锁定和错架构拒绝有回归;准备的 ARM 三生态应用能在模拟环境独立运行。
|
||||
- [x] 产物不依赖 ARM 编译器或源项目,构建不隐式联网;最终日志明确记录通过、未运行和阻塞。
|
||||
|
||||
## 不在范围
|
||||
|
||||
ARM 上开发/编译 Dever、macOS/Windows、公开发行/新签名体系、真机性能及长压测。保留现有 x86 验收证据,不重复全量 CI;不改宿主 AppArmor、业务服务或全局工具。
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"id": "linux-arm64-cross-build",
|
||||
"name": "linux-arm64-cross-build",
|
||||
"title": "Linux ARM64 应用交叉构建",
|
||||
"description": "在Linux x86_64开发机生成可在Linux ARM64运行的应用二进制,覆盖目标运行库、Lib资源、共享缓存和模拟验收;不移植ARM开发工具链。",
|
||||
"status": "completed",
|
||||
"dev_type": null,
|
||||
"scope": null,
|
||||
"package": null,
|
||||
"priority": "P2",
|
||||
"creator": "Antigravity",
|
||||
"assignee": "Antigravity",
|
||||
"createdAt": "2026-10-04",
|
||||
"completedAt": "2026-10-04",
|
||||
"branch": "main",
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [],
|
||||
"parent": null,
|
||||
"relatedFiles": [],
|
||||
"notes": "",
|
||||
"meta": {}
|
||||
}
|
||||
Reference in new issue
Block a user