fcop 2.0.2__tar.gz → 3.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. {fcop-2.0.2 → fcop-3.0.2}/.gitignore +19 -0
  2. {fcop-2.0.2 → fcop-3.0.2}/CHANGELOG.md +275 -0
  3. {fcop-2.0.2 → fcop-3.0.2}/PKG-INFO +1 -1
  4. {fcop-2.0.2 → fcop-3.0.2}/README.md +46 -16
  5. {fcop-2.0.2 → fcop-3.0.2}/README.zh.md +41 -16
  6. {fcop-2.0.2 → fcop-3.0.2}/adr/README.md +7 -0
  7. fcop-3.0.2/spec/README.md +27 -0
  8. fcop-3.0.2/spec/archived/README.md +36 -0
  9. {fcop-2.0.2 → fcop-3.0.2}/spec/schemas/README.md +2 -2
  10. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/_data/schemas/encoding.schema.json +1 -1
  11. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/_data/schemas/event.schema.json +1 -1
  12. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/_version.py +1 -1
  13. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/cli/_main.py +5 -2
  14. fcop-3.0.2/src/fcop/cli/migrate_v3.py +138 -0
  15. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/core/events.py +9 -0
  16. fcop-3.0.2/src/fcop/lifecycle/__init__.py +140 -0
  17. fcop-3.0.2/src/fcop/lifecycle/atomic.py +293 -0
  18. fcop-3.0.2/src/fcop/lifecycle/detect.py +233 -0
  19. fcop-3.0.2/src/fcop/lifecycle/events.py +340 -0
  20. fcop-3.0.2/src/fcop/lifecycle/migrate.py +573 -0
  21. fcop-3.0.2/src/fcop/lifecycle/state.py +210 -0
  22. fcop-3.0.2/src/fcop/lifecycle/transitions.py +167 -0
  23. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/project.py +492 -32
  24. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/rules/_data/fcop-protocol.mdc +4 -4
  25. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/rules/_data/fcop-rules.mdc +5 -5
  26. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/rules/_data/letter-to-admin.en.md +19 -10
  27. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/rules/_data/letter-to-admin.zh.md +18 -10
  28. {fcop-2.0.2 → fcop-3.0.2}/LICENSE +0 -0
  29. {fcop-2.0.2 → fcop-3.0.2}/essays/README.md +0 -0
  30. {fcop-2.0.2 → fcop-3.0.2}/fcop-README.pypi.md +0 -0
  31. {fcop-2.0.2 → fcop-3.0.2}/pyproject.toml +0 -0
  32. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/__init__.py +0 -0
  33. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/_compat_cli.py +0 -0
  34. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/_data/schemas/agent.schema.json +0 -0
  35. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/_data/schemas/boundary.schema.json +0 -0
  36. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/_data/schemas/failure.schema.json +0 -0
  37. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/_data/schemas/ipc-envelope.schema.json +0 -0
  38. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/_data/schemas/review.schema.json +0 -0
  39. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/_data/schemas/skill.schema.json +0 -0
  40. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/cli/__init__.py +0 -0
  41. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/cli/migrate_workspace.py +0 -0
  42. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/core/__init__.py +0 -0
  43. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/core/boundary.py +0 -0
  44. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/core/config.py +0 -0
  45. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/core/filename.py +0 -0
  46. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/core/frontmatter.py +0 -0
  47. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/core/jsonschema_validator.py +0 -0
  48. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/core/recovery.py +0 -0
  49. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/core/schema.py +0 -0
  50. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/errors.py +0 -0
  51. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/inspection.py +0 -0
  52. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/models.py +0 -0
  53. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/py.typed +0 -0
  54. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/rules/__init__.py +0 -0
  55. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/rules/_data/agent-install-prompt.en.md +0 -0
  56. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/rules/_data/agent-install-prompt.zh.md +0 -0
  57. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/rules/_data/fcop-spec-v1.0.en.md +0 -0
  58. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/rules/_data/fcop-spec-v1.0.zh.md +0 -0
  59. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/rules/_data/fcop-spec-v1.1.en.md +0 -0
  60. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/rules/_data/fcop-spec-v1.1.zh.md +0 -0
  61. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/rules/_data/internal-readme.en.md +0 -0
  62. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/rules/_data/internal-readme.zh.md +0 -0
  63. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/__init__.py +0 -0
  64. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/README.en.md +0 -0
  65. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/README.md +0 -0
  66. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/dev-team/README.en.md +0 -0
  67. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/dev-team/README.md +0 -0
  68. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/dev-team/TEAM-OPERATING-RULES.en.md +0 -0
  69. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/dev-team/TEAM-OPERATING-RULES.md +0 -0
  70. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/dev-team/TEAM-ROLES.en.md +0 -0
  71. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/dev-team/TEAM-ROLES.md +0 -0
  72. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/dev-team/roles/DEV.en.md +0 -0
  73. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/dev-team/roles/DEV.md +0 -0
  74. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/dev-team/roles/OPS.en.md +0 -0
  75. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/dev-team/roles/OPS.md +0 -0
  76. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/dev-team/roles/PM.en.md +0 -0
  77. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/dev-team/roles/PM.md +0 -0
  78. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/dev-team/roles/QA.en.md +0 -0
  79. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/dev-team/roles/QA.md +0 -0
  80. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/index.json +0 -0
  81. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/media-team/README.en.md +0 -0
  82. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/media-team/README.md +0 -0
  83. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/media-team/TEAM-OPERATING-RULES.en.md +0 -0
  84. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/media-team/TEAM-OPERATING-RULES.md +0 -0
  85. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/media-team/TEAM-ROLES.en.md +0 -0
  86. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/media-team/TEAM-ROLES.md +0 -0
  87. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/media-team/roles/COLLECTOR.en.md +0 -0
  88. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/media-team/roles/COLLECTOR.md +0 -0
  89. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/media-team/roles/EDITOR.en.md +0 -0
  90. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/media-team/roles/EDITOR.md +0 -0
  91. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/media-team/roles/PUBLISHER.en.md +0 -0
  92. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/media-team/roles/PUBLISHER.md +0 -0
  93. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/media-team/roles/WRITER.en.md +0 -0
  94. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/media-team/roles/WRITER.md +0 -0
  95. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/mvp-team/README.en.md +0 -0
  96. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/mvp-team/README.md +0 -0
  97. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/mvp-team/TEAM-OPERATING-RULES.en.md +0 -0
  98. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/mvp-team/TEAM-OPERATING-RULES.md +0 -0
  99. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/mvp-team/TEAM-ROLES.en.md +0 -0
  100. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/mvp-team/TEAM-ROLES.md +0 -0
  101. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/mvp-team/roles/BUILDER.en.md +0 -0
  102. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/mvp-team/roles/BUILDER.md +0 -0
  103. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/mvp-team/roles/DESIGNER.en.md +0 -0
  104. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/mvp-team/roles/DESIGNER.md +0 -0
  105. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/mvp-team/roles/MARKETER.en.md +0 -0
  106. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/mvp-team/roles/MARKETER.md +0 -0
  107. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/mvp-team/roles/RESEARCHER.en.md +0 -0
  108. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/mvp-team/roles/RESEARCHER.md +0 -0
  109. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/qa-team/README.en.md +0 -0
  110. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/qa-team/README.md +0 -0
  111. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/qa-team/TEAM-OPERATING-RULES.en.md +0 -0
  112. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/qa-team/TEAM-OPERATING-RULES.md +0 -0
  113. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/qa-team/TEAM-ROLES.en.md +0 -0
  114. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/qa-team/TEAM-ROLES.md +0 -0
  115. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/qa-team/roles/AUTO-TESTER.en.md +0 -0
  116. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/qa-team/roles/AUTO-TESTER.md +0 -0
  117. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/qa-team/roles/LEAD-QA.en.md +0 -0
  118. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/qa-team/roles/LEAD-QA.md +0 -0
  119. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/qa-team/roles/PERF-TESTER.en.md +0 -0
  120. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/qa-team/roles/PERF-TESTER.md +0 -0
  121. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/qa-team/roles/TESTER.en.md +0 -0
  122. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/qa-team/roles/TESTER.md +0 -0
  123. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/solo/README.en.md +0 -0
  124. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/solo/README.md +0 -0
  125. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/solo/TEAM-OPERATING-RULES.en.md +0 -0
  126. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/solo/TEAM-OPERATING-RULES.md +0 -0
  127. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/solo/TEAM-ROLES.en.md +0 -0
  128. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/solo/TEAM-ROLES.md +0 -0
  129. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/solo/roles/ME.en.md +0 -0
  130. {fcop-2.0.2 → fcop-3.0.2}/src/fcop/teams/_data/solo/roles/ME.md +0 -0
  131. {fcop-2.0.2 → fcop-3.0.2}/workspace/README.md +0 -0
@@ -55,3 +55,22 @@ fcop_events.jsonl
55
55
 
56
56
  # Per-release transient commit-msg drafts under scripts/
57
57
  scripts/_*.txt
58
+
59
+ # Release tooling binaries (mcp-publisher etc.) — install separately,
60
+ # do not commit. The .exe is downloaded fresh on the publish host.
61
+ /mcp-publisher.exe
62
+ /mcp-publisher
63
+ /mcp-publisher.tar.gz
64
+ /mcp-publisher.tar
65
+ /mcp-publisher.zip
66
+
67
+ # Local token-audit probe scripts (analysis-only, not protocol artifacts)
68
+ workspace/token-audit/
69
+
70
+ # Ad-hoc analysis & PR-body drafts that live at repo root
71
+ /analyze_*.py
72
+ /pr-body-*.txt
73
+ /pr-body-*.md
74
+
75
+ # Local chat transcripts (Cursor exports etc.)
76
+ /chat/
@@ -8,6 +8,281 @@ This file tracks both packages together because they release in lockstep.
8
8
  See [adr/ADR-0002](./adr/ADR-0002-package-split-and-migration.md) for the
9
9
  versioning strategy.
10
10
 
11
+ ## [3.0.2] — 2026-05-22 (Init topology fix · v3 _lifecycle on fresh init)
12
+
13
+ ### Fixed / 修复
14
+
15
+ * **Critical · `init_*` did not create `_lifecycle/`.** FCoP 3.0
16
+ spec §1.1 mandates the v3 five-bucket topology (`_lifecycle/{inbox,
17
+ active,review,done,archive}/`), but `Project._apply_init` in 3.0.0 /
18
+ 3.0.1 only created legacy v2 directories (`tasks/`, `reports/`,
19
+ `issues/`, `shared/`, `log/`) and skipped the lifecycle layer.
20
+ Every fresh project initialised on 3.0.0–3.0.1 was therefore
21
+ born **non-compliant** with the 3.0 spec. Tracked as
22
+ `ISSUE-20260522-001-ME` / `TASK-20260522-004-ADMIN-to-ME`.
23
+ * `_apply_init` now calls `ensure_lifecycle_dirs(...)` and refreshes
24
+ the cached topology so `Project.is_v3` and `tasks_dir` /
25
+ `reports_dir` / `issues_dir` resolve to v3 paths immediately
26
+ after init. Per spec §6 the superseded v2 buckets (`tasks/`,
27
+ `log/`) are no longer created on fresh init; `reports/` /
28
+ `issues/` / `shared/` are retained for hybrid compatibility.
29
+ * `core.events.scan_workspace` now scans `_lifecycle/{inbox,active,
30
+ review,done,archive}/` so v3-native events (TASK_CREATED etc.)
31
+ fire correctly.
32
+ * `Project.role_occupancy()` now reads archived task counts from
33
+ `_lifecycle/archive/` for v3 projects (and continues to read
34
+ `log/tasks/` for v2 projects).
35
+
36
+ ### Added / 新增
37
+
38
+ * `Project._scan_lifecycle_topology_compliance()` audit scan (D9):
39
+ - **P0** — initialised project missing both `_lifecycle/` and
40
+ any v2 content ⇒ topology layer is absent.
41
+ - **P1** — `_lifecycle/` present *and* `tasks/` / `log/` still
42
+ contain files ⇒ co-existing topologies, run
43
+ `python -m fcop migrate --to-v3` to consolidate.
44
+ Wired into `audit(scope="new" | "upgrade" | "takeover")`.
45
+ * `tests/test_init_v3_topology.py` — 7 new tests covering
46
+ `init_solo` / `init_project` / `init_custom` v3 topology and the
47
+ `Project.is_v3` / path-accessor invariants.
48
+
49
+ ### Documentation / 文档
50
+
51
+ * `fcop/LETTER-TO-ADMIN.md` — keeps the existing v3 promise; adds
52
+ "3.0.2 起 fresh init 立即兑现" note plus dual-path guidance
53
+ (init / migrate).
54
+ * `README.md` / `README.zh.md` — patch banner pointing at the
55
+ 3.0.2 init-fix.
56
+ * MCP tool descriptors (`init_solo` / `init_project` /
57
+ `create_custom_team`) call out v3 `_lifecycle/` topology
58
+ explicitly.
59
+
60
+ ### Test
61
+
62
+ * All 1209 tests pass (3 skipped, 1 warning).
63
+
64
+ ### Migration
65
+
66
+ * **Existing v2 projects**: unaffected. Run
67
+ `python -m fcop migrate --to-v3` if/when ready to adopt v3.
68
+ * **3.0.0 / 3.0.1 fresh-init projects** that look like v2 on disk
69
+ (no `_lifecycle/`): treated as v2 by every code path; either
70
+ re-init under 3.0.2 or run `migrate --to-v3` to upgrade.
71
+ * **No breaking changes** vs. 3.0.1 surface — this is a SemVer
72
+ **patch** (init was doing the wrong thing; the contract was
73
+ already in §1.1 of the 3.0 spec).
74
+
75
+ ---
76
+
77
+ ## [3.0.1] — 2026-05-21 (Path-consolidation patch)
78
+
79
+ ### Fixed / 修复
80
+
81
+ * **Broken doc links after `spec/archived/` move.** The 3.0.0 release moved
82
+ the historical v1.0/v1.1 spec drafts into `spec/archived/` but several
83
+ in-source references still pointed at the old paths, leaving link
84
+ rot in `AGENTS.md`, `CLAUDE.md`, the bundled Cursor rules
85
+ (`src/fcop/rules/_data/fcop-{rules,protocol}.mdc` + their
86
+ `.cursor/rules/` mirrors), MCP server docstrings, and two JSON Schema
87
+ `description` fields. All such references now resolve correctly to
88
+ `spec/archived/fcop-runtime-protocol-v1.0.{md,zh.md}` (with a pointer
89
+ to the current canonical `spec/fcop-3.0-spec.md`).
90
+ * **`fcop-mcp` `fcop://spec` / `fcop://spec/en` docstrings** previously
91
+ claimed to return `spec/fcop-runtime-protocol-v1.0.md`, but the wheel
92
+ actually bundles and returns `fcop-spec-v1.1.{lang}.md`. Docstrings
93
+ now reflect the real contents and explicitly point readers to the 3.0
94
+ spec for current canonical semantics.
95
+
96
+ ### Not changed / 未改动
97
+
98
+ * No code logic changed; this is a pure documentation / metadata patch.
99
+ * Historical artifacts (TASK / REPORT / ADR / release notes / migration
100
+ docs) that mention the old paths are preserved verbatim per FCoP's
101
+ "history is not rewritten" principle (ADR-0036).
102
+ * The wheel-bundled `fcop-spec-v1.1.{lang}.md` still contains
103
+ v1.0-/v1.1-era cross-references; bundling FCoP 3.0 spec into the
104
+ wheel is deferred per ADR-0039 (Freeze Discipline — requires a real
105
+ runtime pressure signal before changing what gets bundled).
106
+
107
+ ### Test
108
+
109
+ * All 1202 tests pass.
110
+
111
+ ---
112
+
113
+ ## [3.0.0] — 2026-05-21 (Protocol-level MAJOR · "文件夹即状态"纪元)
114
+
115
+ ### 概述 / Overview
116
+
117
+ **FCoP 3.0 — Protocol Semantic Sealing.**
118
+
119
+ FCoP 协议本体的一次完整重写:从 1.x/2.x 的"文件即协议,文件夹即组织",演进为 canonical 双层(per [ADR-0040](adr/ADR-0040-canonical-one-liner-two-layer-convention.md)):
120
+
121
+ * **Layer 1(认知引导)**:**文件即协议;位置定义状态;事件记录历史。** / *Files carry protocol. Paths address state. Events replay transitions.*
122
+ * **Layer 2(语义本体)**:文件是协议的外化载体;位置是状态的地址映射;事件是状态转移的可重放证据。
123
+
124
+ (v1 canonical "file location is truth; everything else is trace" 已退出定义性表面,仅保留在 2026-05-21 及之前归档的 essays/reviews 中。)
125
+
126
+ FCoP 3.0 把协议表面压缩为 **3 层 + 1 个 NOTE**:
127
+
128
+ ```
129
+ META ADR-0038 · Boundary Charter (Agent POSIX, 防 OS 化)
130
+ NOW ADR-0035 · State Ontology (path = truth, frozen)
131
+ PAST ADR-0036 · Event Layer (transitions = audit-only trace)
132
+ NOTE · Custody-is-not-a-layer (informative)
133
+ ```
134
+
135
+ FCoP 3.0 is a protocol-level rewrite. The full ontology is now expressed in one canonical statement:
136
+
137
+ > **FCoP is a filesystem-native protocol where file location defines current state, and all historical and ownership semantics are derived from append-only transition traces.**
138
+
139
+ ### 核心变更 / Core Changes
140
+
141
+ #### 1. 目录拓扑(BREAKING)/ Directory Topology (BREAKING)
142
+
143
+ 引入 `_lifecycle/` 五桶结构作为状态本体:
144
+
145
+ ```
146
+ fcop/
147
+ ├── _lifecycle/
148
+ │ ├── inbox/ ← created
149
+ │ ├── active/ ← claimed
150
+ │ ├── review/ ← pending confirmation
151
+ │ ├── done/ ← completed
152
+ │ └── archive/ ← closed
153
+ ├── reports/
154
+ ├── issues/
155
+ └── shared/
156
+ ```
157
+
158
+ **与 2.x 不兼容**:`tasks/`、`log/tasks/`、`log/reports/` 被迁移到 `_lifecycle/inbox/`、`_lifecycle/archive/`、`reports/`。必须运行 `fcop migrate --to-v3` 完成迁移。
159
+
160
+ The 5-bucket `_lifecycle/` topology replaces the 2.x `tasks/` + `log/` model. Migration via `fcop migrate --to-v3` is mandatory.
161
+
162
+ #### 2. 三层规则集 / Three Rule Sets
163
+
164
+ **State Layer**(NOW truth):
165
+ - **Rule A** — `file path = state truth`
166
+ - **Rule B** — L1 工具执行文件系统状态迁移
167
+ - **Rule C** — 状态迁移仅由显式工具调用治理
168
+
169
+ **Event Layer**(PAST trace):
170
+ - **Rule E** — 每次 `mv` 必产生一条事件
171
+ - **Rule F** — 事件只追加
172
+ - **Rule G** — 事件是仅供审计的 PAST 踪迹(绝不用于判定当前状态)
173
+
174
+ **Boundary Charter**:
175
+ - 三大原则(describe not execute / externalise not own / coordinate not orchestrate)
176
+ - 五问过滤器(任何未来 ADR 必经审查)
177
+ - §5.1 豁免条款(complexity-forced / cross-runtime breakdown / internal contradiction)
178
+
179
+ #### 3. 7 条允许迁移 / 7 Allowed Transitions
180
+
181
+ | From | To | Tool |
182
+ |------|----|------|
183
+ | — | `inbox` | `create_task` |
184
+ | `inbox` | `active` | `claim_task` |
185
+ | `active` | `review` | `submit_task` |
186
+ | `active` | `done` | `finish_task(skip_review=true)` |
187
+ | `review` | `done` | `approve_task` |
188
+ | `review` | `active` | `reject_task` |
189
+ | `done` | `archive` | `archive_task` |
190
+
191
+ 表外迁移**不被允许**。实现必须拒绝。
192
+
193
+ #### 4. Atomicity: Write-Then-Rename Pattern
194
+
195
+ 事件写入与文件移动作为单次原子操作:先写履历进临时文件 → fsync → `os.rename(tmp, dst)`(POSIX 原子提交点)→ 删除源文件。**不存在可观察的中间状态。**
196
+
197
+ > An event is not a side effect of a transition. An event is the transition itself, witnessed in writing.
198
+
199
+ #### 5. Custody Rejected as Layer
200
+
201
+ 最初提案的 ADR-0037(Custody Layer)在 RFC 评审中**未进 Accepted 即被作废**——custody 一旦成为协议层就会变成"第三套真相系统",违反 Rule A 与 Rule G。
202
+
203
+ Custody 思想以 `adr/NOTE-custody-is-not-a-layer.md` 形式保留为衍生解释:
204
+
205
+ > Custody is not a protocol layer. It is an emergent interpretation of file ownership derived from file location and event history.
206
+
207
+ 完整决策链见 essay `essays/the-day-we-almost-added-custody.md` / `.en.md`。
208
+
209
+ ### 新增规范文档 / New Specification Documents
210
+
211
+ | 文件 | 用途 |
212
+ |------|------|
213
+ | `spec/fcop-3.0-spec.md` | Canonical single-page formal spec (English) |
214
+ | `spec/fcop-3.0-spec.zh.md` | 中文平行版(informative)|
215
+ | `spec/fcop-3.0-rfc.md` | IETF-style RFC projection(外部稳定面)|
216
+ | `spec/fcop-3.0-rfc.zh.md` | RFC 中文平行版 |
217
+
218
+ ### 新增 ADR / New ADRs
219
+
220
+ | ADR | 主题 | 状态 |
221
+ |-----|------|------|
222
+ | ADR-0035 | State Ontology — `_lifecycle/` 拓扑 + Rule A/B/C | **Accepted & Frozen** |
223
+ | ADR-0036 | Event Layer — `transitions:` 履历 + Rule E/F/G + write-then-rename | **Accepted** |
224
+ | ADR-0037 | ~~Custody & Handoff~~ | **Withdrawn**(RFC 否决)|
225
+ | ADR-0038 | Boundary Charter — meta-charter + 五问过滤器 + §5.1 豁免 | **Accepted** |
226
+ | NOTE-custody-is-not-a-layer | custody 衍生解释 | Informative |
227
+
228
+ ### 流程证据 / Process Records
229
+
230
+ | 文件 | 性质 |
231
+ |------|------|
232
+ | `.fcop/proposals/20260521-rfc-semantic-collapse-and-custody-rejection.md` | RFC 现场归档 |
233
+ | `.fcop/proposals/20260521-spec-editorial-patch-and-rfc-projection.md` | Editorial patch 记录 |
234
+ | `fcop/reviews/REVIEW-20260521-001-ADMIN-on-adr-0035.md` | 0035 sign-off |
235
+ | `fcop/reviews/REVIEW-20260521-002-ADMIN-on-fcop-3-0.md` | 3.0 canonical sign-off |
236
+ | `fcop/reviews/REVIEW-20260521-003-ADMIN-on-fcop-3-0-sealed.md` | 3.0 final sealing |
237
+
238
+ ### 社区记忆 / Community Memory
239
+
240
+ | 文件 | 主题 |
241
+ |------|------|
242
+ | `essays/the-day-we-almost-added-custody.md` | 中文 · 协议拒绝自我扩展的现场记录 |
243
+ | `essays/the-day-we-almost-added-custody.en.md` | English · The day the protocol refused its own extension |
244
+
245
+ ### Breaking Changes
246
+
247
+ - **协议本体重写**:`tasks/` → `_lifecycle/inbox/`,旧目录拓扑不再合法
248
+ - **35 个 MCP 工具**:写侧工具行为改变(L1 工具必须执行 `_lifecycle/` 之间的原子迁移)
249
+ - **frontmatter 必填新字段**:`_lifecycle/` 下的文件必须携带 `transitions:` 数组
250
+ - **MCP registry**:`io.github.joinwell52-AI/fcop` 服务标识不变;服务版本升级到 3.0.0
251
+
252
+ ### Migration
253
+
254
+ 完整迁移指南:`docs/MIGRATION-3.0.md` / `docs/MIGRATION-3.0.zh.md`
255
+
256
+ 一键迁移:
257
+
258
+ ```bash
259
+ pip install -U fcop fcop-mcp
260
+ python -m fcop migrate --to-v3
261
+ ```
262
+
263
+ 迁移脚本会:
264
+ 1. 创建 `_lifecycle/` 五桶
265
+ 2. 将 `tasks/*.md` 移到 `_lifecycle/inbox/`
266
+ 3. 将 `log/tasks/*.md` 移到 `_lifecycle/archive/`
267
+ 4. 将 `log/reports/*.md` 移到 `reports/`(不再 archived)
268
+ 5. 为所有迁移的文件追加合成 transition 事件
269
+ 6. 删除空 `log/` 目录
270
+
271
+ ### Conformance
272
+
273
+ 完整 C1-C10(MUST)与 P1-P5(MUST NOT)合规要求见 `spec/fcop-3.0-spec.md` §6。
274
+
275
+ ### Acknowledgements
276
+
277
+ 本次 release 是 FCoP 协议自创建以来**最重要的协议级跃迁**。它由 6 轮 RFC 评审、3 份 REVIEW 签字、5 篇 PROPOSAL 归档构成;过程本身的可外化、可审计、可回放,是 FCoP 协议机制**自我证明**的现场。
278
+
279
+ 特别记录:FCoP 在同一天完成了一次协议级跃迁,并拒绝了一次自己的善意扩展(custody layer)。这两件事一起发生,标志着 FCoP 进入"协议自治"阶段——它知道自己是什么,也知道自己不是什么。
280
+
281
+ > **协议最大的危险,不是被推翻,是被善意地扩展。**
282
+ > **The greatest danger to a protocol is not being overthrown — it is being kindly extended.**
283
+
284
+ ---
285
+
11
286
  ## [2.0.2] — 2026-05-13
12
287
 
13
288
  ### 概述 / Overview
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fcop
3
- Version: 2.0.2
3
+ Version: 3.0.2
4
4
  Summary: FCoP protocol: official Python library — Project API, task/report/issue files, filename parsing, bundled rules. PyYAML only; not an MCP server.
5
5
  Project-URL: Homepage, https://github.com/joinwell52-AI/FCoP
6
6
  Project-URL: Repository, https://github.com/joinwell52-AI/FCoP
@@ -16,8 +16,8 @@
16
16
  <a href="docs/mcp-tools.md"><strong>MCP Tools (35)</strong></a> ·
17
17
  <a href="essays/when-ai-organizes-its-own-work.en.md">Field Report</a> ·
18
18
  <a href="essays/fcop-natural-protocol.en.md">Natural Protocol</a> ·
19
- <a href="src/fcop/rules/_data/fcop-rules.mdc">Rules (<code>.mdc</code>)</a> ·
20
- <a href="adr/ADR-0015-fcop-1.0-ai-os-protocol-charter.md">v1.0 Charter</a>
19
+ <a href="spec/fcop-3.0-spec.md"><strong>3.0 Spec</strong></a> ·
20
+ <a href="adr/README.md">ADR Index</a>
21
21
  </p>
22
22
 
23
23
  <p align="center">
@@ -30,11 +30,11 @@
30
30
  <a href="LICENSE">
31
31
  <img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="MIT License" />
32
32
  </a>
33
- <a href="spec/fcop-runtime-protocol-v1.0.md">
34
- <img src="https://img.shields.io/badge/spec-v1.1-green?style=flat-square" alt="Spec v1.1" />
35
- </a>
36
33
  <a href="CHANGELOG.md">
37
- <img src="https://img.shields.io/badge/release-2.0.2-brightgreen?style=flat-square" alt="2.0.2" />
34
+ <img src="https://img.shields.io/badge/release-3.0.2-brightgreen?style=flat-square" alt="3.0.2" />
35
+ </a>
36
+ <a href="spec/fcop-3.0-spec.md">
37
+ <img src="https://img.shields.io/badge/spec-FCoP%203.0-orange?style=flat-square" alt="FCoP 3.0 spec" />
38
38
  </a>
39
39
  <a href="https://registry.modelcontextprotocol.io/v0/servers?search=io.github.joinwell52-AI%2Ffcop">
40
40
  <img src="https://img.shields.io/badge/MCP%20Registry-io.github.joinwell52--AI%2Ffcop-8A2BE2?style=flat-square" alt="Official MCP Registry: io.github.joinwell52-AI/fcop" />
@@ -46,6 +46,32 @@
46
46
 
47
47
  ---
48
48
 
49
+ ## 🆕 FCoP 3.0 is here — *Files carry protocol. Paths address state. Events replay transitions.*
50
+
51
+ <p align="center">
52
+ <a href="spec/fcop-3.0-spec.md">
53
+ <img src="assets/fcop-3.0-architecture.png" alt="FCoP 3.0 · Canonical Architecture — Files carry protocol. Paths address state. Events replay transitions." width="900" />
54
+ </a>
55
+ </p>
56
+
57
+ > **FCoP 3.0** is the protocol's first **semantic seal**. State now lives in the filesystem itself (`_lifecycle/{inbox,active,review,done,archive}/`), events live append-only inside the file, and *custody / ownership / scheduling / runtime* are explicitly **out of scope** (Boundary Charter).
58
+ >
59
+ > **Two paths to v3:**
60
+ > - **New project** → `fcop init` / MCP `init_solo|init_project|create_custom_team` (≥ 3.0.2 produces v3 topology directly).
61
+ > - **Existing 2.x project** → `python -m fcop migrate --to-v3`.
62
+ >
63
+ > ⚠️ **3.0.0 / 3.0.1 fresh-init bug**: those releases initialized projects in v2 layout (no `_lifecycle/`). 3.0.2 fixes the bug. If you initialized on 3.0.0 / 3.0.1, run `migrate --to-v3` to upgrade.
64
+
65
+ | Doc | Purpose |
66
+ |---|---|
67
+ | [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md) · [zh](spec/fcop-3.0-spec.zh.md) | Single-page canonical spec |
68
+ | [`spec/fcop-3.0-rfc.md`](spec/fcop-3.0-rfc.md) · [zh](spec/fcop-3.0-rfc.zh.md) | IETF-style RFC projection |
69
+ | [`docs/MIGRATION-3.0.md`](docs/MIGRATION-3.0.md) · [zh](docs/MIGRATION-3.0.zh.md) | 2.x → 3.0 migration guide |
70
+ | [`CHANGELOG.md` `[3.0.0]`](CHANGELOG.md) | Full release notes |
71
+ | [`essays/the-day-we-almost-added-custody.en.md`](essays/the-day-we-almost-added-custody.en.md) · [zh](essays/the-day-we-almost-added-custody.md) | The decision that defined 3.0 |
72
+
73
+ ---
74
+
49
75
  ## Where FCoP sits in the stack
50
76
 
51
77
  FCoP is the **behavior governance protocol layer** for multi-agent collaboration — standardizing how agents report actions, review outcomes, and operate within governed capability boundaries.
@@ -127,12 +153,13 @@ FCoP/
127
153
  │ # bundles fcop-rules / fcop-protocol (templates for `init` deploy)
128
154
  ├── mcp/ # `fcop-mcp` subproject (MCP server; has its own pyproject)
129
155
  ├── tests/ # pytest for `fcop` and `fcop-mcp`
130
- ├── spec/ # Normative spec (v1.0)
131
- │ ├── fcop-runtime-protocol-v1.0.md # ★ English normative spec (authoritative)
132
- │ ├── fcop-runtime-protocol-v1.0.zh.md # Chinese parallel (informative)
133
- │ ├── fcop-spec.md # Spec index / entry point
134
- │ ├── fcop-spec-v1.0.3.md # Legacy 0.7.x spec (kept for backward compat)
135
- │ └── schemas/ # 8 JSON Schemas (machine-readable, v1.1)
156
+ ├── spec/ # Normative spec (see spec/README.md)
157
+ │ ├── fcop-3.0-spec.md # ★ English normative spec (FCoP 3.0, canonical)
158
+ │ ├── fcop-3.0-spec.zh.md # Chinese parallel (informative)
159
+ │ ├── fcop-3.0-rfc.md # IETF-style RFC edition (English)
160
+ │ ├── fcop-3.0-rfc.zh.md # IETF-style RFC edition (Chinese)
161
+ │ ├── schemas/ # 8 JSON Schemas (machine-readable)
162
+ │ └── archived/ # v1.0 / v1.1 / 0.7.x spec drafts (superseded, retained for history)
136
163
  ├── docs/ # Getting-started, migrations, releases, MCP tools
137
164
  │ └── getting-started.en.md # ← start here if new to FCoP
138
165
  ├── adr/ # Architecture decision records (ADR-0001..0022)
@@ -211,6 +238,9 @@ I/O or an IDE bridge, use the two official PyPI packages (since `0.6.0`):
211
238
 
212
239
  | Version | One-line |
213
240
  |---|---|
241
+ | **3.0.2** ([CHANGELOG](CHANGELOG.md)) | **v3.0.2 — Init topology fix.** `Project._apply_init` in 3.0.0 / 3.0.1 only created the legacy v2 buckets and skipped the mandatory v3 `_lifecycle/{inbox,active,review,done,archive}/` layer (spec §1.1). 3.0.2 makes fresh init produce the v3 topology directly (and stops creating the superseded v2 `tasks/` / `log/` buckets); `core.events.scan_workspace` and `Project.role_occupancy()` now read from `_lifecycle/` for v3 projects. New audit scan `_scan_lifecycle_topology_compliance()` (D9): P0 when initialised projects miss both `_lifecycle/` and v2 content; P1 when both topologies coexist (suggests `migrate --to-v3`). MCP tool descriptors (`init_solo` / `init_project` / `create_custom_team`) updated. 1209 tests green. Patch (SemVer): no API surface changes vs 3.0.1 — init was simply doing the wrong thing. |
242
+ | **3.0.1** ([CHANGELOG](CHANGELOG.md)) | **v3.0.1 — Path-consolidation patch.** Pure docs/metadata patch with no code-logic changes: after v3.0.0 moved historical v1.0/v1.1 spec drafts to `spec/archived/`, this patch repairs broken links scattered across `AGENTS.md` / `CLAUDE.md` / packaged Cursor rules / MCP server docstrings / two JSON Schema `description` fields, unifying them on `spec/archived/fcop-runtime-protocol-v1.0.{md,zh.md}` (with pointers to the current canonical `spec/fcop-3.0-spec.md`). `fcop-mcp`'s `fcop://spec` / `fcop://spec/en` docstrings are corrected to reflect the wheel's actual packaged content (`fcop-spec-v1.1.{lang}.md`). Historical artifacts (TASK / REPORT / ADR / release notes / migration docs) are preserved verbatim per ADR-0036 "history is not rewritten". 1202 tests green. |
243
+ | **3.0.0** ([CHANGELOG](CHANGELOG.md)) | **v3.0 — Protocol-level MAJOR · "folders-as-state" era.** A complete rewrite of the FCoP protocol body — canonical two-layer (per [ADR-0040](adr/ADR-0040-canonical-one-liner-two-layer-convention.md)): **Layer 1** "Files are the protocol; location defines state; events record history" + **Layer 2** semantic ontology. Adds `_lifecycle/{inbox,active,review,done,archive}/` five-bucket directory topology (**incompatible with 2.x**, requires `fcop migrate --to-v3`); three rule sets (State Layer Rule A/B/C · Event Layer Rule E/F/G · Boundary Charter); 7 allowed transitions — anything off-table MUST be rejected by implementations; write-then-rename atomicity (events ARE migrations, migrations ARE events); ADR-0037 Custody Layer **was withdrawn during RFC review and never reached Accepted** (custody is not a protocol layer; preserved as a NOTE-style derivative explanation). Adds [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md) single-page canonical + IETF-style RFC parallel + Chinese parallel + [`docs/MIGRATION-3.0.md`](docs/MIGRATION-3.0.md) migration guide. |
214
244
  | **2.0.2** ([CHANGELOG](CHANGELOG.md)) | **v2.0.2 — `fcop-mcp` officially registered to the [MCP registry](https://registry.modelcontextprotocol.io/) (`io.github.joinwell52-AI/fcop`).** Backed by Anthropic + GitHub + Microsoft's joint registry, `fcop-mcp` is now discoverable by Claude Desktop / Cursor / PulseMCP / every MCP-compatible client out of the box (`uvx fcop-mcp` one-liner install). Double-pack lockstep version bump (per ADR-0002): `fcop` library code is **unchanged** from v2.0.0; the bump aligns both package version numbers and consolidates the fcop-mcp@2.0.1 MCP-metadata patch that landed the same day. Also lands the **release+backup one-shot SOP** — `RULES-release-file-inventory.md` (12-category), `RULES-mcp-registry-release.md` (3-step path), and the append-only backup mirror at `joinwell52-AI/FCoP-backup`. |
215
245
  | **2.0.0** ([CHANGELOG](CHANGELOG.md)) | **v2.0 — "Two-diagram era" philosophical major release.** Same execution surface as v1.x (per ADR-0003 additive); the major bump records that FCoP is now defined by **two** diagrams together: the **execution stack** (5-layer vertical, stable since v1.x) *and* the **FCoP Semantic Evolution Loop** (7-node closed loop — emerge → observe → propose → review → merge → deploy → reflect, newly canonicalised). Adds Rule 4.6 (`fcop/internal/` vs `docs/` + `essays/` soft convention with `internal-only` declaration v1), `Project.init(deploy_internal_template=...)` opt-in, P3 (suggestion) audit severity, and a bundled `fcop_audit` exemption list (`log/`, `_archive/`, `legacy-non-protocol/`) that fixes three upstream bugs surfaced by codeflow cross-project patrol (ISSUE-008/009/010). ADR-0034. |
216
246
  | **1.6.0** ([CHANGELOG](CHANGELOG.md)) | **v1.6 — Trailing-slug filename adoption (ADR-0033).** Long filenames (`TASK-20260512-025-PM-to-OPS-phase-a-fix-naming.md`) are now first-class — codeflow's 22+ self-emerged examples absorbed into the grammar. Slug does **not** participate in routing; it's a human-readable label. 100% backward-compatible (0 regressions across 1057 tests). |
@@ -282,13 +312,13 @@ Stability contract: **additive-only for the full `0.6.x` minor**. Details in [`a
282
312
  | **New to FCoP** — hands-on 45-min setup | [`docs/getting-started.en.md`](docs/getting-started.en.md) |
283
313
  | **Upgrading from 0.7.x** — workspace migration + new abstractions | [`docs/MIGRATION-1.0.md`](docs/MIGRATION-1.0.md) |
284
314
  | **Upgrading from 1.0/1.1 → 1.2** — Capability Governance + lockstep versioning | [`docs/MIGRATION-1.1.md`](docs/MIGRATION-1.1.md) · [CHANGELOG](CHANGELOG.md) |
285
- | **Understand the protocol contract** — what an implementation MUST do | [`spec/fcop-runtime-protocol-v1.0.md`](spec/fcop-runtime-protocol-v1.0.md) (v1.1 spec also in `fcop.rules.get_spec()`) |
315
+ | **Understand the protocol contract** — what an implementation MUST do | [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md) — single-page canonical spec (v3.0). Earlier v1.0/v1.1 spec drafts remain in `spec/` for historical reference. |
286
316
  | **v1.2 Capability Governance** — FCoPGovernanceMiddleware, risk tagging, audit log | [CHANGELOG](CHANGELOG.md) · ADR-0030-bis |
287
317
  | **v1.1 new fields** — risk_level, needs_human, human_approval, skill tools | [CHANGELOG](CHANGELOG.md) · ADR-0023..0027 |
288
318
  | **Understand why decisions were made** — reasoning behind each choice | [`adr/`](adr/) — start with [ADR-0029](adr/ADR-0029-fcop-behavior-governance-charter.md) |
289
319
  | **All 35 MCP tools & 14 resources** | [`docs/mcp-tools.md`](docs/mcp-tools.md) |
290
320
  | **Release notes** — full changelog | [`CHANGELOG.md`](CHANGELOG.md) |
291
- | **Full document map** — every file and its role | [spec Appendix B](spec/fcop-runtime-protocol-v1.0.md#appendix-b--authoritative-document-map) |
321
+ | **Full document map** — every file and its role | [`adr/README.md`](adr/README.md) (ADR index) + [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md) §11 (Cited Material) |
292
322
 
293
323
  ---
294
324
 
@@ -309,8 +339,8 @@ Two official reference implementations, both MIT-licensed:
309
339
 
310
340
  ## Status & versioning
311
341
 
312
- - **Current release**: `v2.0.2` (2026-05-13) — **`fcop-mcp` is now in the [official MCP registry](https://registry.modelcontextprotocol.io/)** (`io.github.joinwell52-AI/fcop`), backed by Anthropic + GitHub + Microsoft's joint catalog. Claude Desktop / Cursor / PulseMCP / every MCP-compatible client can discover and install it via `uvx fcop-mcp` out of the box. v2.0.2 is a **double-pack lockstep administrative bump** (per ADR-0002): `fcop` library code is **unchanged** from v2.0.0; this release consolidates the fcop-mcp@2.0.1 MCP-metadata patch that landed the same day, plus the release+backup one-shot SOP (`RULES-release-file-inventory.md`, `RULES-mcp-registry-release.md`, append-only backup mirror). Earlier releases: v2.0.0 — *philosophical* major release ("two-diagram era"); the major bump records that the protocol now formally acknowledges **two** defining diagrams (execution stack + FCoP Semantic Evolution Loop), plus Rule 4.6 (`fcop/internal/` soft convention), `deploy_internal_template` opt-in, P3 audit severity, and bundled `fcop_audit` exemption list that fixes the three upstream bugs surfaced by codeflow cross-project patrol (ISSUE-008/009/010). v1.6 (trailing-slug filename grammar, ADR-0033), v1.5 (84-doc protocol-awareness sync), v1.4 (write-side bind + `supersedes:` correction), v1.3 (GAL + `fcop_audit()` inspection compiler). 35 MCP tools total. See [CHANGELOG](CHANGELOG.md).
313
- - **Normative spec**: [`spec/fcop-runtime-protocol-v1.0.md`](spec/fcop-runtime-protocol-v1.0.md) (v1.1 spec bundled in wheel via `fcop.rules.get_spec()`) · machine-readable contracts in [`spec/schemas/`](spec/schemas/) (8 schemas)
342
+ - **Current release**: `v3.0.2` (2026-05-22) — **Init topology fix.** Critical patch: `Project._apply_init` in 3.0.0 / 3.0.1 only created the legacy v2 buckets and skipped the mandatory v3 `_lifecycle/{inbox,active,review,done,archive}/` layer required by spec §1.1 — every fresh project initialised on those releases was therefore born non-compliant. 3.0.2 makes fresh init produce the v3 topology directly (and stops creating the superseded v2 `tasks/` / `log/` buckets); `core.events.scan_workspace` and `Project.role_occupancy()` now read from `_lifecycle/` for v3 projects. New audit scan `_scan_lifecycle_topology_compliance()` (D9): P0 when initialised projects miss both `_lifecycle/` and v2 content; P1 when both topologies coexist (suggests `migrate --to-v3`). MCP tool descriptors (`init_solo` / `init_project` / `create_custom_team`) updated. 1209 tests green. Patch (SemVer): no API surface changes — init was doing the wrong thing. Predecessor **v3.0.1** (2026-05-21) — Path-consolidation patch (docs-only). Predecessor **v3.0.0** (2026-05-21) — **Protocol-level MAJOR · "folders-as-state" era**: a complete rewrite of the FCoP protocol body — canonical two-layer (per [ADR-0040](adr/ADR-0040-canonical-one-liner-two-layer-convention.md)) "Files are the protocol; location defines state; events record history" + semantic ontology; adds `_lifecycle/{inbox,active,review,done,archive}/` five-bucket directory topology (**incompatible with 2.x**, requires `fcop migrate --to-v3`); three rule sets (State / Event / Boundary Charter) + 7 allowed transitions (off-table MUST be rejected) + write-then-rename atomicity; ADR-0037 Custody Layer **was withdrawn during RFC review and never reached Accepted**. See [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md) and [`docs/MIGRATION-3.0.md`](docs/MIGRATION-3.0.md). Earlier releases: v2.0.2 (fcop-mcp registered to official MCP registry), v2.0.0 (two-diagram philosophical major bump + Rule 4.6 `fcop/internal/`), v1.6 (trailing-slug filename grammar, ADR-0033), v1.5 (84-doc protocol-awareness sync), v1.4 (write-side bind + `supersedes:` correction), v1.3 (GAL + `fcop_audit()` inspection compiler). See [CHANGELOG](CHANGELOG.md).
343
+ - **Normative spec**: [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md) — single-page canonical (v3.0; supersedes v1.0/v1.1 drafts retained for history) · machine-readable contracts in [`spec/schemas/`](spec/schemas/) (8 schemas)
314
344
  - **Agent rules (`.mdc`) in this repo**: [`src/fcop/rules/_data/fcop-rules.mdc`](src/fcop/rules/_data/fcop-rules.mdc) + [`fcop-protocol.mdc`](src/fcop/rules/_data/fcop-protocol.mdc) (`spec/codeflow-core.mdc` is a deprecated stub)
315
345
  - **Change log**: [`CHANGELOG.md`](CHANGELOG.md)
316
346
  - **Research snapshot**: [`research-snapshot-2026-04-29`](https://github.com/joinwell52-AI/FCoP/releases/tag/research-snapshot-2026-04-29) archived on Zenodo with a citable DOI (see *How to cite* below).
@@ -16,8 +16,8 @@
16
16
  <a href="docs/mcp-tools.md"><strong>MCP 工具清单(35 个)</strong></a> ·
17
17
  <a href="essays/when-ai-organizes-its-own-work.md">现场报告</a> ·
18
18
  <a href="essays/fcop-natural-protocol.md">自然协议</a> ·
19
- <a href="spec/fcop-runtime-protocol-v1.0.zh.md">v1.0 规范(中文)</a> ·
20
- <a href="adr/ADR-0015-fcop-1.0-ai-os-protocol-charter.md">v1.0 章程</a>
19
+ <a href="spec/fcop-3.0-spec.zh.md"><strong>3.0 规范(中文)</strong></a> ·
20
+ <a href="adr/README.md">ADR 索引</a>
21
21
  </p>
22
22
 
23
23
  <p align="center">
@@ -30,11 +30,11 @@
30
30
  <a href="LICENSE">
31
31
  <img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="MIT License" />
32
32
  </a>
33
- <a href="spec/fcop-runtime-protocol-v1.0.md">
34
- <img src="https://img.shields.io/badge/spec-v1.1-green?style=flat-square" alt="规范 v1.1" />
35
- </a>
36
33
  <a href="CHANGELOG.md">
37
- <img src="https://img.shields.io/badge/%E5%8F%91%E5%B8%83-2.0.2-brightgreen?style=flat-square" alt="2.0.2" />
34
+ <img src="https://img.shields.io/badge/%E5%8F%91%E5%B8%83-3.0.2-brightgreen?style=flat-square" alt="3.0.2" />
35
+ </a>
36
+ <a href="spec/fcop-3.0-spec.zh.md">
37
+ <img src="https://img.shields.io/badge/%E8%A7%84%E8%8C%83-FCoP%203.0-orange?style=flat-square" alt="FCoP 3.0 规范" />
38
38
  </a>
39
39
  <a href="https://registry.modelcontextprotocol.io/v0/servers?search=io.github.joinwell52-AI%2Ffcop">
40
40
  <img src="https://img.shields.io/badge/MCP%20%E6%B3%A8%E5%86%8C%E8%A1%A8-io.github.joinwell52--AI%2Ffcop-8A2BE2?style=flat-square" alt="官方 MCP 注册表:io.github.joinwell52-AI/fcop" />
@@ -46,6 +46,28 @@
46
46
 
47
47
  ---
48
48
 
49
+ ## 🆕 FCoP 3.0 已发布——*文件即协议;位置定义状态;事件记录历史。*
50
+
51
+ <p align="center">
52
+ <a href="spec/fcop-3.0-spec.zh.md">
53
+ <img src="assets/fcop-3.0-architecture.zh.png" alt="FCoP 3.0 · 体系结构全景图——文件即协议;位置定义状态;事件记录历史。" width="900" />
54
+ </a>
55
+ </p>
56
+
57
+ > **FCoP 3.0** 是协议的第一次**语义封板**。状态住进文件系统本身(`_lifecycle/{inbox,active,review,done,archive}/`),事件以只追加方式住在文件内部,而 *custody / ownership / scheduling / runtime* 被显式划到**协议之外**(Boundary Charter)。
58
+ >
59
+ > 从 2.x 升级请运行 `python -m fcop migrate --to-v3`。
60
+
61
+ | 文档 | 用途 |
62
+ |---|---|
63
+ | [`spec/fcop-3.0-spec.zh.md`](spec/fcop-3.0-spec.zh.md) · [en](spec/fcop-3.0-spec.md) | 中文单页正式规范 |
64
+ | [`spec/fcop-3.0-rfc.zh.md`](spec/fcop-3.0-rfc.zh.md) · [en](spec/fcop-3.0-rfc.md) | RFC 中文平行版 |
65
+ | [`docs/MIGRATION-3.0.zh.md`](docs/MIGRATION-3.0.zh.md) · [en](docs/MIGRATION-3.0.md) | 2.x → 3.0 迁移指南 |
66
+ | [`CHANGELOG.md` `[3.0.0]`](CHANGELOG.md) | 完整 release notes |
67
+ | [`essays/the-day-we-almost-added-custody.md`](essays/the-day-we-almost-added-custody.md) · [en](essays/the-day-we-almost-added-custody.en.md) | 定义 3.0 的那次决策 |
68
+
69
+ ---
70
+
49
71
  ## FCoP 在技术栈中的位置
50
72
 
51
73
  FCoP 是多 Agent 协作中的**行为治理协议层**——规范 Agent 如何报告行为、审阅结果并在受治理的能力边界内运作。
@@ -122,12 +144,12 @@ FCoP/
122
144
  ├── src/fcop/ # `fcop` 包:Project 等库 API;`rules/_data/` 内置 fcop-rules / fcop-protocol(init 时可选部署的母版)
123
145
  ├── mcp/ # `fcop-mcp` 子项目(MCP 服务器,自有 pyproject)
124
146
  ├── tests/ # `fcop` / `fcop-mcp` 的 pytest
125
- ├── spec/ # 规范文件(v1.0)
126
- │ ├── fcop-runtime-protocol-v1.0.md # ★ 英文规范(权威版)
127
- │ ├── fcop-runtime-protocol-v1.0.zh.md # 中文平行版(informative)
128
- │ ├── fcop-spec.md # 规范入口索引
129
- │ ├── fcop-spec-v1.0.3.md # 0.7.x 遗留规范(向后兼容保留)
130
- │ └── schemas/ # 8 个 JSON Schema(机器可读,v1.1)
147
+ ├── spec/ # 规范文件(参见 spec/README.md)
148
+ │ ├── fcop-3.0-spec.md # ★ 英文权威规范(FCoP 3.0 canonical)
149
+ │ ├── fcop-3.0-spec.zh.md # 中文平行版(informative)
150
+ │ ├── fcop-3.0-rfc.md / .zh.md # IETF 风格 RFC 版本
151
+ │ ├── schemas/ # 8 JSON Schemas(机器可读)
152
+ │ └── archived/ # v1.0 / v1.1 / 0.7.x 早期 spec(已被取代,保留作历史)
131
153
  ├── docs/ # 入门、迁移、发版记录、MCP 工具说明
132
154
  │ └── getting-started.md # ← 新用户从这里开始
133
155
  ├── adr/ # 架构决策(ADR-0001..0022)
@@ -195,6 +217,9 @@ mkdir -p fcop/{tasks,reports,issues,shared,log}
195
217
 
196
218
  | 版本 | 一句话 |
197
219
  |---|---|
220
+ | **3.0.2**([CHANGELOG](CHANGELOG.md)) | **v3.0.2 — 初始化拓扑修复。** 关键 patch:3.0.0 / 3.0.1 的 `Project._apply_init` 只创建了 v2 老桶,跳过了 spec §1.1 强制要求的 v3 `_lifecycle/{inbox,active,review,done,archive}/` 五桶。3.0.2 让 fresh init 直接落 v3 拓扑(同时不再创建被 superseded 的 v2 `tasks/` / `log/`);`core.events.scan_workspace` 与 `Project.role_occupancy()` 在 v3 项目下从 `_lifecycle/` 读取。新增 audit 扫描 `_scan_lifecycle_topology_compliance()`(D9):P0 = 已初始化项目同时缺 `_lifecycle/` 和 v2 内容;P1 = 两套拓扑共存(建议 `migrate --to-v3`)。MCP 工具描述(`init_solo` / `init_project` / `create_custom_team`)同步更新。1209 测试全绿。SemVer patch:相对 3.0.1 无 API 表面改动——init 之前在做错事。 |
221
+ | **3.0.1**([CHANGELOG](CHANGELOG.md)) | **v3.0.1 — 路径整合补丁。** 纯文档/元数据 patch,无代码逻辑变更:3.0.0 把 v1.0/v1.1 历史 spec 草稿移到 `spec/archived/` 后,修复散落在 `AGENTS.md` / `CLAUDE.md` / 打包 Cursor rules / MCP server docstring / 两份 JSON Schema `description` 中的失效链接,统一指向 `spec/archived/fcop-runtime-protocol-v1.0.{md,zh.md}`(并指针到当前 canonical `spec/fcop-3.0-spec.md`)。`fcop-mcp` 的 `fcop://spec` / `fcop://spec/en` docstring 同步修正为反映 wheel 实际打包内容(`fcop-spec-v1.1.{lang}.md`)。历史制品(TASK / REPORT / ADR / release notes / migration docs)按 ADR-0036"历史不重写"原则保留原文。1202 测试全绿。 |
222
+ | **3.0.0**([CHANGELOG](CHANGELOG.md)) | **v3.0 — 协议级 MAJOR ·"文件夹即状态"纪元。** FCoP 协议本体的一次完整重写——canonical 双层(per [ADR-0040](adr/ADR-0040-canonical-one-liner-two-layer-convention.md)):**Layer 1**「文件即协议;位置定义状态;事件记录历史」+ **Layer 2** 语义本体。新增 `_lifecycle/{inbox,active,review,done,archive}/` 五桶目录拓扑(**与 2.x 不兼容**,须 `fcop migrate --to-v3`);三层规则集(State Layer Rule A/B/C · Event Layer Rule E/F/G · Boundary Charter);7 条允许迁移表外不可(实现 MUST 拒绝);write-then-rename 原子性模式(事件即迁移,迁移即事件);ADR-0037 Custody Layer 在 RFC 评审中**未进 Accepted 即被作废**(custody 不构成协议层,以 NOTE 形式保留为衍生解释)。新增 [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md) 单页 canonical + IETF 风格 RFC 平行版 + 中文平行版 + [`docs/MIGRATION-3.0.md`](docs/MIGRATION-3.0.md) 迁移指南。 |
198
223
  | **2.0.2**([CHANGELOG](CHANGELOG.md)) | **v2.0.2 — `fcop-mcp` 正式入驻[官方 MCP 注册表](https://registry.modelcontextprotocol.io/)**(`io.github.joinwell52-AI/fcop`)。由 Anthropic + GitHub + Microsoft 联合背书的官方目录收录,Claude Desktop / Cursor / PulseMCP 等所有 MCP 客户端均可一键发现并通过 `uvx fcop-mcp` 安装。双包 lockstep 版本号对齐(per ADR-0002):`fcop` 库代码与 v2.0.0 **完全一致**;本次跨版本是把 fcop-mcp@2.0.1 的 MCP-元数据 patch 合并进同日 release,并落地"发版+备份一条龙" SOP——`RULES-release-file-inventory.md`(12 类清单)、`RULES-mcp-registry-release.md`(三步升级路径)、以及 `joinwell52-AI/FCoP-backup` append-only 备份镜像。 |
199
224
  | **2.0.0**([CHANGELOG](CHANGELOG.md)) | **v2.0 — "两图对偶"哲学层主版本号跨越。** 执行面与 v1.x 完全一致(per ADR-0003 附加性),主版本号跨越是因为协议层首次同时承认**两张图**:**执行哲学的五层垂直栈**(v1.x 已稳定)*与* **FCoP Semantic Evolution Loop**(七节点闭环——涌现 → 观察 → 提案 → 评审 → 合并 → 部署 → 反射,v2.0 新固化)。新增 Rule 4.6(`fcop/internal/` vs `docs/` + `essays/` 软约定 + `internal-only` 声明语法 v1)、`Project.init(deploy_internal_template=...)` opt-in 参数、P3(建议级,非阻塞)巡查严重度档、以及 `fcop_audit` 内置豁免清单(`log/`/`_archive/`/`legacy-non-protocol/`,修复 codeflow 跨项目巡检暴露的三个上游 bug:ISSUE-008/009/010)。ADR-0034。 |
200
225
  | **1.6.0**([CHANGELOG](CHANGELOG.md)) | **v1.6 — Trailing-slug 文件名收编(ADR-0033)。** `TASK-20260512-025-PM-to-OPS-phase-a-fix-naming.md` 这类长文件名正式合规——把 codeflow 项目 22+ 例自发涌现写法吸收进文法。slug 不参与路由,只是人类可读标签。100% 向后兼容(既有 1057 个单测 0 回归)。 |
@@ -258,13 +283,13 @@ agent 会识别系统、装 `uv`、改 `mcp.json`(**保留**已有 server)
258
283
  | **FCoP 新手** — 45 分钟上手实战 | [`docs/getting-started.md`](docs/getting-started.md) |
259
284
  | **从 0.7.x 升级** — workspace 迁移 + 4 个新概念 | [`docs/MIGRATION-1.0.md`](docs/MIGRATION-1.0.md) |
260
285
  | **从 1.0/1.1 升级到 1.2** — Capability Governance + 锁步发版 | [`docs/MIGRATION-1.1.md`](docs/MIGRATION-1.1.md) · [CHANGELOG](CHANGELOG.md) |
261
- | **理解协议契约** — 合规实现 MUST 做什么 | [`spec/fcop-runtime-protocol-v1.0.zh.md`](spec/fcop-runtime-protocol-v1.0.zh.md)(中文)|
286
+ | **理解协议契约** — 合规实现 MUST 做什么 | [`spec/fcop-3.0-spec.zh.md`](spec/fcop-3.0-spec.zh.md) — 单页正式规范 v3.0(中文)。v1.0/v1.1 早期 spec 草稿在 `spec/` 中保留作为历史参考。 |
262
287
  | **v1.2 Capability Governance** — FCoPGovernanceMiddleware、风险标记、审计日志 | [CHANGELOG](CHANGELOG.md) · ADR-0030-bis |
263
288
  | **v1.1 新字段** — risk_level、needs_human、human_approval、skill tools | [CHANGELOG](CHANGELOG.md) · ADR-0023..0027 |
264
289
  | **理解决策背后的原因** — 每个设计的考量 | [`adr/`](adr/) — 从 [ADR-0029](adr/ADR-0029-fcop-behavior-governance-charter.md) 开始 |
265
290
  | **全部 35 个 MCP 工具与 14 个资源** | [`docs/mcp-tools.md`](docs/mcp-tools.md) |
266
291
  | **发布说明** — 完整变更日志 | [`CHANGELOG.md`](CHANGELOG.md) |
267
- | **完整文档地图** — 每个文件的角色 | [spec Appendix B](spec/fcop-runtime-protocol-v1.0.md#appendix-b--authoritative-document-map) |
292
+ | **完整文档地图** — 每个文件的角色 | [`adr/README.md`](adr/README.md)(ADR 索引)+ [`spec/fcop-3.0-spec.zh.md`](spec/fcop-3.0-spec.zh.md) §11(引用材料)|
268
293
 
269
294
  ---
270
295
 
@@ -285,8 +310,8 @@ agent 会识别系统、装 `uv`、改 `mcp.json`(**保留**已有 server)
285
310
 
286
311
  ## 状态与版本
287
312
 
288
- - **当前发布**:`v2.0.2`(2026-05-13)——**`fcop-mcp` 正式入驻 [官方 MCP 注册表](https://registry.modelcontextprotocol.io/)**(`io.github.joinwell52-AI/fcop`),由 Anthropic + GitHub + Microsoft 联合背书的官方目录收录。从此 Claude Desktop / Cursor / PulseMCP 等所有 MCP 客户端均可一键发现并通过 `uvx fcop-mcp` 安装。v2.0.2 是 **双包 lockstep 行政性版本号对齐**(per ADR-0002):`fcop` 库代码与 v2.0.0 **完全一致**;本次跨版本合并 fcop-mcp@2.0.1 的 MCP-元数据 patch,并落地"发版+备份一条龙" SOP(`RULES-release-file-inventory.md`、`RULES-mcp-registry-release.md`、append-only 备份镜像)。早期发布:v2.0.0 —— "两图对偶"哲学主版本号跨越,协议层首次同时承认**两张图**(执行哲学五层垂直栈 *与* FCoP Semantic Evolution Loop 七节点闭环),同期新增 Rule 4.6(`fcop/internal/` 软约定)、`deploy_internal_template` opt-in、P3 巡查严重度档,并修复 codeflow 跨项目巡检暴露的三个 `fcop_audit` 上游 bug(ISSUE-008/009/010)。详见 [CHANGELOG](CHANGELOG.md)。早期发布:v1.6(trailing-slug 文件名收编,ADR-0033)、v1.5(84 份协议感知同步)、v1.4(write-side 守门 + `supersedes:` 字段)、v1.3(GAL + `fcop_audit()` 巡查编译器)、v1.2.1(Capability Governance 支柱)、v1.1(Agent.layer + Task.risk_level + needs_human)、v1.0(七大核心概念 spec freeze)。
289
- - **规范性文件**:[`spec/fcop-runtime-protocol-v1.0.zh.md`](spec/fcop-runtime-protocol-v1.0.zh.md)(中文 v1.0 基线)· [`spec/fcop-runtime-protocol-v1.0.md`](spec/fcop-runtime-protocol-v1.0.md)(英文权威)· v1.1 spec 通过 `fcop.rules.get_spec()` 内置于 wheel · 机器可读契约见 [`spec/schemas/`](spec/schemas/)(8 个 Schema)
313
+ - **当前发布**:`v3.0.2`(2026-05-22)——**初始化拓扑修复。** 关键 patch:3.0.0 / 3.0.1 的 `Project._apply_init` 只创建了 v2 老桶,跳过了 spec §1.1 强制要求的 v3 `_lifecycle/{inbox,active,review,done,archive}/` 五桶——所有在那两版上 fresh init 的项目都是**生而不合规**的。3.0.2 让 fresh init 直接落 v3 拓扑(同时不再创建被 superseded 的 v2 `tasks/` / `log/`);`core.events.scan_workspace` 与 `Project.role_occupancy()` 在 v3 项目下从 `_lifecycle/` 读取。新增 audit 扫描 `_scan_lifecycle_topology_compliance()`(D9):P0 = 已初始化项目同时缺 `_lifecycle/` 和 v2 内容;P1 = 两套拓扑共存(建议 `migrate --to-v3`)。MCP 工具描述(`init_solo` / `init_project` / `create_custom_team`)同步更新。1209 测试全绿。SemVer patch:无 API 表面改动——init 之前在做错事。前置 **v3.0.1**(2026-05-21)—— 路径整合补丁(纯文档)。前置 **v3.0.0**(2026-05-21)—— **协议级 MAJOR ·"文件夹即状态"纪元**:FCoP 协议本体的一次完整重写——canonical 双层(per [ADR-0040](adr/ADR-0040-canonical-one-liner-two-layer-convention.md))「文件即协议;位置定义状态;事件记录历史」+ 语义本体;新增 `_lifecycle/{inbox,active,review,done,archive}/` 五桶目录拓扑(**与 2.x 不兼容**,须 `fcop migrate --to-v3`);三层规则集(State / Event / Boundary Charter)+ 7 条允许迁移表外不可 + write-then-rename 原子性;ADR-0037 Custody Layer 在 RFC 评审中**未进 Accepted 即被作废**。详见 [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md) 与 [`docs/MIGRATION-3.0.md`](docs/MIGRATION-3.0.md)。早期发布:v2.0.2(fcop-mcp 入驻官方 MCP 注册表)、v2.0.0(两图对偶哲学主版本号跨越 + Rule 4.6 `fcop/internal/`)、v1.6(trailing-slug 文件名收编,ADR-0033)、v1.5(84 份协议感知同步)、v1.4(write-side 守门 + `supersedes:` 字段)、v1.3(GAL + `fcop_audit()` 巡查编译器)、v1.2.1(Capability Governance 支柱)、v1.1(Agent.layer + Task.risk_level + needs_human)、v1.0(七大核心概念 spec freeze)。详见 [CHANGELOG](CHANGELOG.md)。
314
+ - **规范性文件**:[`spec/fcop-3.0-spec.zh.md`](spec/fcop-3.0-spec.zh.md)(中文 v3.0)· [`spec/fcop-3.0-spec.md`](spec/fcop-3.0-spec.md)(英文权威 v3.0)· v1.0/v1.1 早期 spec 草稿在 `spec/` 中保留作为历史参考 · 机器可读契约见 [`spec/schemas/`](spec/schemas/)(8 个 Schema)
290
315
  - **本仓内 Agent 规则(`.mdc`)**:[`src/fcop/rules/_data/fcop-rules.mdc`](src/fcop/rules/_data/fcop-rules.mdc) + [`fcop-protocol.mdc`](src/fcop/rules/_data/fcop-protocol.mdc)(`spec/codeflow-core.mdc` 仅为弃用占位)
291
316
  - **变更记录**:[`CHANGELOG.md`](CHANGELOG.md)
292
317
  - **研究快照**:[`research-snapshot-2026-04-29`](https://github.com/joinwell52-AI/FCoP/releases/tag/research-snapshot-2026-04-29) 已经归档到 Zenodo 并分配 DOI(详见下文 *如何引用*)。
@@ -128,6 +128,13 @@ ADR-NNNN-kebab-case-title.md
128
128
  | **[ADR-0032](./ADR-0032-fcop-audit-protocol-inspection.md)** | **fcop_audit() — 协议状态编译器(三场景体检 / Structured Findings + Suggested Plan)** | **Accepted** | 2026-05-12 |
129
129
  | **[ADR-0033](./ADR-0033-trailing-slug-filename-adoption.md)** | **Trailing slug filename adoption — TASK·REPORT·ISSUE 文件名 trailing-slug 收编(MINOR additive · codeflow 现场涌现协议化)** | **Accepted** | 2026-05-12 |
130
130
  | **[ADR-0034](./ADR-0034-fcop-internal-external-document-convention.md)** | **FCoP internal / external document convention — `fcop/internal/` vs `docs/` + `essays/` soft convention(Rule 4.6 · `internal-only` 声明 v1 · v2.0 "两图对偶"纪元)** | **Implemented** | 2026-05-13 |
131
+ | **[ADR-0035](./ADR-0035-lifecycle-directory-and-tool-layers.md)** | **FCoP 3.0 State Ontology — Lifecycle directory structure(path = NOW truth · semantics frozen per RFC 2026-05-21)** | **Accepted & Frozen** | 2026-05-21 |
132
+ | **[ADR-0036](./ADR-0036-lifecycle-event-layer.md)** | **FCoP 3.0 Event Layer — `transitions:` 履历(events = PAST audit-only · write-then-rename atomic pattern · Rule E/F/G)** | **Accepted** | 2026-05-21 |
133
+ | **ADR-0037** *(file deleted)* | ~~Custody & Handoff~~ — **Rejected by RFC 2026-05-21**(custody 不能作为协议层;思想保留为 [NOTE-custody-is-not-a-layer.md](./NOTE-custody-is-not-a-layer.md);决策叙事见 [essays/the-day-we-almost-added-custody.md](../essays/the-day-we-almost-added-custody.md)) | **Withdrawn** | 2026-05-21 |
134
+ | **[ADR-0038](./ADR-0038-fcop-boundary-charter.md)** | **FCoP Boundary Charter — Meta-charter: Agent POSIX not Agent OS · 五问过滤器 + §5.1 豁免条款 · 所有未来 ADR 必经审查** | **Accepted** | 2026-05-21 |
135
+ | **[ADR-0039](./ADR-0039-fcop-freeze-discipline-and-runtime-absorption-era.md)** | **Freeze Discipline & Runtime Absorption Era — 协议设计期结束,进入 runtime 吸收期;任何新协议机制必须由 runtime 痛点驱动(per §5.1 E1/E2/E3);含 4 题 pre-flight checklist + 观察 backlog 机制** | **Accepted** | 2026-05-21 |
136
+ | **[ADR-0040](./ADR-0040-canonical-one-liner-two-layer-convention.md)** | **Canonical One-Liner Two-Layer Convention — 把 canonical 拆为 Layer 1(认知引导:"文件即协议;位置定义状态;事件记录历史")+ Layer 2(语义本体);v1 单行 canonical 退役为题词** | **Accepted (informative)** | 2026-05-21 |
137
+ | [NOTE-custody-is-not-a-layer](./NOTE-custody-is-not-a-layer.md) | Semantic Note · Custody = interpretation of state + events,不是协议层(替代撤销的 ADR-0037 思想) | Informative | 2026-05-21 |
131
138
 
132
139
  ---
133
140
 
@@ -0,0 +1,27 @@
1
+ # `spec/` — FCoP Normative Specifications
2
+
3
+ > **TL;DR**: Read [`fcop-3.0-spec.md`](./fcop-3.0-spec.md). Everything else is either auxiliary or historical.
4
+
5
+ ## Canonical (FCoP 3.0, current)
6
+
7
+ | File | Role |
8
+ |---|---|
9
+ | [`fcop-3.0-spec.md`](./fcop-3.0-spec.md) · [中文](./fcop-3.0-spec.zh.md) | ★ **Single-page canonical specification.** Authoritative. |
10
+ | [`fcop-3.0-rfc.md`](./fcop-3.0-rfc.md) · [中文](./fcop-3.0-rfc.zh.md) | IETF-style RFC projection of the same content. Same normative force, different shape. |
11
+ | [`schemas/`](./schemas/) | 8 machine-readable JSON Schemas. |
12
+
13
+ ## Auxiliary
14
+
15
+ | File | Role |
16
+ |---|---|
17
+ | `codeflow-core.mdc` | Cursor Rules companion for downstream `codeflow` runtime; not part of FCoP itself. |
18
+
19
+ ## Historical (superseded — do not treat as normative)
20
+
21
+ See [`archived/README.md`](./archived/README.md) for the full v1.0 / v1.1 / 0.7.x lineage. They are retained for citation continuity and discovery audit only.
22
+
23
+ ## Governance & evolution
24
+
25
+ - [`../adr/README.md`](../adr/README.md) — ADR index (canonical decisions)
26
+ - [`../adr/ADR-0039-fcop-freeze-discipline-and-runtime-absorption-era.md`](../adr/ADR-0039-fcop-freeze-discipline-and-runtime-absorption-era.md) — **post-3.0 change discipline** (read this before proposing spec changes)
27
+ - [`../adr/ADR-0040-canonical-one-liner-two-layer-convention.md`](../adr/ADR-0040-canonical-one-liner-two-layer-convention.md) — how FCoP describes itself