修掉一处会让并行保护失效的设计缺口: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>
101 lines
2.4 KiB
JSON
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
|
|
}
|
|
}
|