Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ FieldPilot 面向经常跨省市出差的外勤人员,把口语描述中的地

[FieldPilot 在线项目站](https://fieldpilot-kxh.netlify.app/) 使用 Vite `showcase` 构建模式展示业务问题、Agent Harness 组成、完整运行链路、Eval 驱动修正、检查点后缀重规划和验证边界;同一构建的 [`/workbench`](https://fieldpilot-kxh.netlify.app/workbench) 连接 [Render API](https://fieldpilot-api-t7m6.onrender.com/api/health),可实际完成任务解释、持久化、规划、执行检查点与事件式重规划。

当前生产部署为 Netlify deploy `6a6f2177f207a9dccf2184db`。已验证根路径与 `/workbench` 返回 HTTPS 200、指纹化 JS/CSS 由 CDN 正确提供,CSP 只允许指定 Render API;Render 只向正式 Netlify origin 返回 CORS 许可,随机预览域名会被拒绝。在线浏览器已显示 `API ok`,杭州示例解析为可提交的两任务严格草案。
当前生产部署为 Netlify deploy `6a7b65c4c0df50fb6e96d2b5`,后端为 Render `0.6.0`。已验证根路径与 `/workbench` 返回 HTTPS 200、指纹化 JS/CSS 由 CDN 正确提供,CSP 只允许指定 Render API;Render 只向正式 Netlify origin 返回 CORS 许可,随机 origin 不获得许可。在线浏览器已显示 `API ok`,并完成杭州示例的解析、方案生成与激活。

## 本地运行

Expand Down Expand Up @@ -146,7 +146,7 @@ cd ..\frontend
npm run build
```

当前结果(2026-08-10):后端 `55 passed`;本地 SQLite 已完成 Alembic `20260810_0005 (head)` 升级、schema check、回退与重升;真实 Uvicorn HTTP 进程完成 R1~R5 smoke,覆盖任务改期、预算快照、交通取消、天气风险和严格前缀保护;完整工作台与项目专题两种前端生产构建成功。Kimi K2.6 的既有 15 场景最终全量 run 为 15/15 live、状态与安全标签准确率 100%、选定字段精确率 94.87%、澄清字段精确率 93.33%,每个代码版本每场景调用一次,不声明跨重复稳定率。上一版公网链路已验证;`0.6.0` 的 Neon/Render/Netlify 生产发布需在合并审批后执行。详细记录见 [开发日志](docs/development-log.md)。
当前结果(2026-08-12):后端 `55 passed`;本地 SQLite 已完成 Alembic `20260810_0005 (head)` 升级、schema check、回退与重升;真实 Uvicorn 与 Render 公网环境均完成 R1~R5 smoke,覆盖任务改期、预算快照、交通取消、天气风险和严格前缀保护;完整工作台与项目专题两种前端生产构建成功。Kimi K2.6 的既有 15 场景最终全量 run 为 15/15 live、状态与安全标签准确率 100%、选定字段精确率 94.87%、澄清字段精确率 93.33%,每个代码版本每场景调用一次,不声明跨重复稳定率。`0.6.0` 已部署至 Neon/Render/Netlify;公开环境仍明确使用 Mock LLM 与 Fixture Provider。详细记录见 [开发日志](docs/development-log.md)。

运行中的完整 HTTP 冒烟(需要先启动后端):

Expand Down
4 changes: 2 additions & 2 deletions docs/agent-harness.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,6 @@ FieldPilot 不把无限增长的聊天记录当作业务上下文,也不需要

## 9. 当前诚实边界

本地 `0.6.0` 已验证的是:55 项后端回归、Alembic `20260810_0005` 往返、不可变政策版本、授权人工库存导入、交通/天气候选过滤、工作台与专题页双构建;上一版还验证了 Neon、Render/Netlify 公网链路、R1/R2 smoke、重启后持久化、精确 CORS,以及上述 Kimi Live Eval。
`0.6.0` 已验证的是:55 项后端回归、Alembic `20260810_0005` 往返、不可变政策版本、授权人工库存导入、交通/天气候选过滤、工作台与专题页双构建;Neon、Render/Netlify 公网链路完成 R1~R5 smoke、政策版本查询、精确 CORS 与浏览器工作台复验,并保留上述 Kimi Live Eval。

尚未验证的是:真实高德 Key 的生产运行、自动同步的铁路/航班/酒店实时库存、生产限流、多租户身份隔离和 SLA;`0.6.0` 的公网迁移与部署也需在发布审批后复验。FieldPilot 展示的是可运行、可解释、可重规划的工程闭环,不声称已经具备真实下单能力或全局最优求解。
尚未验证的是:真实高德 Key 的生产运行、自动同步的铁路/航班/酒店实时库存、生产限流、多租户身份隔离和 SLA。FieldPilot 展示的是可运行、可解释、可重规划的工程闭环,不声称已经具备真实下单能力或全局最优求解。
2 changes: 1 addition & 1 deletion docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,4 @@ SQLAlchemy/Alembic 管理 Mission、VisitTask、ExpensePolicyVersion、PlanRevis

## 8. 交付边界

本地 `0.6.0` 已验证 SQLite、55 项 Pytest、Alembic `20260810_0005` 往返、不可变政策版本、授权人工库存、风险候选过滤,以及工作台/专题页两种 Vue 生产构建。上一版 Neon、Render Docker/FastAPI 与 Netlify 已完成 health/ready、R1/R2 smoke、精确 CORS、持久化和重启恢复验证;Kimi K2.6 已完成 15 场景真实模型评测。公开环境继续使用 Mock LLM 与 Fixture Provider;`0.6.0` 公网升级需在发布审批后复验,不具备真实预订、生产限流、多租户隔离或 SLA。
`0.6.0` 已验证 SQLite、55 项 Pytest、Alembic `20260810_0005` 往返、不可变政策版本、授权人工库存、风险候选过滤,以及工作台/专题页两种 Vue 生产构建;Neon、Render Docker/FastAPI 与 Netlify 已完成 health/ready、R1~R5 smoke、政策历史、精确 CORS、SPA/CSP 和浏览器工作台复验。Kimi K2.6 已完成 15 场景真实模型评测。公开环境继续使用 Mock LLM 与 Fixture Provider,不具备真实预订、生产限流、多租户隔离或 SLA。
2 changes: 1 addition & 1 deletion docs/deployment-free-tier.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ Invoke-RestMethod "$apiBase/api/ready"

## 当前状态

截至 2026-08-10,三层免费拓扑的上一版已上线:Netlify 项目站与工作台为 <https://fieldpilot-kxh.netlify.app/> 和 `/workbench`,Render API 为 <https://fieldpilot-api-t7m6.onrender.com>,数据进入 Neon `fieldpilot` PostgreSQL。初始生产容器部署 commit 为 `bc53426`,当前已记录的 Netlify 生产 deploy 为 `6a6f2177f207a9dccf2184db`。`0.6.0` 仍是发布候选,需合并后迁移并复验。
截至 2026-08-12,三层免费拓扑的 `0.6.0` 已上线:Netlify 项目站与工作台为 <https://fieldpilot-kxh.netlify.app/> 和 `/workbench`,Render API 为 <https://fieldpilot-api-t7m6.onrender.com>,数据进入 Neon `fieldpilot` PostgreSQL。生产合并 commit 为 `c41b51b`,Netlify 生产 deploy 为 `6a7b65c4c0df50fb6e96d2b5`;已完成 health/ready、R1~R5 smoke、政策版本查询、CORS、SPA/CSP 和浏览器主链路复验。

已取得的上线证据:

Expand Down
9 changes: 9 additions & 0 deletions docs/development-log.md
Original file line number Diff line number Diff line change
Expand Up @@ -370,3 +370,12 @@ Stage 4B:增加 AgentRun/DecisionTrace 持久化与请求幂等,建立版本
- 公网只读复核确认 Netlify 首页/工作台均为 200,Render health/ready 可用;线上仍为 `0.5.0-dev`、Mock LLM、Fixture Provider,未把本地 `0.6.0` 能力误记为已发布。
- 本地启动真实 Uvicorn HTTP 进程执行扩展 smoke,依次生成 R1~R5,覆盖任务改期、预算快照、交通取消和天气风险;四类事件均为 `applied`,政策快照序列为 2,R3 绑定当前快照,取消候选未进入 R4,且检查点受保护前缀逐段不变。
- 当前仍是本地发布候选。Neon `0005`、Render `0.6.0`、Netlify 新产物、生产 smoke 和真实高德 Key 验收均保留到人工审批后执行,未把本地证据写成公网事实。

## 2026-08-12|Stage 17:0.6.0 生产发布与全链路复验

- 发布分支通过 PR #15 合并为 `main@c41b51b`;两次 PR CI 与合并后 main CI 均通过,包含 55 项测试、Alembic 往返、真实 HTTP smoke 和工作台/showcase 双构建。
- Render 自动部署后 `/api/health` 报告 `0.6.0`,`/api/ready` 确认 Neon reachable;新就绪字段表明 Amap、LLM 与 manual inventory 未配置,公开运行模式仍为 Mock/Fixture。
- Netlify 生产 deploy `6a7b65c4c0df50fb6e96d2b5` 上线。根路径、`/workbench`、SPA 回退、指纹化资源、CSP 和 `0.6.0`/`55 passed` 页面口径均通过。
- 生产 R1~R5 smoke 创建 Mission `msn-cd05f03d864b4dd78a07`;四类事件均 applied,政策快照 sequence 1→2 且 R3 绑定新快照,取消候选被排除,五段受保护前缀保持不变。
- CORS 正例只返回正式 Netlify origin,随机 origin 无许可;真实浏览器显示 `API ok` 与 Mock/Fixture 边界,并完成杭州示例的解析、方案生成和激活。
- 真实高德 Web Service Key 尚未配置,仍不声明线上实时路线、餐饮、票价、酒店库存或预订能力。
32 changes: 18 additions & 14 deletions docs/release-readiness.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
# FieldPilot 0.6.0 发布验收清单

验收日期:2026-08-10
验收日期:2026-08-12

发布候选分支:`release/fieldpilot-closure-20260810`

发布前稳定回滚点:`134d436`(当前 `main`,上一版公网项目站与后端已验证)
发布前稳定回滚点:`134d436`

生产合并点:`c41b51b`(PR #15)

## 本地已验证

Expand All @@ -29,19 +31,21 @@
- [x] 三轮数据来自三个代码版本,每个版本每场景调用一次;不把它表述为同一版本三次重复,也不声明跨重复稳定率。
- [x] Live Eval 与 Mock 数据集、指标和 artifact 分离;任何 fallback 都会让 Live 工作流失败。

## 上一版公网已验证
## 0.6.0 公网已验证

- [x] Netlify 项目站与工作台:<https://fieldpilot-kxh.netlify.app/>、<https://fieldpilot-kxh.netlify.app/workbench>。
- [x] 2026-08-10 只读复核:Netlify 两个入口均返回 200;Render health/ready 可用并明确报告当前线上仍为 `0.5.0-dev`、Mock LLM 与 Fixture Provider。
- [x] 当前生产 deploy `6a6f2177f207a9dccf2184db` 已验证根路径、工作台、SPA 回退、JS/CSS CDN、CSP 与浏览器主链路。
- [x] Render API:<https://fieldpilot-api-t7m6.onrender.com/api/health>;health/ready、精确 CORS、完整 R1/R2 smoke 和重启恢复均通过。
- [x] Neon PostgreSQL 上一版已迁移到 `20260731_0004`,数据在 Render 重启后仍可读取。

## 需要人工审批或外部凭证

- [ ] 审查并合并 `release/fieldpilot-closure-20260810` 到 `main`,触发 GitHub Actions、Render 和 Netlify 生产发布。
- [ ] 确认 Neon 生产迁移到 `20260810_0005`,再验证 `/api/ready`、完整 R1/R2、四类事件和重启恢复。
- [ ] 确认 Netlify 生产页显示 `0.6.0`、55 项测试口径、运行边界和新事件工作台。
- [x] Netlify deploy `6a7b65c4c0df50fb6e96d2b5` 的根路径、工作台、SPA 回退、指纹化 JS/CSS 与 CSP 均通过。
- [x] Render health 报告 `0.6.0`、Mock LLM、Fixture Provider;ready 报告 Neon reachable,并显示 Amap/LLM/manual inventory 均未配置。
- [x] Neon PostgreSQL 已迁移到 `20260810_0005`;生产 Mission `msn-cd05f03d864b4dd78a07` 保存两版不可变政策快照。
- [x] 生产 R1~R5 smoke 通过,四类事件均为 `applied`,受扰候选被排除且五段受保护前缀保持不变。
- [x] 生产 CORS 只向正式 Netlify origin 返回许可;随机 origin 无许可。
- [x] 真实浏览器显示 `API ok`、Mock/Fixture 边界,并完成杭州示例解析、方案生成和激活。

## 剩余外部凭证与复核

- [x] `release/fieldpilot-closure-20260810` 已通过 PR #15 合并,main CI 两次 PR 校验和合并后校验均成功。
- [x] Neon/Render/Netlify 已发布 `0.6.0`,并完成完整 R1~R5 与浏览器复验。
- [ ] 证据提交触发 Render 重启后读取上述 smoke Mission,完成本版本的重启恢复复核。
- [ ] 配置 GitHub secret `FIELD_PILOT_AMAP_API_KEY`,手动运行 `fieldpilot-amap-provider-validation` 并保存脱敏报告。
- [ ] 只有需要浏览器交互地图时才配置独立 Web JS Key 与安全码;后端 Web Service Key 不得进入前端。

Expand All @@ -56,4 +60,4 @@ cd D:\CODEX\agent-portfolio\fieldpilot\backend
--base-url https://fieldpilot-api-t7m6.onrender.com/api
```

生产发布未完成前,只能说“0.6.0 发布候选已本地验收”,不能把新迁移和新事件过滤写成已在公网验证。
公开环境仍使用 Mock LLM 与 Fixture Provider;不得把授权人工导入能力、真实 Eval 或待配置的高德 Provider 表述为线上实时库存。
2 changes: 1 addition & 1 deletion docs/resume-project-description.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ PydanticAI、FastAPI、Pydantic v2、SQLAlchemy/Alembic、Vue 3/TypeScript、htt
- 针对本人跨省市外勤中交通、住宿、多工作点时窗与报销规则分散的问题,设计“类型化语义 Agent Harness + 确定性编排内核”:用严格契约、有界模型调用、确定性后置校验、幂等与运行审计管理自然语言入口,避免 LLM 编造车次、价格和合规结论。
- 实现异步 Candidate Provider 与有界 Beam Search,融合跨城交通、住宿和市内路线候选,Policy Engine 过滤席别/舱位及费用上限,Verifier 独立复算任务覆盖、时间冲突、分类成本和政策不变量,输出最多 3 个带评分明细的可解释方案。
- 封装高德地理编码与 v5 路径规划适配器,加入显式超时、有限重试/并发/调用预算、查询缓存、in-flight 去重和按路线方式降级;通过 ProviderSnapshot 与 `live/mixed/fixture` 标记保留来源和失败证据。
- 建立 Mission/PlanRevision/ReplanEvent/ExecutionCheckpoint/AgentRun 与不可变政策版本持久化,以输入指纹、命令幂等、乐观并发和严格前缀保护实现检查点后的后缀重规划;本地 `0.6.0` 完成 55 项后端回归,上一版已部署 Render Docker/FastAPI、Neon PostgreSQL 与 Netlify 工作台。
- 建立 Mission/PlanRevision/ReplanEvent/ExecutionCheckpoint/AgentRun 与不可变政策版本持久化,以输入指纹、命令幂等、乐观并发和严格前缀保护实现检查点后的后缀重规划;`0.6.0` 完成 55 项后端回归并部署 Render Docker/FastAPI、Neon PostgreSQL 与 Netlify 工作台。
- 建立 15 场景版本化 Kimi K2.6 Live Eval,覆盖完整/缺失输入、精确报销字段、任务时窗和 Prompt Injection;依据失败样本重算澄清与安全标签,最终 15/15 live、状态/安全 100%、字段 94.87%、澄清 93.33%,且 fallback 不计入模型指标。

篇幅受限时,保留 Harness、确定性规划/校验和真实 Eval 三条,把部署与测试数合并到项目链接或面试讲解中。
Expand Down
5 changes: 3 additions & 2 deletions docs/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

## P0:0.6.0 生产验收

- [发布候选已完成] 本地 55 项测试、Alembic `20260810_0005` 往返、工作台与专题页双构建通过。
- [待人工审批] 合并发布分支,完成 Neon 迁移、Render/Netlify 部署、完整 smoke、浏览器主链路和重启恢复验收。
- [已完成] 本地与 main CI 的 55 项测试、Alembic `20260810_0005` 往返、工作台与专题页双构建通过。
- [已完成] PR #15 合并,Neon/Render/Netlify 发布,R1~R5 smoke、政策版本、CORS、SPA/CSP 和浏览器主链路通过。
- [发布后复核] 通过证据提交触发服务重启后,再读取生产 smoke Mission,确认 `0.6.0` 的持久化恢复。
- [待外部凭证] 使用独立高德 Web Service Key 运行 `fieldpilot-amap-provider-validation`,保存不含密钥和原始响应的脱敏报告。
- [可选] 只有产品确实需要交互地图时才配置浏览器 Web JS Key 与安全码。

Expand Down
2 changes: 1 addition & 1 deletion frontend/src/ShowcasePage.vue
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ const stack = [
<article><span>API & DATABASE</span><strong>幂等、版本冲突与迁移往返</strong><p>ExecutionCommand 保存命令指纹;expected_version 防止并发覆盖;Alembic 0004 可升级、检查和回退。</p></article>
<article><span>PLANNING</span><strong>受保护前缀逐字段一致</strong><p>HTTP 冒烟输出 protected_prefix_unchanged=true;Verifier 测试覆盖删除、篡改和越界。</p></article>
<article><span>FRONTEND</span><strong>真实浏览器主链路</strong><p>R1 → lock V1 → event → R2 → complete V2;已完成任务禁用,控制台无 warning/error。</p></article>
<article><span>DELIVERY</span><strong>发布候选已本地验收</strong><p>后端 55 项测试、迁移 schema check、工作台与专题页两种 Vue TypeScript/Vite production build 均通过;合并后由 main CI 复验。</p></article>
<article><span>DELIVERY</span><strong>0.6.0 已完成生产验收</strong><p>后端 55 项测试、迁移 schema check、工作台与专题页双构建及 main CI 均通过;Render/Neon R1~R5 smoke 与 Netlify 浏览器主链路已复验。</p></article>
<article><span>PUBLIC RUNTIME</span><strong>Render + Neon 重启恢复通过</strong><p>公网 smoke 覆盖 R1、事件式 R2、执行检查点和严格前缀保留;服务重启后仍可读取 Mission、Revision 与 Event。</p></article>
</div>
<div class="evidence-actions">
Expand Down
Loading