Files
cmbuyer/docs/agent-context.json
QiuSWandClaude Opus 5 3c458bcf5b fix(tasks): make status git-authoritative, not Vikunja
修掉一处会让并行保护失效的设计缺口:AGENTS.md 声明「状态」权威在 Vikunja,
但离线门禁的检查 1 读的是 frontmatter 的 status,两者之间没有任何同步。
有人在看板上拖了卡片,frontmatter 不变,门禁就用过期数据放行了。

status 的权威定为 git frontmatter,理由与 write_paths 相同:它是判定
「两个活跃任务不得写同一路径」的输入,而门禁必须离线可跑;status 变更
决定谁能碰哪些文件,本来就该产生 commit。

- AGENTS.md:把 status 从 Vikunja 权威列表移入 git 原生表,并说明 bucket
  与 done 仅为人类视图,不一致时以 git 为准
- agent-context.json:tracker.git_native_fields 增加 status
- validate_agent_context.py:强制 git_native_fields 必须含 status,
  已用反例验证缺失时报错
- vikunja_export.py:新增只读漂移检测,导出时比对 frontmatter status 与
  Vikunja done,不一致则提示;只提示不修正,不反向写回
- docs/tasks/README.md、T-008 方案第 1/2 节:同步口径

顺带解决了窄 token 时期的 bucket 401 遗留问题——status 权威在 git,
agent 不再依赖 bucket 移动来表达状态。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 17:17:35 +08:00

101 lines
2.4 KiB
JSON

{
"schema": "docs/agent-context.schema.json",
"schema_version": 2,
"authority": {
"bootstrap": "local_checkout",
"framework_templates": "current_repository",
"project_facts": "current_project_repository",
"coordination": "task_files"
},
"bootstrap": {
"always_read": [
"AGENTS.md",
"docs/00-ai-start-here.md",
"docs/05-coding-rules.md",
"docs/current-state.md"
]
},
"routes": {
"documentation": [
"README.md",
"docs/README.md",
"docs/01-vision.md",
"docs/02-requirements.md",
"docs/07-user-stories.md",
"docs/08-interaction-checklist.md"
],
"ui": [
"docs/02-requirements.md",
"docs/07-user-stories.md",
"docs/08-interaction-checklist.md",
"docs/routes.md",
"docs/04-architecture.md"
],
"api": [
"docs/api.md",
"docs/04-architecture.md",
"docs/05-coding-rules.md"
],
"data": [
"docs/02-requirements.md",
"docs/04-architecture.md",
"docs/api.md"
],
"automation": [
"docs/04-architecture.md",
"docs/api.md",
"docs/05-coding-rules.md",
"docs/03-tech-stack.md"
],
"deploy": [
"docs/03-tech-stack.md",
"docs/current-state.md"
]
},
"tasks": {
"roadmap": "docs/06-tasks.md",
"directory": "docs/tasks/",
"template": "docs/tasks/_template.md"
},
"shared_documents": [
"AGENTS.md",
"README.md",
"docs/00-ai-start-here.md",
"docs/02-requirements.md",
"docs/03-tech-stack.md",
"docs/04-architecture.md",
"docs/05-coding-rules.md",
"docs/06-tasks.md",
"docs/07-user-stories.md",
"docs/08-interaction-checklist.md",
"docs/api.md",
"docs/current-state.md",
"docs/routes.md",
"docs/tasks/README.md"
],
"tracker": {
"kind": "vikunja",
"project": "cmbuyer",
"export_script": "scripts/vikunja_export.py",
"direction": "tracker_to_git",
"git_native_fields": [
"status",
"write_paths",
"context_ref",
"work_branch",
"boundaries_section"
]
},
"refresh": {
"context_ref": "default_branch_head_sha",
"cache_key": "file_sha",
"unchanged_file": "reuse_within_current_session",
"changed_ref": "reread_manifest_and_routed_documents"
},
"degraded_mode": {
"continue_claimed_task": true,
"claim_new_task": false,
"write_remote_state": false
}
}