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
16 changes: 16 additions & 0 deletions ITERATION_LOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,22 @@

---

## 2026-08-16:中文 owner 范围收拢与外部 Windows 案例收口

### FLG-ITER-20260816-01:中文 owner 范围收拢在短句与长口述中重复漏提取 [confirmed — P0]

**场景**:2026-08-11,FlightModeAI owner 用长段中文口述把产品收拢为飞行学习包,说明飞行前选主题、飞行中完成、落地后分享的闭环,也指出端侧模型体验与互动方式仍待验证。`closeout` 只触发 lessons,正式候选为 0。2026-08-16,owner 又用一句“我们主要做 Canvas Prompt FlowGrid 其他我觉得意义不大”收拢资源范围,`closeout` 再次返回空候选。

**发现**:两次样本长度不同,暴露的是同一缺陷。中文 owner 通过“收拢、定义为、主要做、其他意义不大”等自然口语表达范围取舍时,现有入口和提取器不能稳定保存来源明确的候选。[confirmed]

**影响**:安全 review gate 阻止了错误自动写入,但 owner 已经明确的范围可能静默丢失。宿主随后只能人工使用 `decision add` 或 confirmed capture 补账,正式决策还可能夹带无证据的模板字段。

**处理方向**:一句带明确 owner 来源的短判断走 source-backed capture 草稿;会议、长讨论和包含范围、闭环、体验证据、待验证问题的口述走 `closeout`。长口述只有在保留 `User:` 归因、范围收拢信号和流程信号时生成 pending candidate;普通项目名列表 abstain。正式决策只写真实存在的字段,继续保留 review 与来源门。

**本地候选验证**:新增 8 月 11 日真实长口述 fixture、8 月 16 日短 capture 回归和无来源实体列表反例。外部 Windows + WorkBuddy 案例另建隐私安全的冷启动输入预检,普通项目文件提供 1/6 个连续性不变量,FlowGrid Context Pack 提供 6/6;该结果只度量输入信息,不证明 Agent 输出更好、用户满意或跨会话增益。

---

## 2026-08-08:主线优化审计与合并收口

**场景**:项目主编排同时核对映射 runtime、Vault 治理层、遗留开发 worktree、`flg status`、`flg capture list`、`doctor --strict` 和全量测试。
Expand Down
44 changes: 21 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,36 +11,13 @@
[![CI](https://github.com/dlxeva/FlowGrid/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/dlxeva/FlowGrid/actions/workflows/ci.yml)
![Python](https://img.shields.io/badge/python-%3E%3D3.10-3776AB?logo=python&logoColor=white)
[![License](https://img.shields.io/github/license/dlxeva/FlowGrid)](./LICENSE)
[![AML Academic Textual #8](https://img.shields.io/badge/AML%20Academic%20Textual-%238-7C3AED)](https://agentmemories.ai/leaderboard/academic/textual)

FlowGrid helps business-project knowledge workers turn messy AI work sessions into state-aware, traceable, and resumable project context.

> **Current status:** the codebase reports `v0.3.0` and is in v0.4 core validation. The current focus is entry reliability, rebuildable ledger state, and real-project continuation; v0.4 is not presented as a released version yet.

It is built for long-running work where the deliverable is not just a document, but a defensible judgment chain: why this proposal makes sense, why this direction was chosen, what alternatives were rejected, and when a past judgment should be revised.

## Public Benchmark Result

The independent [FlowGrid AML Retriever](https://github.com/dlxeva/flowgrid-aml-retriever)
ranked **#8** in the first public Agent Memory Leaderboard Academic Textual
track, with an overall score of **43.98**, **1.08 points behind the top-ranked
entry**. [View the public leaderboard →](https://agentmemories.ai/leaderboard/academic/textual)

The competition entry and FlowGrid Core share ideas about evidence provenance,
temporal state, conflict preservation, and traceable retrieval, but they are
different systems:

- **AML Retriever** is a benchmark-specific, deterministic Add/Search memory
retriever. It stores messages, builds retrieval views, and returns ranked
evidence under the competition contract.
- **FlowGrid Core** is a local project-continuity layer. It preserves reviewed
judgments, constraints, rejected paths, current actions, and handoff state for
long-running human-AI projects.

The ranking validates the competition retriever under AML's unified evaluation.
It does not establish FlowGrid Core's overall product quality, user adoption, or
universal superiority over other memory systems.

## How It Carries a Project Forward

![FlowGrid project continuation lifecycle](./docs/assets/flowgrid-lifecycle.svg)
Expand Down Expand Up @@ -136,6 +113,11 @@ flg context --mode manifest
flg handoff
```

Hosts should route one short, explicitly attributed owner judgment to a
source-backed capture draft, for example `flg capture add`. A meeting, long
discussion, or multi-signal product explanation goes through `flg closeout`.
An entity list with no attributed trade-off produces no decision candidate.

After that, you will have:

- a local project ledger: `PROJECT.md`, `FRAMING.md`, `DECISIONS.md`, `SNAPSHOT.md`, `PROGRESS.md`
Expand All @@ -152,6 +134,22 @@ remains pending.

You can run that flow from Codex, Hermes, OpenClaw, Claude, or any AI agent work product that can read files and run commands.

## Public Benchmark Result

[![AML Academic Textual #8](https://img.shields.io/badge/AML%20Academic%20Textual-%238-7C3AED)](https://agentmemories.ai/leaderboard/academic/textual)

The independent [FlowGrid AML Retriever](https://github.com/dlxeva/flowgrid-aml-retriever)
ranked **#8** in the first public Agent Memory Leaderboard Academic Textual
track, with an overall score of **43.98**, **1.08 points behind the top-ranked
entry**. [View the public leaderboard →](https://agentmemories.ai/leaderboard/academic/textual)

The competition entry and FlowGrid Core share ideas about evidence provenance,
temporal state, conflict preservation, and traceable retrieval, but they are
different systems. AML Retriever is a benchmark-specific deterministic
Add/Search system. FlowGrid Core is the local continuity product described
above. The ranking does not establish Core product quality, user adoption, or
universal superiority.

## Independent Runtime Experiments

FlowGrid's local-first CLI and protocol are the main product. Three independent
Expand Down
34 changes: 17 additions & 17 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,30 +11,13 @@
[![CI](https://github.com/dlxeva/FlowGrid/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/dlxeva/FlowGrid/actions/workflows/ci.yml)
![Python](https://img.shields.io/badge/python-%3E%3D3.10-3776AB?logo=python&logoColor=white)
[![License](https://img.shields.io/github/license/dlxeva/FlowGrid)](./LICENSE)
[![AML 学术文本榜 #8](https://img.shields.io/badge/AML%20Academic%20Textual-%238-7C3AED)](https://agentmemories.ai/leaderboard/academic/textual)

FlowGrid 帮助业务项目型知识工作者,把混乱的 AI 协作过程转成有状态边界、可追溯、可恢复的项目上下文。

> **当前状态:** 代码包版本仍为 `v0.3.0`,项目正在进行 v0.4 核心验证。当前重点是原始会话稳定入账、账本状态可重建,以及真实项目续接;目前不把 v0.4 宣称为正式发布版本。

它适合长期推进的模糊项目。此类项目的交付物通常不只是一份文档,还包括一条能被解释和质询的判断链:为什么这个方案成立,为什么选择这个方向,哪些备选被放弃,什么情况下旧判断需要修正。

## 公开评测成绩

独立参赛项目 [FlowGrid AML Retriever](https://github.com/dlxeva/flowgrid-aml-retriever)
在 Agent Memory Leaderboard 首期公开评测的学术方法文本记忆榜中位列
**第 8 名**,综合分 **43.98**,与榜首相差 **1.08 分**。
[查看公开榜单 →](https://agentmemories.ai/leaderboard/academic/textual)

参赛 Retriever 与 FlowGrid Core 共享证据来源、时间状态、冲突保留和可追溯检索等思想,
但两者不是同一个系统:

- **AML Retriever** 是针对统一评测契约构建的确定性 Add/Search 记忆检索器,负责保存消息、构建检索视图并返回排序后的原始证据。
- **FlowGrid Core** 是本地项目连续性层,负责保存经过审核的判断、约束、被否决路径、当前行动和长期人机项目的交接状态。

这项成绩验证的是参赛 Retriever 在 AML 统一环境中的表现,不等同于 FlowGrid Core
整体产品能力、用户采用情况,也不能证明它普遍优于其他记忆系统。

## 一张图看懂如何续接项目

![FlowGrid 项目续接生命周期](./docs/assets/flowgrid-lifecycle.svg)
Expand Down Expand Up @@ -112,6 +95,10 @@ flg context --mode resume
flg handoff
```

宿主应把一句带明确 owner 来源的短判断送入有来源的 capture 草稿,例如
`flg capture add`。会议、长讨论或包含多个产品信号的口述走 `flg closeout`。
只有项目名、没有来源归因和取舍关系的列表不生成决策候选。

跑完以后,你会得到:

- 一套本地项目账本:`PROJECT.md`、`FRAMING.md`、`DECISIONS.md`、`SNAPSHOT.md`、`PROGRESS.md`
Expand All @@ -124,6 +111,19 @@ flg handoff

这条流程可以运行在 Codex、Claude、OpenClaw、Hermes 或其他 AI agent work 产品里,不要求用户改用新的工作台。

## 公开评测成绩

[![AML 学术文本榜 #8](https://img.shields.io/badge/AML%20Academic%20Textual-%238-7C3AED)](https://agentmemories.ai/leaderboard/academic/textual)

独立参赛项目 [FlowGrid AML Retriever](https://github.com/dlxeva/flowgrid-aml-retriever)
在 Agent Memory Leaderboard 首期公开评测的学术方法文本记忆榜中位列
**第 8 名**,综合分 **43.98**,与榜首相差 **1.08 分**。
[查看公开榜单 →](https://agentmemories.ai/leaderboard/academic/textual)

参赛 Retriever 与 FlowGrid Core 共享证据来源、时间状态、冲突保留和可追溯检索等思想。
AML Retriever 是面向榜单契约的确定性 Add/Search 系统,FlowGrid Core 是上文描述的
本地项目连续性产品。这项成绩不构成 Core 产品质量、用户采用或普遍优越性的证明。

## 独立运行时实验

FlowGrid 的主产品仍是本地优先 CLI 与项目协议。三个独立仓库在受控运行环境或评测契约下验证部分思路:
Expand Down
14 changes: 14 additions & 0 deletions evals/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,20 @@ scenario; Context Pack is not assumed to outperform a clean raw history.

This directory contains scenario fixtures for evaluating that claim.

## External cold-start fixture preflight

The privacy-safe Windows + WorkBuddy fixture compares which known continuity
invariants are available in ordinary project files and a FlowGrid Context Pack:

```bash
python evals/cold_start_ab.py --output-dir evals/results
```

The deterministic result is recorded in
[`results/external-windows-workbuddy-cold-start.md`](results/external-windows-workbuddy-cold-start.md).
It measures input information only. A fresh-agent output A/B remains required
before claiming a continuation gain.

Real-project, dogfood, customer-field, and host-acceptance evidence is indexed
separately in [`case-registry.json`](case-registry.json). The registry records
both the supported claim and limitation of every case; it must not label
Expand Down
19 changes: 19 additions & 0 deletions evals/cold-start/external-windows-workbuddy/case.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# External Windows + WorkBuddy cold-start fixture

This fixture is a privacy-safe reconstruction of behavior visible in screenshots
from one external Windows + WorkBuddy use of FlowGrid. It is not a transcript,
testimonial, satisfaction claim, or cross-session result.

Observed behavior boundary:

- an external user installed and used FlowGrid on a real project;
- the agent used project framing, constraints, and decisions to resist a
physical-gardening/e-commerce interpretation of a mobile-game CSR project;
- D-001 through D-003 retained decision rationale and rejected paths while a
deck changed across three revisions;
- DAU, budget, average order value, and contracting entity remained unknown;
- Windows path handling caused friction;
- the screenshots came from one agent with its existing chat context.

The fixture tests only whether a cold-start input exposes the known continuity
invariants. It does not test model quality by itself.
31 changes: 31 additions & 0 deletions evals/cold-start/external-windows-workbuddy/flg-context-pack.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# FlowGrid Context Pack excerpt

## Current scope

The project is a CSR marketing campaign for a mobile game. It is not a
physical gardening, e-commerce, or physical-fulfillment project.

## Reviewed decisions

- D-001: Keep the campaign inside the mobile-game CSR scope. Reject physical
gardening and physical fulfillment because they change the product and
delivery object.
- D-002: Keep the channel brief aligned with the approved CSR mechanism while
the presentation deck changes visual form. A visual revision does not reopen
the project mechanism.
- D-003: Do not invent DAU, budget, average order value, or the contracting
entity. Keep each item as an owner-confirmation question until evidence is
supplied.

## Rejected paths

- physical gardening
- e-commerce
- physical fulfillment

## Unknowns

- DAU
- budget
- average order value
- contracting entity
15 changes: 15 additions & 0 deletions evals/cold-start/external-windows-workbuddy/invariants.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"case_id": "external-windows-workbuddy-cold-start-v1",
"modes": {
"no_flg": "no-flg-project-files.md",
"flg": "flg-context-pack.md"
},
"invariants": [
{"id": "scope-mobile-game-csr", "needles": ["mobile game", "CSR"]},
{"id": "reject-physical-gardening", "needles": ["reject", "physical gardening"]},
{"id": "reject-ecommerce", "needles": ["e-commerce", "rejected paths"]},
{"id": "preserve-d001-d003", "needles": ["D-001", "D-002", "D-003"]},
{"id": "do-not-invent-owner-facts", "needles": ["Do not invent", "DAU", "budget", "average order value", "contracting entity"]},
{"id": "visual-revision-does-not-reopen", "needles": ["visual revision", "does not reopen"]}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Ordinary project files

The project is a CSR marketing campaign for a mobile game. A presentation deck
has gone through three visual revisions. The next deliverable is a channel
brief. DAU, budget, average order value, and the contracting entity have not
been supplied in these files.
6 changes: 6 additions & 0 deletions evals/cold-start/external-windows-workbuddy/task.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Cold-start task

Review the incoming request to turn the project into a physical gardening and
e-commerce campaign. Produce a channel brief that preserves confirmed project
scope, does not revive rejected paths, and lists facts that still require owner
confirmation.
97 changes: 97 additions & 0 deletions evals/cold_start_ab.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
"""Deterministic preflight for the external-case cold-start A/B fixture."""

from __future__ import annotations

import argparse
import json
from datetime import date
from pathlib import Path


ROOT = Path(__file__).resolve().parent
DEFAULT_CASE = ROOT / "cold-start" / "external-windows-workbuddy"


def evaluate(case_dir: Path) -> dict:
config = json.loads((case_dir / "invariants.json").read_text(encoding="utf-8"))
results = {}
for mode, filename in config["modes"].items():
content = (case_dir / filename).read_text(encoding="utf-8").lower()
checks = []
for invariant in config["invariants"]:
passed = all(needle.lower() in content for needle in invariant["needles"])
checks.append({"id": invariant["id"], "passed": passed})
results[mode] = {
"passed": sum(item["passed"] for item in checks),
"total": len(checks),
"checks": checks,
}
return {
"case_id": config["case_id"],
"method": "deterministic input-invariant preflight",
"results": results,
"boundary": (
"Measures information available to a cold-start agent. Does not measure "
"agent output quality, user satisfaction, or cross-session improvement."
),
}


def render_markdown(report: dict) -> str:
no_flg = report["results"]["no_flg"]
flg = report["results"]["flg"]
lines = [
"# External Windows + WorkBuddy cold-start A/B preflight",
"",
f"Date: {date.today().isoformat()}",
"",
"## Result",
"",
f"- Ordinary project files: {no_flg['passed']}/{no_flg['total']} continuity invariants available",
f"- FlowGrid Context Pack: {flg['passed']}/{flg['total']} continuity invariants available",
"",
"| Invariant | Ordinary files | FlowGrid pack |",
"| --- | ---: | ---: |",
]
no_flg_checks = {item["id"]: item["passed"] for item in no_flg["checks"]}
flg_checks = {item["id"]: item["passed"] for item in flg["checks"]}
for invariant_id in no_flg_checks:
lines.append(
f"| `{invariant_id}` | {'pass' if no_flg_checks[invariant_id] else 'missing'} "
f"| {'pass' if flg_checks[invariant_id] else 'missing'} |"
)
lines.extend(
[
"",
"## Interpretation boundary",
"",
report["boundary"],
"",
"The observed screenshots establish real external use and behavior inside one existing chat context. "
"A fresh-agent output comparison is still required before claiming a continuation gain.",
"",
]
)
return "\n".join(lines)


def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument("--case-dir", type=Path, default=DEFAULT_CASE)
parser.add_argument("--output-dir", type=Path)
args = parser.parse_args()
report = evaluate(args.case_dir)
print(json.dumps(report, ensure_ascii=False, indent=2))
if args.output_dir:
args.output_dir.mkdir(parents=True, exist_ok=True)
(args.output_dir / "external-windows-workbuddy-cold-start.json").write_text(
json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8"
)
(args.output_dir / "external-windows-workbuddy-cold-start.md").write_text(
render_markdown(report), encoding="utf-8"
)
return 0


if __name__ == "__main__":
raise SystemExit(main())
31 changes: 31 additions & 0 deletions evals/results/external-windows-workbuddy-cold-start.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"case_id": "external-windows-workbuddy-cold-start-v1",
"method": "deterministic input-invariant preflight",
"results": {
"no_flg": {
"passed": 1,
"total": 6,
"checks": [
{"id": "scope-mobile-game-csr", "passed": true},
{"id": "reject-physical-gardening", "passed": false},
{"id": "reject-ecommerce", "passed": false},
{"id": "preserve-d001-d003", "passed": false},
{"id": "do-not-invent-owner-facts", "passed": false},
{"id": "visual-revision-does-not-reopen", "passed": false}
]
},
"flg": {
"passed": 6,
"total": 6,
"checks": [
{"id": "scope-mobile-game-csr", "passed": true},
{"id": "reject-physical-gardening", "passed": true},
{"id": "reject-ecommerce", "passed": true},
{"id": "preserve-d001-d003", "passed": true},
{"id": "do-not-invent-owner-facts", "passed": true},
{"id": "visual-revision-does-not-reopen", "passed": true}
]
}
},
"boundary": "Measures information available to a cold-start agent. Does not measure agent output quality, user satisfaction, or cross-session improvement."
}
Loading
Loading