Releases: joinwell52-AI/FCoP
Release list
fcop & fcop-mcp 3.2.5
fcop & fcop-mcp 3.2.5
Install
pip install fcop==3.2.5
pip install fcop-mcp==3.2.5Changes
Changed — fcop
- Rule 0.a.1 整段重写 — 协作闭环改为
task → 执行/派发 → report → 等待验收/按授权 archive;执行者默认不得
自行archive_task。 - 新增 Rule 0.a.2–0.a.6 — Hot/Cold Path、生命周期≠业务完成、主子任务治理、
归档需授权、REPORT 即停步信号。 - Bundled rules bump —
fcop-rules.mdc/fcop-protocol.mdcfrontmatter
升至 3.2.5(与包版本 lockstep)。 write_task(..., parent=...)—TaskFrontmatter.parent一等字段;
parse_task_frontmatter/serialize_task_frontmatter/ MCPwrite_task/
create_task支持程序化写入parent:(与thread_key:并列规范字段)。_COMMON-FCOP-3.2.5.md— 34 份角色 charter 统一注入源;
scripts/inject_workflow_constraint.py改为读取 common 文件并替换旧块。fcop-protocol.mdc— 新增 Rule 0.a 协作闭环 commentary 节。letter-to-admin.{zh,en}.md— 顶部 v3.2.5 摘要块;规则版本说明对齐 3.2.5。
Changed — fcop-mcp
- 14 个 MCP 工具 docstring — 同步 3.2.5 语义(Hot/Cold Path、授权归档、
REPORT 停步、lifecycle≠业务完成);含finish_task/reject_task测试缺口补齐。 fcop_report/fcop_check/finish_task/archive_task/
write_reportdocstrings — 同步 3.2.5 语义(授权归档、REPORT 停步、
lifecycle≠业务完成)。write_task/create_task— 新增parent参数。
Docs
docs/releases/3.2.5.md— 本版本 release notes。
Tests
- 更新
test_server/test_rules_text_regression/test_role_templates/
test_core_frontmatter,不再锁死旧四步「执行者必 archive」表述;
TestMcpToolDocstrings32514 passed。
See the full CHANGELOG.
fcop & fcop-mcp 3.2.4
fcop & fcop-mcp 3.2.4
Install
pip install fcop==3.2.4
pip install fcop-mcp==3.2.4Changes
Fixed — fcop
fcop-protocol.mdc(bundled) — restored valid UTF-8 after v3.2.3 wheel shipped
mojibake insrc/fcop/rules/_data/fcop-protocol.mdc(regression from v3.2.3 release
sync). PyPI 3.2.3 wheels are immutable; installfcop>=3.2.4for a correct
bundled copy. After upgrade, runredeploy_rules()to refresh project-local
.cursor/rules/copies.
Fixed — fcop-mcp
[project.urls]"FCoP (protocol)"— pointed at removed
docs/fcop-standalone.en.md(404 since v1.0.0); now
docs/getting-started.en.md(per ADR-0015 merge).mcp/README.md(PyPI long description) — aligned with v3.2.3+ surface:
45 MCP tools,_lifecycle/topology, lockstepfcop 3.2.xinstall guidance
(replaces stale v2.0.2 / 35-tool text frozen on PyPI 3.2.3).
Docs
docs/releases/3.2.4.md— release notes for this patch.docs/releases/3.2.3.md— documents known bad wheel encoding on PyPI 3.2.3.
No API or protocol-schema changes (fcop_rules_version / fcop_protocol_version
remain 3.2.3).
See the full CHANGELOG.
fcop & fcop-mcp 3.0.2
fcop & fcop-mcp 3.0.2
Install
pip install fcop==3.0.2
pip install fcop-mcp==3.0.2Changes
Fixed / 修复
- Critical ·
init_*did not create_lifecycle/. FCoP 3.0
spec §1.1 mandates the v3 five-bucket topology (_lifecycle/{inbox, active,review,done,archive}/), butProject._apply_initin 3.0.0 /
3.0.1 only created legacy v2 directories (tasks/,reports/,
issues/,shared/,log/) and skipped the lifecycle layer.
Every fresh project initialised on 3.0.0–3.0.1 was therefore
born non-compliant with the 3.0 spec. Tracked as
ISSUE-20260522-001-ME/TASK-20260522-004-ADMIN-to-ME. _apply_initnow callsensure_lifecycle_dirs(...)and refreshes
the cached topology soProject.is_v3andtasks_dir/
reports_dir/issues_dirresolve to v3 paths immediately
after init. Per spec §6 the superseded v2 buckets (tasks/,
log/) are no longer created on fresh init;reports//
issues//shared/are retained for hybrid compatibility.core.events.scan_workspacenow scans_lifecycle/{inbox,active, review,done,archive}/so v3-native events (TASK_CREATED etc.)
fire correctly.Project.role_occupancy()now reads archived task counts from
_lifecycle/archive/for v3 projects (and continues to read
log/tasks/for v2 projects).
Added / 新增
Project._scan_lifecycle_topology_compliance()audit scan (D9):- P0 — initialised project missing both
_lifecycle/and
any v2 content ⇒ topology layer is absent. - P1 —
_lifecycle/present andtasks//log/still
contain files ⇒ co-existing topologies, run
python -m fcop migrate --to-v3to consolidate.
Wired intoaudit(scope="new" | "upgrade" | "takeover").
- P0 — initialised project missing both
tests/test_init_v3_topology.py— 7 new tests covering
init_solo/init_project/init_customv3 topology and the
Project.is_v3/ path-accessor invariants.
Documentation / 文档
fcop/LETTER-TO-ADMIN.md— keeps the existing v3 promise; adds
"3.0.2 起 fresh init 立即兑现" note plus dual-path guidance
(init / migrate).README.md/README.zh.md— patch banner pointing at the
3.0.2 init-fix.- MCP tool descriptors (
init_solo/init_project/
create_custom_team) call out v3_lifecycle/topology
explicitly.
Test
- All 1209 tests pass (3 skipped, 1 warning).
Migration
- Existing v2 projects: unaffected. Run
python -m fcop migrate --to-v3if/when ready to adopt v3. - 3.0.0 / 3.0.1 fresh-init projects that look like v2 on disk
(no_lifecycle/): treated as v2 by every code path; either
re-init under 3.0.2 or runmigrate --to-v3to upgrade. - No breaking changes vs. 3.0.1 surface — this is a SemVer
patch (init was doing the wrong thing; the contract was
already in §1.1 of the 3.0 spec).
See the full CHANGELOG.
FCoP 3.0.1 - Path-Consolidation Patch
FCoP 3.0.1 — Path-Consolidation Patch
A pure documentation patch on top of 3.0.0. No code logic changed.
Why this exists
3.0.0 moved historical v1.0/v1.1 spec drafts into spec/archived/ to keep the spec/ root clean. But several live references (agent-facing docs, bundled rules, MCP docstrings) were still pointing at the old paths and silently link-rotted after the move.
3.0.1 fixes every such reference and also corrects a long-standing docstring mismatch in fcop-mcp where two MCP resources (fcop://spec / fcop://spec/en) claimed to return v1.0 spec text but actually return v1.1.
What changed
AGENTS.md/CLAUDE.md— 22 path references updated to point atspec/archived/- Bundled Cursor rules —
src/fcop/rules/_data/fcop-{rules,protocol}.mdc(wheel-embedded) +.cursor/rules/mirrors - JSON Schema descriptions —
spec/schemas/{event,encoding}.schema.json+ theirsrc/fcop/_data/schemas/copies fcop-mcpresource docstrings —fcop://specandfcop://spec/ennow correctly state they returnfcop-spec-v1.1.{lang}.md(the file actually bundled), and explicitly point readers tospec/fcop-3.0-spec.mdfor current canonical semantics- Bumps —
fcopandfcop-mcpboth 3.0.0 → 3.0.1;CITATION.cffupdated
What did NOT change
- No code logic changed. This is purely documentation / metadata.
- Historical artifacts (TASK / REPORT / ADR / release notes / migration docs) preserved verbatim per FCoP's "history is not rewritten" principle (ADR-0036)
fcop.rules.get_spec()still returns v1.1 spec text. Bundling the FCoP 3.0 spec into the wheel is deferred per ADR-0039 Freeze Discipline — it requires a real runtime pressure signal before changing what gets shipped in the wheel.
Install
pip install -U fcop fcop-mcpVerify
- PyPI: https://pypi.org/project/fcop/3.0.1/ · https://pypi.org/project/fcop-mcp/3.0.1/
- MCP Registry:
io.github.joinwell52-AI/fcop-mcp@3.0.1(pending re-auth) - All 1202 tests pass
FCoP 3.0.0 - Protocol Semantic Sealing
FCoP 3.0.0 — Protocol Semantic Sealing
Files carry protocol. Paths address state. Events replay transitions.
文件即协议;位置定义状态;事件记录历史。
FCoP 3.0 is the protocol's first semantic seal. It marks the end of the design era and the beginning of the Runtime Absorption Era (ADR-0039).
From this date forward, the protocol surface is frozen. The only legitimate trigger for a future change is documented runtime pressure from a real coordination scenario — not theoretical purity, aesthetic extension, or completeness urge.
Canonical one-liner shown above is Layer 1 (cognitive bootstrap). The compressed formal definition (Layer 2 — "Files externalize protocol semantics. Paths address state. Events are replayable evidence of state transitions.") lives in spec §0.2. Rationale for the two-layer split: ADR-0040.
What's New
Protocol layer
- State Ontology (frozen) — 5 stages (
inbox/active/review/done/archive) defined by physical file location under_lifecycle/. (ADR-0035) - Event Layer — append-only
transitions:array in YAML frontmatter records every state change. (ADR-0036) - Boundary Charter — meta-charter declaring what FCoP is not. (ADR-0038)
- Freeze Discipline — self-binding meta-rule closing the protocol-design era. (ADR-0039)
- Canonical Two-Layer Convention — splits the canonical one-liner into a teaching layer and a formal-definition layer. (ADR-0040)
- Custody rejected as a separate layer — preserved as informative note (NOTE-custody-is-not-a-layer) and field-report essay (the-day-we-almost-added-custody).
Reference implementation
- New
fcop.lifecyclesubpackage:state/transitions/events/atomic/detect/migrate Projectfacade now detects topology (empty/v2/v3/mixed) and exposeslifecycle_root/inbox_dir/active_dir/review_dir/done_dir/archive_dirwrite_task+archive_tasktransparently route through the lifecycle primitives on v3 projects — CodeFlow and any other v2-era caller continues to work unmodified- 35 MCP tools annotated with
tier:L1/tier:L2/tier:L3tags per spec §8
Migration
- New CLI:
fcop migrate --to-v3(dry-run by default;--applyto execute) - Git-aware (uses
git mvwhen the workspace is tracked) - Stamps synthetic baseline events on pre-existing files
- Idempotent — safe to re-run
Documentation
- Bilingual formal spec:
spec/fcop-3.0-spec.md+.zh.md - Bilingual IETF-style RFC:
spec/fcop-3.0-rfc.md+.zh.md - Bilingual migration guide:
docs/MIGRATION-3.0.md+.zh.md - Architecture diagrams (English, 中文)
Breaking Changes
- Directory topology changes for v3 projects:
tasks/andlog/tasks/no longer exist; everything lives under_lifecycle/{inbox,active,review,done,archive}/ - v2 projects continue to work unchanged — opt-in to v3 via
fcop migrate --to-v3 - No automatic migration in
Project.__init__; explicit CLI command required
See docs/MIGRATION-3.0.md for the full migration walkthrough.
Install
# Python library
pip install fcop==3.0.0
# MCP server (any client: Cursor / Claude Desktop / PulseMCP / Cline / ...)
uvx fcop-mcp
pip install fcop-mcp==3.0.0The MCP server is also listed in the official MCP registry as io.github.joinwell52-AI/fcop@3.0.0.
Engineering Numbers
- 1202 tests passing · 0 regressions · 3 skipped
- 0 new public methods on
Project(the spec verbs are emitted as eventtoolnames, not added as API) - 35 MCP tools — 2 L1 + 18 L2 + 15 L3 (exhaustive)
ruffclean acrosssrc/fcop,mcp/src/fcop_mcp,tests/mypy --strictclean across the lifecycle subpackage
The Era This Opens
Adopting 3.0 is the moment FCoP stops being a designed protocol and starts being a lived one. The next protocol change — whenever it comes — will not have been imagined. It will have been observed.
Filed 2026-05-21 · the day the design era ended.
Full changelog: CHANGELOG.md [3.0.0]
fcop & fcop-mcp 2.0.2
fcop & fcop-mcp 2.0.2
Install
pip install fcop==2.0.2
pip install fcop-mcp==2.0.2Changes
概述 / Overview
Milestone release: fcop-mcp officially registered to the MCP registry.
fcop-mcp 正式入驻由 Anthropic + GitHub + Microsoft 联合背书的官方
MCP 注册表,服务标识 io.github.joinwell52-AI/fcop。从此 Claude Desktop /
Cursor / PulseMCP 及任何 MCP 兼容客户端都可通过注册表发现并通过 uvx fcop-mcp
一键安装,无需手工编辑 mcp.json。
fcop-mcp is now in the official MCP registry maintained by Anthropic +
GitHub + Microsoft (io.github.joinwell52-AI/fcop). Claude Desktop,
Cursor, PulseMCP, and every MCP-compatible client can discover and
install it out of the box via uvx fcop-mcp.
版本号策略 / Versioning
v2.0.2 是 双包 lockstep 行政性 bump(per ADR-0002):
| 包 | v2.0.0 | v2.0.1 | v2.0.2 | 代码变更 |
|---|---|---|---|---|
fcop |
2.0.0 | (skipped) | 2.0.2 | 零行代码变更(版本号对齐) |
fcop-mcp |
2.0.0 | 2.0.1 (MCP-元数据 patch,PyPI 已发) | 2.0.2 | MCP registry 元数据 + 版本号对齐 |
关于 v2.0.1:fcop-mcp@2.0.1 是 2026-05-13 同日发布到 PyPI 的子集 patch,
仅包含 MCP registry 入驻所需的三件套(mcp/README.md加mcp-name验证
标记、mcp/server.json新建、mcp/src/fcop_mcp/_version.pybump)。本
CHANGELOG 不为 2.0.1 单列条目;它在 PyPI 上永久存在(fcop-mcp 2.0.1),
但 FCoP 仓库账本上的 release 是 v2.0.2——一个包含它的真超集。
feat(mcp-registry) — MCP registry 入驻 / Official MCP registry listing
mcp/README.md:顶部加mcp-name: io.github.joinwell52-AI/fcop
所有权验证标记(MCP registry 的命名空间认领要求);新增 v2.0.2 章节
作为 PyPI 长描述首段,显著标注"Now in the official MCP registry"。mcp/server.json(新文件):MCP registry 注册元数据,符合
https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json,
包含 server name、PyPI 包标识、stdio transport、FCOP_PROJECT_DIR
环境变量声明。- 注册命令:
.\mcp-publisher.exe publish(ADMIN 凭 GitHub OAuth token
执行,详见新文件fcop/shared/RULES-mcp-registry-release.md)。
docs(rules) — 新增"发版+备份一条龙"完整 SOP
本次随发版同步落地 TASK-013 / TASK-014 两条线程的所有 SOP 交付物:
fcop/shared/RULES-release-file-inventory.md(新文件):12 类发版相关
文件清单,每类配 6 字段(类码 / 类名 / 描述 / 文件枚举 / 修改义务 /
锁定风险 / SOP 引用)。其中 H/M/N 类专门覆盖 MCP registry 路径。fcop/shared/RULES-release-sync-checklist.md(已存在,升级):
从"三条不会变的硬约束"升级到四条,新增 4 · 一条龙发版+备份;
顶部新增 Section 0 · 元红线("如果未来 FCoP 成为标准,我们现在必须
非常认真")。fcop/shared/RULES-mcp-registry-release.md(新文件,本版本):
ADMIN 的"未来三步升级路径"落文件——_version.py+server.json
改版本号 →python -m build+twine upload→mcp-publisher publish。docs/release-process.md(已存在,升级):新增 §阶段 4.5 · 备份
镜像同步,把git push backup main+git push backup --tags提升
为发版"一条龙"必经的最后一里;§C 加文件清单指针;§C.3 hardcoded
断言精确到 5 处行号;§G 加第 6 条扫描("backup remote 是否配置")。- 第二处镜像
joinwell52-AI/FCoP-backup(append-only 备份),把
FCoP 总部从单点失效保护起来。
docs(public) — 三处对外门面同步
README.md/README.zh.md:badge 从release-2.0.0升release-2.0.2,
新增 MCP registry purple badge;recent releases 表格首行加2.0.2行;
"Status & versioning · Current release" 段整段重写,首句强调 MCP
registry 入驻。docs/index.html(GitHub Pages):顶部 latest 链接 + 中英双语 v2.0
段落整体重写,把 MCP registry 入驻放在最显著位置。
docs(citation) — Zenodo 学术快照刷新(第二段 commit 写入)
Rule 0.c 时序声明:本节内容在第一段 commit 时尚未发生,
待 ADMIN 通过 Zenodoreleasesintegration 触发新快照、拿到新 DOI
后由 agent 在 v2.0.2 的第二段 release commit 中追加,所以本节
在第一段 commit 的 CHANGELOG 里只占位预告,真实内容随第二段 commit 落实。
CITATION.cff:research-snapshot-2026-04-29(DOI10.5281/zenodo.19886036)
→ v2.0.2 学术快照(DOI10.5281/zenodo.XXXXXXXX,待 ADMIN 提供)。
version/date-released/preferred-citation.{doi,url,version}
/identifiers[0].{value,description}同步刷新。README.md/README.zh.md的 "How to cite" 节、BibTeX 模板的
version/doi/url同步指向新 DOI。
验收 / Acceptance
第一段 commit 已实证(2026-05-13 release prep):
-
src/fcop/_version.py=mcp/src/fcop_mcp/_version.py=2.0.2 -
mcp/server.json两处 version =2.0.2 - README.md / README.zh.md / docs/index.html / mcp/README.md 四份对外
门面同步 v2.0.2 + MCP registry 入驻段就位 - FCoP 账本 TASK-014 落档,REPORT-014 第一段写完;
fcop/shared/RULES-mcp-registry-release.md落档 - 第一段 commit 三方 push(origin + backup main + backup tags)
SHA 字节级一致(无新 tag,只 push main)
第二段 commit 待实证(ADMIN 介入 + agent 收尾):
- PyPI 双包均可见:
pip install fcop==2.0.2+pip install fcop-mcp==2.0.2成功(ADMIN twine upload) - modelcontextprotocol.io 显示
io.github.joinwell52-AI/fcopversion 2.0.2(ADMIN mcp-publisher publish) - Zenodo 新 DOI 可访问;
CITATION.cff+README.{md,zh.md}How to cite段已用新 DOI 更新 - git tag
v2.0.2存在(指向第二段 commit),三方 SHA(local / origin / backup)字节级一致 - REPORT-014 第二段补完 + archive TASK-014 + REPORT-014
See the full CHANGELOG.
fcop & fcop-mcp 2.0.0
fcop & fcop-mcp 2.0.0
Install
pip install fcop==2.0.0
pip install fcop-mcp==2.0.0Changes
概述 / Overview
Philosophical major release("两图对偶"纪元)。
2.0.0 不是 API 破坏性变更——所有 1.x 的公开 API 全部继续工作
(per ADR-0003 附加性扩展),主版本号跨越的原因是协议哲学层面的
固化:
- 执行哲学的五层垂直栈(v1.x 已稳定)—— 协议层 / 文件 / 角色 /
IPC / 审计; - 演化哲学的七节点闭环(v2.0 新固化)—— FCoP Semantic
Evolution Loop(涌现 → 观察 → 提案 → 评审 → 合并 → 部署 →
反射),见fcop-rules.mdc七大核心概念末尾的新增插图与
fcop-protocol.mdc## Two-Diagram Duality节。
这两张图共同定义 FCoP 协议;缺任何一张都讲不全。2.0.0 = 协议
首次同时承认这两张图。
feat(rules) — Rule 4.6 · 内 / 外档案体系 soft convention
新增 fcop-rules.mdc Rule 4.6:项目档案分两个体系,互不混用:
fcop/internal/(新增桶,opt-in)—— 团队内部归档(决策草稿、
日志、内部复盘);只对项目内角色可见。docs/与essays/(已有惯例)—— 面向外部受众的发布物(产品文档、
公开博文、规范)。
internal-only 声明语法 v1:内部文档顶部必须带一段
Markdown block 显式声明可见性边界(被 fcop_audit 的新增 P3
suggestion 巡查检测;P3 不阻塞构建,仅建议)。完整语法见
internal-readme.{zh,en}.md 模板。
feat(rules + commentary) — fcop_rules_version 2.4.0 → 3.0.0 / fcop_protocol_version 2.4.0 → 3.0.0
src/fcop/rules/_data/fcop-rules.mdc:新增 Rule 4.6;
"七大核心概念"末尾追加 FCoP Semantic Evolution Loop 七节点闭环
图与说明。src/fcop/rules/_data/fcop-protocol.mdc:新增
## Two-Diagram Duality / 双图对偶(执行 vs 演化)与
## How Rule 4.6 Applies: Internal vs External Document Convention
两节。- 同步部署到项目根
.cursor/rules/*.mdc、AGENTS.md、CLAUDE.md
四件套(per ADR-0006)。
feat(api) — Project.init(deploy_internal_template=...) opt-in
src/fcop/project.py:
Project.init()/init_solo()/init_custom()三个入口都
新增deploy_internal_template: bool = False参数(默认 不
部署,向后兼容)。开启后会在fcop/internal/README.md落一份
对应语言(zh / en)的模板。- 新增内部方法
_deposit_internal_template(lang, *, force)。
新公开符号:
fcop.rules.get_internal_readme(lang)—— 取 zh / en 模板字符串。Project.init*系列新增deploy_internal_template关键字参数。
(per ADR-0003:附加性扩展;tests/test_fcop/snapshots/public_surface.json
已通过 pytest --snapshot-update 一次性收录)
feat(audit) — P3 严重度档 + internal-only 声明 P3 巡查
src/fcop/inspection.py + src/fcop/project.py:
ViolationSeverity加P3(建议级,不阻塞)。InspectionReport加p3_count与
violation_file_count(distinct file count)字段;overall_status
逻辑保证 P3-only 状态不会触发needs_remediation。- 新增
_scan_internal_only_declarations():扫fcop/internal/*.md
的internal-only声明合规性,缺失时记 P3 建议。
feat(team-templates) — 8 个 TEAM-OPERATING-RULES.md 追加 §internal-only 节
src/fcop/teams/_data/{dev,media,mvp,qa}-team/TEAM-OPERATING-RULES.{md,en.md}
(共 8 份)末尾追加 §internal-only 声明语法(v3.0+,per Rule 4.6)
小节,给团队 leader 提供"团队级内 / 外文档怎么分"的可操作蓝本。
Fixed — codeflow 跨项目巡检上报的 3 个 fcop 上游 bug
随 codeflow 项目 TASK-20260513-003 / -004 上报、本次 2.0.0 sprint
一并并入(不开 2.0.1 patch):
- ISSUE-20260513-008 ·
fcop_audit不豁免_archive/与
log/,导致合规归档文件被误报P1-002 misplaced_envelope。
修复:src/fcop/project.py新增_AUDIT_EXEMPT_DIR_NAMES
豁免清单(log/_archive/legacy-non-protocol/.git/
.tmp)与帮手_is_audit_exempt_path();
_scan_misplaced_envelopes()与_scan_ghost_prefixes()都先过
豁免再判定。InspectionReport同步加violation_file_count
字段。 - ISSUE-20260513-009 ·
_read_local_rules_version永远返回
null——函数搜的字面量是"Rules version:",但 2.0.0 起规范
字段是 frontmatter 的fcop_rules_version:。修复:重写解析
顺序为 frontmatter 优先 + 旧哨兵 fallback,向后兼容老 1.x
项目。 - ISSUE-20260513-010 · 4 个团队的
PM.md角色模板停留在
v1.3.0,缺supersedes/risk_level/ REVIEW envelope 三段。
修复:彻底重写dev-team/roles/PM.{md,en.md}为 leader 视角的
v1.0 ~ v1.5 协议更新速查;同步把"v1.0 ~ v1.4 协议更新"段追加到
其他 leader 模板(PUBLISHER / MARKETER / LEAD-QA / ME,共 10
份);并给全部 24 份角色模板补一段 "Rule 4.6 and the Evolution
Loop (v2.0)",让_scan_outdated_role_docs的版本字面量检查
不再误报。
三份 ISSUE 已标 status: resolved,证据链见
fcop/log/reports/REPORT-20260513-009-ME-to-ADMIN.md。
Tests / 回归证据
python -m pytest tests/ -q
→ 1060 passed, 3 skipped, 1 warning, 0 failed(129.01s)python -m pytest mcp/tests/ -q
→ 70 passed, 2 skipped, 2 warnings, 0 failed(2.50s)python -m ruff check src/ tests/ mcp/src/
→ All checks passed!
tests/test_fcop/test_rules_text_regression.py 把
fcop_rules_version / fcop_protocol_version 的可接受范围从
1.X.0 | 2.X.0 扩到 1.X.0 | 2+.X.0,吸收 3.0.0 升版。
Version bumps(两包 lockstep)
src/fcop/_version.py—— 1.6.0 → 2.0.0mcp/src/fcop_mcp/_version.py—— 1.6.0 → 2.0.0mcp/pyproject.toml——fcop依赖约束>=1.0,<2.0→>=2.0,<3.0
不在本次发布范围内 / Out of scope
- 任何 1.x API 移除 ——
2.0.0是 philosophical major,不是
API-breaking major。任何已弃用 API 仍按 ADR-0003 的弃用周期
滚动。 - 背景线程 / scheduler —— v1.0 frozen event model 仍要求
Project.poll_once()显式驱动;2.0.0不改这一约束。
升级路径 / Upgrade Path
pip install -U fcop[-mcp]==2.0.0- ADMIN 在每个项目里调一次
redeploy_rules()(agent 不得自调,
per Rule 8 + ADR-0006),把.cursor/rules/*.mdc+AGENTS.mdCLAUDE.md四件套同步到 rules 3.0.0 / protocol 3.0.0。
- 想用
fcop/internal/桶的项目,在新建项目时传
Project.init(deploy_internal_template=True);老项目用
redeploy_rules()后手动mkdir fcop/internal/加一份
README.md(模板内容来自fcop.rules.get_internal_readme("zh"))。
See the full CHANGELOG.
fcop & fcop-mcp 1.6.0
fcop & fcop-mcp 1.6.0
Install
pip install fcop==1.6.0
pip install fcop-mcp==1.6.0Changes
feat(filename/protocol) — Trailing-slug filename adoption(ADR-0033)
核心变化:把 codeflow 项目 22+ 例自发涌现的"长文件名"模式
正式收编入 FCoP 文件名文法。TASK / REPORT / ISSUE 三种 envelope
现在允许在路由字段尾部追加一个可选的 -{slug} 段:
TASK-20260512-025-PM-to-OPS-phase-a-fix-naming.md ← 现在合法
REPORT-20260512-009-OPS-to-PM-codeflow-json-rm.md ← 现在合法
ISSUE-20260512-001-PM-userhome-pollution.md ← 现在合法
文法:_SLUG = [a-z](?:[a-z0-9-]*[a-z0-9])?
- 起手:小写字母(强制,与
_ROLE段消歧) - 中段:小写字母 / 数字 / 连字符
- 收尾:小写字母或数字(禁止尾部 hyphen)
slug 不参与路由:工具仍按 sender / recipient / slot 调度;slug
只是人类可读标签,不创造新索引维度。list_tasks(recipient="OPS") 同时
匹配 ...-PM-to-OPS.md 与 ...-PM-to-OPS-anything.md。
完全向后兼容
- 每一份 pre-1.6 的合法文件名继续合法
parse_*_filename在旧文件名上返回slug=Nonebuild_*_filename(slug=None)是缺省,行为与 1.5.x 等价- 既有 1057 个单测全部通过(0 回归)
变更内容
src/fcop/core/filename.py:- 新增
_SLUG子模式 +SLUG_RE导出常量 TASK_FILENAME_RE/REPORT_FILENAME_RE/ISSUE_FILENAME_RE
末尾追加(?:-(_SLUG))?段TaskFilename/ReportFilename/IssueFilenamedataclass
增加slug: str | None = None字段parse_*_filename/build_*_filename全面支持 slug_check_components校验 slug 合规
- 新增
tests/test_fcop/test_core_filename.py:新增 31 个测试覆盖 trailing-slug
三种 envelope 的 parse / build / roundtrip / 拒绝非法 / 向后兼容 /
大写后缀消歧src/fcop/rules/_data/fcop-protocol.mdc:fcop_protocol_version2.3.0 → 2.4.0- "## File Naming" 节后新增 "### Trailing slug (optional)" 子节
- 末尾 changelog 加 v2.4 条目
src/fcop/_version.py+mcp/src/fcop_mcp/_version.py:
1.5.1 → 1.6.0
不在本次发布范围内
fcop-rules.mdc:未改。规则本体未变,trailing slug 是 commentary
层面 additive convention,不需要新规则。fcop_audit():未改。该工具不查文件名词法,新增 slug 自然被
parse_*原生支持,无需 audit 介入。.cursor/rules/fcop-protocol.mdc(项目根部署副本):由 ADMIN 安装
1.6.0 后通过redeploy_rules()同步(per Rule 8 + ADR-0006)。
动机与设计哲学
长文件名是不是已经属于合规了?像这样的?
— ADMIN, 2026-05-12
经过 regex 实测 + fcop_audit 全面盘点,发现这些长文件名落在协议
规则、解析器、审计工具三者交集的空白处:
| 维度 | 状态 |
|---|---|
parse_task_filename(...) |
返回 None(regex 不匹配) |
fcop_audit() |
不报告(scan 没覆盖) |
| 协议规则原文 | 未规定 |
| 实际落盘文件 | 22+ 例已在 codeflow,Rule 5 禁止改名 |
三种选项,ADMIN 选定 A · 协议收编:
A,协议收编,因为 agent 之间看得懂; — ADMIN, 2026-05-12
这一句点中要害 —— 当 agent 在硬盘上彼此识别这套模式时,协议本来
就应该把它说清。本次发布是 FCoP "从涌现学习,沉淀为协议" 设计
哲学的一次自我应用:MINOR additive,零破坏成本,完全向后兼容。
参考
- ADR-0033: Trailing Slug Filename Adoption
- ADR-0002: FCoP Filename Grammar(原文法定义)
- ADR-0003: Pre-1.0 Stability Charter §MINOR additive
- 同期 task:
fcop/tasks/TASK-20260512-006-ADMIN-to-ME.md
See the full CHANGELOG.
fcop 1.5.1 - version string alignment patch
fcop & fcop-mcp 1.5.1
Install
pip install fcop==1.5.1
pip install fcop-mcp==1.5.1Changes
fix(docs) — 版本字符串对齐补丁
核心问题:v1.5.0 发布后发现 letter-to-admin.{zh,en}.md 的摘要块停留在
v1.5.0 摘要 标注正确,但 fcop-protocol.mdc 版本引用写成了 2.2.0(实际
已升至 2.3.0),违反了发版前版本对齐必检项。同时 test_server.py 里的
断言也未随上一批文档修复同步。
变更内容(纯文档 / 测试修复,无功能变更):
src/fcop/rules/_data/letter-to-admin.{zh,en}.md:摘要块升至v1.5.1;
修正fcop-protocol.mdc 2.2.0→2.3.0src/fcop/_version.py:1.5.0 → 1.5.1src/fcop/rules/_data/fcop-rules.mdc:2.4.0 changelog 条目注明 1.5.1 为 no-rule-change patchsrc/fcop/rules/_data/fcop-protocol.mdc:Protocol Version Log v2.3 条目注明 1.5.1 no commentary changetests/test_fcop/test_rules.py+tests/test_fcop_mcp/test_server.py:断言更新至v1.5.1 摘要
根因分析:发版流程中 Phase 3-V(版本字符串全文对齐)检查项执行不到位,
fcop-protocol.mdc 版本在 v1.5.0 升至 2.3.0 但 letter 里的引用未同步。
已在 RELEASE-CHECKLIST.md 强化了该检查项,要求发版前逐项人工过一遍。
See the full CHANGELOG.
fcop & fcop-mcp 1.5.0
fcop & fcop-mcp 1.5.0
Install
pip install fcop==1.5.0
pip install fcop-mcp==1.5.0Changes
docs(P1) — 84 份角色/团队文档同步至 v1.4 协议
核心问题:v1.4.0 发布后,fcop/shared/roles/ 里已部署的角色文档与团队模板
仍停留在 v1.1 内容层,不包含 REVIEW envelope / risk_level / fcop_audit /
supersedes: 等 v1.0~v1.4 引入的关键协议能力,新接手项目的 Agent 读取这些文档后
感知不到新功能(协议能力认知漂移 RULE_DOC_DRIFT)。
变更内容(涉及 58 个文件):
- 非 leader 角色文档 × 20 份(中英双语):DEV / QA / OPS / WRITER / TESTER 等,
新增"v1.0 ~ v1.4 协议更新速查"节,含 REVIEW envelope /risk_level/
fcop_audit与 INSPECTION /supersedes:字段四小节 - TEAM-ROLES × 10 份(5 团队 × 中英):新增"协议演进说明(v1.0 ~ v1.4)"表格
- TEAM-OPERATING-RULES × 10 份(5 团队 × 中英):新增"协议演进补记"节,
含高风险任务审批 /fcop_audit整改处理 / write-side 绑定规则三段 - team README × 10 份(5 团队 × 中英):新增"工具速查链接"表格
docs/getting-started.{zh,en}.md:新增"fcop_audit 三场景体检"节src/fcop/rules/_data/agent-install-prompt.{zh,en}.md:装完即跑fcop_audit()提示
feat(audit/P2) — _scan_outdated_role_docs() + RULE_DOC_DRIFT
新增 Project._scan_outdated_role_docs() 扫描方法(scope=upgrade/takeover):
- 读取已安装
fcop包版本(major.minor) - Glob
fcop/shared/roles/*.md,对每个文件用正则提取最高版本号引用 - 无版本引用,或版本 gap > 1 minor → 记入
Violation(severity=P1, rule="RULE_DOC_DRIFT") - 整改建议:
deploy_role_templates(force=True)重新部署最新角色模板
ADR-0032 同步更新:新增 §4.7 _scan_outdated_role_docs() + RULE_DOC_DRIFT 违规类型
测试:tests/test_fcop/test_audit.py 新增 4 个测试用例(无 roles 目录 / 无版本引用 / 版本落后 / 当前版本)
fix(ci) — Protocol v2.2 日志 + drop_suggestion 豁免
fcop-protocol.mdc正文补录v2.2Protocol Version Log 条目(CI 测试验收)mcp/src/fcop_mcp/server.py:drop_suggestion加入_INIT_TOOLS豁免,
使其在项目初始化前也可向.fcop/proposals/写入建议文件(轻量级预初始化操作)
docs — Essays 07-10 + essays/README.md
- essay 07
when-agents-learn-from-their-own-wreckage.md:codeflow 一日 14 个涌现现场报告 - essay 08
why-the-protocol-stays-short.md:协议为什么短,历史为什么长 - essay 09
gate-design-pitfalls-case-studies.md:validator-validates-itself 案例分析 - essay 10
the-supersedes-field-story.md:supersedes:字段两小时旅程 essays/README.md:10 篇文章完整索引 + 分类阅读建议adr/README.md:嵌入三层语义执行链模型图
See the full CHANGELOG.