@namewta/speculo 2.0.5 → 2.1.0
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.
- package/README.md +3 -0
- package/THIRD-PARTY-NOTICES.md +4 -0
- package/dist/src/agent-skills.d.ts +5 -0
- package/dist/src/agent-skills.js +10 -7
- package/dist/src/agent-skills.js.map +1 -1
- package/dist/src/cli.js +17 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/coordination.d.ts +3 -3
- package/dist/src/coordination.js +21 -4
- package/dist/src/coordination.js.map +1 -1
- package/dist/src/doctor.js +8 -1
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/external-files.d.ts +4 -2
- package/dist/src/external-files.js +4 -4
- package/dist/src/external-files.js.map +1 -1
- package/dist/src/hub-catalog.d.ts +11 -0
- package/dist/src/hub-catalog.js +91 -0
- package/dist/src/hub-catalog.js.map +1 -0
- package/dist/src/hub-resources.json +1 -0
- package/dist/src/hub-skills.d.ts +53 -0
- package/dist/src/hub-skills.js +157 -0
- package/dist/src/hub-skills.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.js +48 -47
- package/dist/src/index.js.map +1 -1
- package/dist/src/install-ui.d.ts +16 -0
- package/dist/src/install-ui.js +67 -11
- package/dist/src/install-ui.js.map +1 -1
- package/dist/src/manifest.d.ts +2 -0
- package/dist/src/manifest.js +2 -0
- package/dist/src/manifest.js.map +1 -1
- package/dist/src/refresh.d.ts +1 -0
- package/dist/src/refresh.js +13 -10
- package/dist/src/refresh.js.map +1 -1
- package/dist/src/retained-workflows.d.ts +10 -0
- package/dist/src/retained-workflows.js +25 -0
- package/dist/src/retained-workflows.js.map +1 -0
- package/dist/src/runtime-entry.d.ts +1 -0
- package/dist/src/runtime-entry.js +1 -0
- package/dist/src/runtime-entry.js.map +1 -1
- package/dist/src/skill-trees.d.ts +27 -0
- package/dist/src/skill-trees.js +118 -0
- package/dist/src/skill-trees.js.map +1 -0
- package/dist/src/transaction.d.ts +3 -14
- package/dist/src/transaction.js +20 -36
- package/dist/src/transaction.js.map +1 -1
- package/dist/src/workflow-install.d.ts +15 -0
- package/dist/src/workflow-install.js +104 -0
- package/dist/src/workflow-install.js.map +1 -0
- package/package.json +4 -2
- package/skills-hub/automation/grok-bot-team-steward/CHEATSHEET.md +17 -0
- package/skills-hub/automation/grok-bot-team-steward/INSTALL.md +23 -0
- package/skills-hub/automation/grok-bot-team-steward/LICENSE +21 -0
- package/skills-hub/automation/grok-bot-team-steward/README.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/SKILL.md +52 -0
- package/skills-hub/automation/grok-bot-team-steward/agents/openai.yaml +4 -0
- package/skills-hub/automation/grok-bot-team-steward/references/00-hard-rules.md +50 -0
- package/skills-hub/automation/grok-bot-team-steward/references/01-snapshot-schema.md +84 -0
- package/skills-hub/automation/grok-bot-team-steward/references/02-export-protocol.md +57 -0
- package/skills-hub/automation/grok-bot-team-steward/references/03-restore-protocol.md +64 -0
- package/skills-hub/automation/grok-bot-team-steward/references/04-inventory.md +37 -0
- package/skills-hub/automation/grok-bot-team-steward/references/05-conversations.md +71 -0
- package/skills-hub/automation/grok-bot-team-steward/references/06-sanitizer.md +39 -0
- package/skills-hub/automation/grok-bot-team-steward/references/07-prompts.md +87 -0
- package/skills-hub/automation/grok-bot-team-steward/references/08-verification.md +30 -0
- package/skills-hub/automation/grok-bot-team-steward/references/09-sources.md +31 -0
- package/skills-hub/automation/grok-bot-team-steward/scripts/scrub.sh +17 -0
- package/skills-hub/automation/grok-bot-team-steward/scripts/snapshot-name.sh +18 -0
- package/skills-hub/automation/grok-bot-team-steward/scripts/validate-snapshot.sh +62 -0
- package/skills-hub/automation/grok-bot-team-steward/steward/ACTIVATE.md +58 -0
- package/skills-hub/automation/grok-bot-team-steward/steward/SETUP-INSTRUCTIONS.md +33 -0
- package/skills-hub/automation/grok-bot-team-steward/steward/STEWARD-PROFILE.md +28 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/CHANGELOG.md +3 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/CHARTER.md +27 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/DROP-LIST.md +10 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/GAPS.md +6 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/INIT.md +14 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/MANIFEST.md +30 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/MANIFEST.yaml +20 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/ORG.md +15 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/README.md +8 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/RESTORE.md +13 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/ROSTER.md +11 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/GAPS.md +7 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/MEMORY.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/PROFILE.md +27 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/agent-spec.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/conversations/INDEX.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/conversations/main.md +9 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/routines.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/bots/_SLUG/skills.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/connectors.md +7 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/COMPLETED.md +6 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/CREATED.md +6 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/RESTORE-NOTES.md +13 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/SANITIZER.md +7 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/meta/SOURCE.md +8 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/rooms/_ROOM.md +8 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/routines/_ROUTINE.md +12 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/shared/shared-memory.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/shared/workspace-map.md +5 -0
- package/skills-hub/automation/grok-bot-team-steward/templates/snapshot/skills/_SKILL/SKILL.md +18 -0
- package/skills-hub/automation/herdr/SKILL.md +246 -0
- package/skills-hub/automation/orca/SKILL.md +328 -0
- package/skills-hub/coding/gitea-repo/LICENSE +21 -0
- package/skills-hub/coding/gitea-repo/SKILL.md +50 -0
- package/skills-hub/coding/gitea-repo/agents/openai.yaml +4 -0
- package/skills-hub/coding/gitea-repo/references/auth-and-scopes.md +58 -0
- package/skills-hub/coding/gitea-repo/references/endpoint-map.md +80 -0
- package/skills-hub/coding/gitea-repo/references/pagination-and-errors.md +34 -0
- package/skills-hub/coding/gitea-repo/scripts/gitea_api.py +814 -0
- package/skills-hub/coding/github-repo-steward/LICENSE +21 -0
- package/skills-hub/coding/github-repo-steward/SKILL.md +48 -0
- package/skills-hub/coding/github-repo-steward/agents/openai.yaml +4 -0
- package/skills-hub/coding/github-repo-steward/references/00-auth-and-tokens.md +73 -0
- package/skills-hub/coding/github-repo-steward/references/01-inventory.md +55 -0
- package/skills-hub/coding/github-repo-steward/references/02-lifecycle.md +57 -0
- package/skills-hub/coding/github-repo-steward/references/03-stars.md +42 -0
- package/skills-hub/coding/github-repo-steward/references/04-hygiene.md +40 -0
- package/skills-hub/coding/github-repo-steward/references/05-sources.md +42 -0
- package/skills-hub/coding/github-repo-steward/scripts/inventory.sh +64 -0
- package/skills-hub/coding/vscode-fullstack/LICENSE +21 -0
- package/skills-hub/coding/vscode-fullstack/SKILL.md +47 -0
- package/skills-hub/coding/vscode-fullstack/agents/openai.yaml +4 -0
- package/skills-hub/coding/vscode-fullstack/references/extensions-and-settings.md +181 -0
- package/skills-hub/coding/vscode-fullstack/references/profiles-and-validation.md +62 -0
- package/skills-hub/coding/vscode-fullstack/references/runtime-reuse.md +52 -0
- package/skills-hub/design/photo-retouch/LICENSE +21 -0
- package/skills-hub/design/photo-retouch/SKILL.md +50 -0
- package/skills-hub/design/photo-retouch/agents/openai.yaml +4 -0
- package/skills-hub/design/photo-retouch/references/basic-retouch.md +58 -0
- package/skills-hub/design/photo-retouch/references/formal-portrait.md +57 -0
- package/skills-hub/design/photo-retouch/references/object-and-canvas.md +82 -0
- package/skills-hub/design/photo-retouch/references/product-photo.md +41 -0
- package/skills-hub/design/photo-retouch/references/repair-and-look.md +61 -0
- package/skills-hub/design/photo-retouch/references/social-effects.md +55 -0
- package/skills-hub/design/photo-retouch/references/travel-creative.md +79 -0
- package/skills-hub/system/clash-client-profile/LICENSE +21 -0
- package/skills-hub/system/clash-client-profile/SKILL.md +79 -0
- package/skills-hub/system/clash-client-profile/agents/openai.yaml +4 -0
- package/skills-hub/system/clash-client-profile/references/acceptance.md +81 -0
- package/skills-hub/system/clash-client-profile/references/browser-privacy.md +35 -0
- package/skills-hub/system/clash-client-profile/references/clash-verge.md +40 -0
- package/skills-hub/system/clash-client-profile/references/dns-workflow.md +147 -0
- package/skills-hub/system/clash-client-profile/references/flclash.md +24 -0
- package/skills-hub/system/clash-client-profile/references/network-performance.md +25 -0
- package/skills-hub/system/clash-client-profile/references/platform-dns.md +109 -0
- package/skills-hub/system/clash-client-profile/references/sources.md +46 -0
- package/skills-hub/system/clash-client-profile/references/troubleshooting.md +82 -0
- package/skills-hub/system/clash-client-profile/scripts/dns_guard.py +650 -0
- package/skills-hub/system/clash-client-profile/scripts/proxy_doctor.py +213 -0
- package/skills-hub/system/clash-client-profile/scripts/render_rules.py +34 -0
- package/skills-hub/system/clash-client-profile/templates/ai-rules.yaml +18 -0
- package/skills-hub/system/clash-client-profile/templates/dns-request.example.json +9 -0
- package/skills-hub/system/clash-client-profile/templates/dns.yaml +8 -0
- package/skills-hub/system/linux-dev-disk-cleanup/LICENSE +21 -0
- package/skills-hub/system/linux-dev-disk-cleanup/SKILL.md +42 -0
- package/skills-hub/system/linux-dev-disk-cleanup/agents/openai.yaml +4 -0
- package/skills-hub/system/linux-dev-disk-cleanup/references/linux-cleanup-workflow.md +145 -0
- package/skills-hub/system/optimize-codex-config/LICENSE +21 -0
- package/skills-hub/system/optimize-codex-config/SKILL.md +101 -0
- package/skills-hub/system/optimize-codex-config/agents/openai.yaml +4 -0
- package/skills-hub/system/optimize-codex-config/assets/capabilities.example.json +22 -0
- package/skills-hub/system/optimize-codex-config/references/cli.md +35 -0
- package/skills-hub/system/optimize-codex-config/references/configuration-contract.md +33 -0
- package/skills-hub/system/optimize-codex-config/references/optimization-method.md +38 -0
- package/skills-hub/system/optimize-codex-config/references/privacy.md +41 -0
- package/skills-hub/system/optimize-codex-config/references/sources.md +24 -0
- package/skills-hub/system/optimize-codex-config/references/statusline.md +31 -0
- package/skills-hub/system/optimize-codex-config/references/transactions.md +32 -0
- package/skills-hub/system/optimize-codex-config/references/troubleshooting.md +95 -0
- package/skills-hub/system/optimize-codex-config/scripts/adapters/claude.mjs +24 -0
- package/skills-hub/system/optimize-codex-config/scripts/adapters/codex.mjs +10 -0
- package/skills-hub/system/optimize-codex-config/scripts/ai-cli-config.mjs +67 -0
- package/skills-hub/system/optimize-codex-config/scripts/audit-codex-config.mjs +762 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/document.mjs +166 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/inspect.mjs +211 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/io.mjs +104 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/plan.mjs +79 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/transaction.mjs +205 -0
- package/skills-hub/system/optimize-codex-config/scripts/lib/writers.mjs +46 -0
- package/skills-hub/system/optimize-codex-config/scripts/statusline/claude-statusline.mjs +94 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/THIRD-PARTY-NOTICES.txt +250 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/build-package-lock.json +488 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/manifest.json +14 -0
- package/skills-hub/system/optimize-codex-config/scripts/vendor/parsers.mjs +16 -0
- package/skills-hub/system/proxy-region-locale/LICENSE +21 -0
- package/skills-hub/system/proxy-region-locale/SKILL.md +42 -0
- package/skills-hub/system/proxy-region-locale/agents/openai.yaml +4 -0
- package/skills-hub/system/proxy-region-locale/references/linux.md +35 -0
- package/skills-hub/system/proxy-region-locale/references/macos.md +31 -0
- package/skills-hub/system/proxy-region-locale/references/windows.md +45 -0
- package/skills-hub/system/system-health-audit/LICENSE +21 -0
- package/skills-hub/system/system-health-audit/SKILL.md +41 -0
- package/skills-hub/system/system-health-audit/agents/openai.yaml +4 -0
- package/skills-hub/system/system-health-audit/references/platforms.md +37 -0
- package/skills-hub/system/system-health-audit/scripts/system_audit.py +41 -0
- package/skills-hub/system/windows-dev-disk-cleanup/LICENSE +21 -0
- package/skills-hub/system/windows-dev-disk-cleanup/SKILL.md +40 -0
- package/skills-hub/system/windows-dev-disk-cleanup/agents/openai.yaml +4 -0
- package/skills-hub/system/windows-dev-disk-cleanup/references/windows-cleanup-workflow.md +121 -0
- package/skills-hub/writing/.gitkeep +0 -0
- package/skills-hub/writing/job-application/LICENSE +21 -0
- package/skills-hub/writing/job-application/SKILL.md +160 -0
- package/skills-hub/writing/job-application/agents/openai.yaml +4 -0
- package/skills-hub/writing/job-application/assets/resume.css +10 -0
- package/skills-hub/writing/job-application/config.example.json +9 -0
- package/skills-hub/writing/job-application/references/company-research.md +7 -0
- package/skills-hub/writing/job-application/references/corpus-schema.md +33 -0
- package/skills-hub/writing/job-application/references/honesty-gate.md +29 -0
- package/skills-hub/writing/job-application/references/improvement-plan.md +15 -0
- package/skills-hub/writing/job-application/references/ingest-protocol.md +18 -0
- package/skills-hub/writing/job-application/references/interview-speech.md +16 -0
- package/skills-hub/writing/job-application/references/jd-parse.md +18 -0
- package/skills-hub/writing/job-application/references/persist-paths.md +34 -0
- package/skills-hub/writing/job-application/references/question-bank.md +19 -0
- package/skills-hub/writing/job-application/references/rendering.md +9 -0
- package/skills-hub/writing/job-application/references/resume-playbook.md +30 -0
- package/skills-hub/writing/job-application/scripts/README.md +12 -0
- package/skills-hub/writing/job-application/scripts/ingest_kb.py +188 -0
- package/skills-hub/writing/job-application/scripts/render_resume.py +144 -0
- package/skills-hub/writing/job-application/scripts/validate_claims.py +52 -0
- package/skills-hub/writing/job-application/scripts/write_config.py +72 -0
- package/skills-hub/writing/job-application/templates/application-index.md +10 -0
- package/skills-hub/writing/job-application/templates/brief.md +16 -0
- package/skills-hub/writing/job-application/templates/changelog.md +6 -0
- package/skills-hub/writing/job-application/templates/company-research.md +15 -0
- package/skills-hub/writing/job-application/templates/corpus.md +11 -0
- package/skills-hub/writing/job-application/templates/evidence-map.md +5 -0
- package/skills-hub/writing/job-application/templates/framings.md +6 -0
- package/skills-hub/writing/job-application/templates/improvement-plan.md +16 -0
- package/skills-hub/writing/job-application/templates/ingest-log.md +4 -0
- package/skills-hub/writing/job-application/templates/known-gaps.md +4 -0
- package/skills-hub/writing/job-application/templates/match-report.md +21 -0
- package/skills-hub/writing/job-application/templates/methodology-cache.md +10 -0
- package/skills-hub/writing/job-application/templates/persist-index.md +11 -0
- package/skills-hub/writing/job-application/templates/profile.md +21 -0
- package/skills-hub/writing/job-application/templates/questions.md +22 -0
- package/skills-hub/writing/job-application/templates/resume-original.md +10 -0
- package/skills-hub/writing/job-application/templates/resume-tailored.md +21 -0
- package/skills-hub/writing/job-application/templates/sources-index.md +6 -0
- package/skills-hub/writing/job-application/templates/speech.md +19 -0
- package/skills-hub/writing/job-application/templates/stories.md +9 -0
- package/skills-hub/writing/job-application/templates/story-bank.md +11 -0
- package/skills-hub/writing/job-application/templates/strengths.md +4 -0
- package/skills-hub/writing/job-application/templates/style-memory.md +7 -0
- package/skills-hub/writing/ste-zh/LICENSE +21 -0
- package/skills-hub/writing/ste-zh/NOTICE.md +9 -0
- package/skills-hub/writing/ste-zh/SKILL.md +130 -0
- package/skills-hub/writing/ste-zh/agents/openai.yaml +6 -0
- package/skills-hub/writing/ste-zh/examples/zh-report.md +23 -0
- package/skills-hub/writing/ste-zh/references/english-modes.md +13 -0
- package/skills-hub/writing/ste-zh/references/terminology.md +13 -0
- package/skills-hub/writing/ste-zh/references/zh-rules.md +29 -0
- package/template/.speculo/refresh-contract.json +2 -0
- package/template/canonical/canonical-specdev-goal-plan.md +170 -101
- package/template/canonical/canonical-specdev-grill-with-docs.md +346 -277
- package/template/canonical/canonical-specdev-spec.md +346 -277
- package/template/canonical/canonical-specdev-tickets.md +346 -277
- package/template/canonical/canonical-specdev-wayfinder.md +346 -277
- package/template/lib/speculo-runtime.mjs +183 -8
- package/template/references/coordination/coordination-contract.md +12 -4
- package/template/references/coordination/modes/cli.md +3 -3
- package/template/references/coordination/modes/herdr.md +11 -11
- package/template/references/coordination/modes/orca.md +14 -14
- package/template/references/coordination/project-facts.schema.json +1 -0
- package/template/references/coordination/report-template.md +18 -0
- package/template/references/coordination/result-and-recovery.md +3 -3
- package/template/references/coordination/session-files.md +49 -56
- package/template/references/coordination/task-brief.md +3 -3
- package/template/references/coordination/task-template.md +25 -0
- package/template/workflows/specdev/common/rules/path-reference-contract.md +1 -1
- package/template/workflows/specdev/common/rules/workflow-state-and-lifecycle.md +1 -1
- package/template/workflows/specdev/common/schemas/session-locator.schema.json +15 -0
- package/template/workflows/specdev/common/skills/code-review/references/review-evidence.md +1 -1
- package/template/workflows/specdev/common/tools/README.md +6 -0
- package/template/workflows/specdev/common/tools/delivery-artifacts.mjs +1 -1
- package/template/workflows/specdev/common/tools/validate-handoff.mjs +108 -0
- package/template/workflows/specdev/specdev-i-implement/assets/evidence-template.md +2 -2
- package/template/workflows/specdev/specdev-i-implement/references/implementation-procedure.md +1 -1
- package/template/workflows/specdev/specdev-i-init-setup/SKILL.md +7 -6
- package/template/workflows/specdev/specdev-i-init-setup/references/first-setup.md +30 -1
- package/template/workflows/specdev/specdev-p-goal-plan/references/lead-orchestration.md +1 -1
|
@@ -1,93 +1,86 @@
|
|
|
1
1
|
# 派遣文件与聚焦交接
|
|
2
2
|
|
|
3
|
-
在已有 change 中通过 CLI、Herdr、Orca
|
|
3
|
+
在已有 change 中通过 CLI、Herdr、Orca 等外部工具实际派遣任务时读取。宿主原生协作按需采用,Lead 自行执行不创建虚构派遣。无 change 时使用当前 Work 已有报告位置,不补造 change。external-web 继续使用原 ZIP 交付合同。
|
|
4
4
|
|
|
5
5
|
## 目录与身份
|
|
6
6
|
|
|
7
7
|
SpecDev 任务目录为 <Path>{roots.state}/specdev/changes/{change}/sessions/{session}/{task}/</Path>:
|
|
8
8
|
|
|
9
|
-
- `{session}`
|
|
10
|
-
- `{task}`
|
|
11
|
-
-
|
|
12
|
-
-
|
|
9
|
+
- `{session}` 是一轮编排的交接分组,使用 UTC `YYYYMMDDTHHMMSSZ`,首次实际派遣才创建;同秒冲突追加最小未使用后缀 `-01`、`-02`。同一编排计划的实施、审查与修复沿用原轮次,恢复 Lead 或更换工具会话不自动新建轮次;另起独立编排或已收束后的新一轮执行才新建。
|
|
10
|
+
- `{task}` 是一次具体派遣,使用轮内最大编号加一,至少三位,后接小写英文主题,如 `001-implement-a1`、`002-implement-a2`、`003-review-a1`。Lead 分配编号,不回收、不从未经检查的标题直接拼路径。具体 Work、任务类型、change/Ticket 写入 TASK。
|
|
11
|
+
- 一轮可以只有一个 task,也可以并行或依次派遣多个 task;目录不是父子 Agent 拓扑。编排标识与工具的 Run、Dispatch、pane、provider session ID 分开,不能从临时目录 UUID 推导工具会话。
|
|
12
|
+
- 普通提问、进度通知与未交付任务的正常恢复沿用原 task。正式交付后的修复、重新派遣、更换执行者或实质改变输入时建立新编号并引用旧报告,不覆盖旧输入与结果,不增加 attempt 子目录。工具状态未知时先查询原调用,不能以新编号为由重复派遣仍可能写入的任务。
|
|
13
|
+
- 目录必须在当前 change 内,无链接跳转、大小写冲突或编号占用。一个工具会话可以承接多个 task,各自通过 TASK 与 REPORT 区分任务。
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
| 文件 | 唯一写入者 | 创建与更新 |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| <Path>{roots.state}/specdev/changes/{change}/sessions/{session}/{task}/TASK.md</Path> | Lead | 派遣前写入并回读,投递后冻结 |
|
|
18
|
+
| <Path>{roots.state}/specdev/changes/{change}/sessions/{session}/{task}/session-locator.json</Path> | Lead | 准确确认本任务会话日志的绝对路径后才创建 |
|
|
19
|
+
| <Path>{roots.state}/specdev/changes/{change}/sessions/{session}/{task}/REPORT.md</Path> | 执行者;仅文本返回时由 Lead 原样捕获 | 本次派遣交付时一次性写入,正式交付后不覆盖 |
|
|
15
20
|
|
|
16
|
-
|
|
21
|
+
不预造空定位文件、session 总表、状态 JSON、心跳或聊天流水。定位文件只保存一个会话日志路径,不承载执行进度、业务 Outcome 或另一套验收。
|
|
22
|
+
|
|
23
|
+
原 Evidence 或当前 Work 工件引用这些文件并保存 Lead 验收,不复制正文或重复维护地址。持久导航绑定稳定 change 身份与 change 根相对 locator,归档后按该 change 的唯一实际位置解析。其他领域仅在其 Work 已拥有的产物位置使用交接内容,不接管 SpecDev namespace。
|
|
17
24
|
|
|
18
25
|
## 输入与文件所有权
|
|
19
26
|
|
|
20
|
-
|
|
27
|
+
派遣前按 <Path>{roots.references}/coordination/task-template.md</Path> 形成 TASK。YAML frontmatter 使用 `schema_version: 1`、`session`、`task`、`kind`;kind 为 `implementation | review | research | test-observation`。已有 change/Ticket 可写入可选 `change`、`ticket`,不补造对象。重复键、未知版本和身份不一致均拒绝。正文使用五组内容:
|
|
21
28
|
|
|
22
|
-
|
|
|
29
|
+
| 章节 | 必需事实 |
|
|
23
30
|
|---|---|
|
|
24
|
-
|
|
|
25
|
-
|
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
|
|
|
31
|
+
| Goal | Lead、分配的执行者职责、目标与成功定义 |
|
|
32
|
+
| Inputs | 真实 Work/Skill 入口、必要规格和依赖产物、已锁定决定;前序背景先引用原报告 |
|
|
33
|
+
| Workspace and Scope | 真实执行位置与基线、允许/只读/共享路径及 owner、共享构建输出与测试资源、已获授权的动作和停止条件 |
|
|
34
|
+
| Acceptance | 检查命令、可观察通过标准、执行者未运行的 Gate 及其 owner;整体 E2E 仍由 Lead 核验 |
|
|
35
|
+
| Return | 准确 REPORT 位置、原生提问/通知方式、当前调用方式;可选定位文件的固定位置与唯一写入者 |
|
|
29
36
|
|
|
30
|
-
TASK
|
|
37
|
+
任务输入只含派遣前确定的事实。派遣后准确取得的日志绝对路径写入可选定位文件,不回改 TASK;工具句柄沿原生接口使用。投递消息包含准确 TASK 位置,不复制全部上下文。普通澄清通过原生通道回答,影响结果的答复写入 REPORT,改变目标、基线或权限则建立新任务。
|
|
31
38
|
|
|
32
|
-
|
|
39
|
+
派遣前确认执行者能读输入和必要材料、能交付报告;独立工作区须明确实际可读输入与可写报告位置。只有工具返回文本时,由 Lead 原样捕获为 REPORT,标注 `Captured-by: Lead` 和原始消息 locator,不补造执行者的验证结果。执行者与 Lead 不同时写报告。
|
|
33
40
|
|
|
34
|
-
|
|
41
|
+
执行者只写获准产物和自己的 REPORT,不修改 TASK、定位文件或正式 Evidence。只读任务只能写明确分配的报告及允许的测试产物。共享路径、Git index、构建输出及其他语义资源仍按原 owner/串行阶段协调,报告位置不同不代表业务写集互不冲突。
|
|
35
42
|
|
|
36
|
-
|
|
43
|
+
TASK 与 REPORT 完成候选内容后,使用同目录临时文件与不覆盖目标的原子落盘方式;写前检查未占用,写后回读。临时文件不是正式报告,也不能作为完成信号。
|
|
37
44
|
|
|
38
|
-
|
|
45
|
+
## 会话定位文件
|
|
39
46
|
|
|
40
|
-
|
|
47
|
+
派遣后,Lead 准确确认执行者会话日志的绝对路径,才在 TASK 同目录创建可选的 session-locator.json。文件仅有 `path` 一个字段,合同为 <Path>{roots.workflows}/specdev/common/schemas/session-locator.schema.json</Path>:
|
|
41
48
|
|
|
42
|
-
|
|
49
|
+
```json
|
|
50
|
+
{"path": "/absolute/path/to/session.jsonl"}
|
|
51
|
+
```
|
|
43
52
|
|
|
44
|
-
|
|
45
|
-
# 任务回报
|
|
53
|
+
不附加工具、主机、权限、会话 ID、任务范围或核验记录;所属任务由所在目录确定。执行者可通过原生通道提供地址,Lead 核对后落盘。取不到准确地址就不创建文件,不写空值或占位路径,也不阻塞可独立核验的交付。
|
|
46
54
|
|
|
47
|
-
|
|
48
|
-
Task: 本次派遣标识
|
|
49
|
-
Status: completed / blocked / failed / cancelled(仅保留实际值)
|
|
55
|
+
优先从工具实际返回的会话信息取得路径;必要时按已知真实会话 ID 定向查找,读取少量日志确认属于本次执行者与任务。原生子 Agent 不能误用父会话日志。不要猜缓存路径、按修改时间取最新日志,或从临时目录 UUID 推导会话。仅有原生历史入口、相对路径或无法确认的远端地址时省略此文件。
|
|
50
56
|
|
|
51
|
-
|
|
52
|
-
用三至五句话说明完成内容、关键决定、当前停点和下一安全动作。
|
|
57
|
+
写入前检查目标未占用,使用同目录临时文件原子落盘并回读;已有相同地址可复用,冲突时保留原文件并核对,不静默覆盖。地址晚于 REPORT 取得时可独立补建,不修改冻结 TASK 或 REPORT;归档后不回填。
|
|
53
58
|
|
|
54
|
-
|
|
55
|
-
- 修改或成果:真实文件、checkpoint/commit、dirty 状态或其他产物位置。
|
|
56
|
-
- 验证:命令、退出码、执行环境和实际观察;研究列来源,审查列 findings。
|
|
57
|
-
- 未完成或未验证:实际事项;没有则写“无”。
|
|
59
|
+
回查时先读 TASK、REPORT 与当前产物,有具体疑问才读取 path 指向的日志,结合任务输入和关键词少量检索。地址不可读或对应关系不明时,继续从实际产物核验,缺少关键事实仅阻塞对应验收。日志只是历史材料,不授予 resume、接管或额外动作权限。
|
|
58
60
|
|
|
59
|
-
|
|
60
|
-
阻塞/失败/取消的事实、已尝试内容、需要谁提供什么及恢复条件;无问题写“无”。
|
|
61
|
+
原始日志由工具管理,SpecDev 不复制、移动或转换 JSONL。外部绝对路径只作只读地址,不使用内部 Path 标签,不是可移植项目路径或写目标;引用不承诺日志永久可用。
|
|
61
62
|
|
|
62
|
-
##
|
|
63
|
-
|
|
64
|
-
-
|
|
65
|
-
- 原始记录:所属主机上的实际绝对路径,或工具原生历史入口。
|
|
66
|
-
- 核验:由谁、在哪台主机确认了会话对应关系和可读性;未核验项及原因。
|
|
67
|
-
- 本任务范围与检索线索:消息/时间范围、关键函数或错误信息等关键词。
|
|
68
|
-
```
|
|
63
|
+
## 报告与返回
|
|
64
|
+
|
|
65
|
+
交付时使用 <Path>{roots.references}/coordination/report-template.md</Path>。REPORT 保持普通 Markdown 首部 `Session`、`Task`、`Status`;状态只取一个实际值:
|
|
69
66
|
|
|
70
67
|
| Status | 表示什么 |
|
|
71
68
|
|---|---|
|
|
72
|
-
| completed |
|
|
73
|
-
| blocked |
|
|
74
|
-
| failed |
|
|
75
|
-
| cancelled |
|
|
76
|
-
|
|
77
|
-
进行中问题与进度使用工具原生通道,不反复刷新报告。`blocked` 是交回本次派遣;正常提问并等待答复仍在原任务中进行。同一报告的状态不流转,后续修复/重试建立新任务;旧执行者是否停止仍按真实工具核对。
|
|
69
|
+
| completed | 分配范围的候选已交回,仍待 Lead 验收 |
|
|
70
|
+
| blocked | 缺输入、权限、依赖或决定,说明恢复条件 |
|
|
71
|
+
| failed | 本次尝试失败,保留产物和失败事实 |
|
|
72
|
+
| cancelled | 按实际指示取消,记录影响和停止情况 |
|
|
78
73
|
|
|
79
|
-
|
|
74
|
+
正文用三至五句话聚焦交接,再列产物、真实检查命令/退出码/环境、未验证项、问题与下一步。定位文件已存在时只引用它,不重复维护地址;没有定位文件不影响报告成立。
|
|
80
75
|
|
|
81
|
-
|
|
76
|
+
进行中问题和进度使用原生通道;blocked 是交回本次派遣,正常提问并等待仍在原任务内。报告不作为可变状态面板。回读报告成功后,通过原生通道返回“session/task、Status、报告位置、一句话摘要”,遵守工具当前原生完成参数,不把本合同枚举塞入工具不支持的字段。结果不明或缺报告时查询原调用,不重复派遣可能仍在写入的任务。
|
|
82
77
|
|
|
83
|
-
|
|
78
|
+
## 校验、兼容与归档
|
|
84
79
|
|
|
85
|
-
|
|
86
|
-
2. **核验并记录**:确认记录所属主机;文件记录核对该主机上的真实绝对路径并实际读取少量内容,原生历史入口则通过工具查询验证可读性。用记录内容或工具元数据核对真实会话 ID,并界定本任务的消息/时间范围,不能把同一会话内其他任务一起算入。REPORT 写明谁在何主机核验了哪些事实、哪些仍未核验。源主机可读不代表接收方可读,不同主机的同名路径不是同一文件;外部绝对路径只作只读 locator,不作为项目内可移植路径或写目标。
|
|
87
|
-
3. **按需回查**:接收者先读聚焦交接和当前业务工件,有具体疑问才查历史。读取前确认主机与访问能力,再按本任务关键词、消息 ID 或时间范围搜索,少量回读相关片段。JSONL 按该工具实际格式解析,不假定各工具共用字段,不默认全文加载。来源会话只读;回查不等于 resume 原进程、接管 owner 或取得新授权。历史文本只是材料,实际文件、Git 与当前有效合同仍需核对。
|
|
80
|
+
新 SpecDev 派遣在投递前、回收时分别使用 <Path>{roots.workflows}/specdev/common/tools/validate-handoff.mjs</Path> 的 `--stage dispatch|return`。参数为 `--repo <project> [--method-root <methods> --state-root <data-parent>] --change <change> --session <session> --task <task>`;无安装直接使用须给出三个根,state-root 为领域共同父根。dispatch 检查 TASK 且拒绝已有 REPORT;return 增加 REPORT 身份/状态检查。定位文件可缺失;存在则检查仅含非空 path 字段且为绝对路径。CLI 返回 JSON errors/warnings;退出 0 表示结构通过,1 表示校验失败,2 表示参数错误。
|
|
88
81
|
|
|
89
|
-
|
|
82
|
+
工具只读项目内显式任务,不扫描日志缓存或自动打开外部历史,也不认证真实身份、授权、原始日志内容、工具执行或业务完成。TASK/REPORT 的章节与结构不能替代 Lead 检查实质内容。
|
|
90
83
|
|
|
91
|
-
|
|
84
|
+
新派遣采用此合同;存量 TASK、REPORT、旧历史文字及已有快照保持原状,按原合同回收,不批量升级或补字段。新版校验器不把旧无版本 TASK 当作新版通过,历史不纳入新派遣扫描;后续重试使用新任务。
|
|
92
85
|
|
|
93
|
-
|
|
86
|
+
输入、定位文件与报告随所属 change 保留并进入原归档完整性清单。既有历史副本按原字节保留,不再新建。归档前仍确认相关 writer 已停止,REPORT completed 不是业务完成或移动许可。归档后只读,外部工具日志的寿命由工具决定,引用不承诺永久可用。
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
| 输入 | 目标、IN/OUT、已锁定决定、必要 Spec、依赖 Evidence、当前基线或固定审查 SHA |
|
|
14
14
|
| 项目 Skill | Ticket implementation 提供 Map → 适用 `ALL`/本票的项目 Skill → Ticket,矩阵是最低必读集合;Direct Spec 提供唯一获批规格、项目 Agent 指令、命中的项目 Skill、AC/验证与路径合同,不制造 Ticket/Map;review 提供固定候选及对应轴的来源 |
|
|
15
15
|
| 工作区 | 有效计划或当前 Work 选择的 选定 change 工作区、真实项目根与执行路径/branch、parent/base、允许和共享写路径及 owner;不要用执行者 cwd 猜测方法或数据根 |
|
|
16
|
-
| 调用 | 当前宿主正常执行,或用户明确选择的 CLI 交互/调用、Herdr、Orca
|
|
16
|
+
| 调用 | 当前宿主正常执行,或用户明确选择的 CLI 交互/调用、Herdr、Orca;派遣前确定的工具/模型选择与原生通信方式,不记录秘密;派遣后准确确认的会话日志绝对路径由 Lead 写入可选 session-locator.json,仅含 path 字段 |
|
|
17
17
|
| 边界 | 本次真实允许的动作、实现 commit 权限、检查、E2E owner、停止条件、可观察验收标准、准确报告位置与原生提问/通知通道 |
|
|
18
18
|
| 父 Goal | 存在父 Implementation Map/Plan 时附实际 revision、组合 task ID、依赖 Gate、并行上限和集成次序 |
|
|
19
19
|
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
|
|
26
26
|
> 先读绑定的真实 Work SKILL.md,按 task 上下文只处理指定目标、阶段和工作区。遵守同一 Work 的方法、TDD、检查与质量门;不要成为 Lead,不递归启动 Goal,不修改正式 Ticket、Map、Goal Plan、Evidence、业务状态或授权。宿主原生协作仍受本次写集、共享资源 owner 和权限约束;不擅自跨 CLI 再派单或扩大任务。缺输入、发生冲突或需要额外权利时向 Lead 返回问题与证据。
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
采用文件交接时,TASK 使用派遣文件合同的 YAML 头与静态正文,投递后冻结。准确确认的会话日志绝对路径由 Lead 保存到同目录 session-locator.json 的 path 字段;执行者通过原生通道提供事实,无法准确取得地址时省略,不为缺日志阻塞独立可验证的交付。
|
|
29
29
|
|
|
30
|
-
Lead 自行执行使用同一 Work 的 lead 上下文;不伪造外部任务或独立审查记录。任务执行者返回材料;采用 TASK/REPORT 交接时只写获准产物与自己的 REPORT,不写 TASK
|
|
30
|
+
Lead 自行执行使用同一 Work 的 lead 上下文;不伪造外部任务或独立审查记录。任务执行者返回材料;采用 TASK/REPORT 交接时只写获准产物与自己的 REPORT,不写 TASK、定位文件或正式 Evidence,其他方式按原返回合同交付。正式业务工件由 Lead 维护。前序背景优先引用已有报告的聚焦交接,细节不足再沿对应定位文件的 path,结合 TASK 内容检索;旧报告按原合同回查。
|
|
31
31
|
|
|
32
32
|
## 任务类型与返回
|
|
33
33
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 1
|
|
3
|
+
session: "<UTC-round-id>"
|
|
4
|
+
task: "<sequence-topic>"
|
|
5
|
+
kind: implementation
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 任务简报
|
|
9
|
+
|
|
10
|
+
## Goal
|
|
11
|
+
填写 Lead、分配的执行者职责、目标及成功定义。kind 替换为 implementation/review/research/test-observation 的实际值;已有 change/Ticket 可在头部增加 change/ticket,不制造对象。
|
|
12
|
+
|
|
13
|
+
## Inputs
|
|
14
|
+
引用真实 Work SKILL.md、必要规格/项目 Skill、已锁定决定与依赖报告。先读真实入口,按当前阶段执行,不递归启动 Goal、不扩大派遣范围。
|
|
15
|
+
|
|
16
|
+
## Workspace and Scope
|
|
17
|
+
填写实际工作区及基线、允许/只读/共享路径、共享构建输出/端口/测试资源 owner、已授权动作和停止条件。执行者只写分配产物与自己的 REPORT,不写 TASK、定位文件或正式业务状态/Evidence;需要额外权限时返回问题与依据。
|
|
18
|
+
|
|
19
|
+
## Acceptance
|
|
20
|
+
填写真实检查命令、可观察通过标准、未在执行者环境执行的 Gate 及其 owner。整体 E2E 与最终验收由 Lead 核验,候选自报不替代验收。
|
|
21
|
+
|
|
22
|
+
## Return
|
|
23
|
+
填写准确 REPORT 位置及原生提问/通知通道。交付后回读,再按工具原生协议返回任务身份、实际状态、报告位置和一句话摘要。
|
|
24
|
+
|
|
25
|
+
派遣后准确确认的日志绝对路径由 Lead 写入同目录 session-locator.json 的唯一字段 path。执行者可通过原生通道提供地址;无法准确取得日志地址时省略,不猜路径,不为此阻塞独立可验证的交付。TASK 投递后冻结。
|
|
@@ -73,7 +73,7 @@ SpecDev 不假定运行时一定提供项目根变量。Ticket、Evidence、诊
|
|
|
73
73
|
|
|
74
74
|
外部 URL 不能伪装成 SpecDev 内部路径;内部文件也不能用 URL 代替完整 Path 标签。
|
|
75
75
|
|
|
76
|
-
历史会话的只读外部 locator
|
|
76
|
+
历史会话的只读外部 locator 是限定例外:可记录准确确认的原始会话日志绝对路径,按 <Path>{roots.references}/coordination/session-files.md</Path> 检索。它不使用内部 Path 标签,不是可移植项目路径、静态能力依赖或写入授权;新派遣在任务目录的 session-locator.json 中仅记录 path 字段,不复制原日志;既有项目内历史副本保留正常工件路径。
|
|
77
77
|
|
|
78
78
|
## 5. 工件名称与工件引用
|
|
79
79
|
|
|
@@ -14,7 +14,7 @@ change 的稳定身份是同一项目、领域内的 `YYYY-MM-DD-topic[-NN]` 目
|
|
|
14
14
|
|
|
15
15
|
归档实际位置和原回执表示封存;不在 README 增加 archived、archive_path 或全局 active/archived 列表。新 archive 不嵌套月份。旧历史移动须另有明确计划,验证所有 locator 和 DESIGN 摘要;不可变正文不做路径替换。
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
实际外部派遣的冻结输入、正式报告与可选会话定位文件按 <Path>{roots.references}/coordination/session-files.md</Path> 保存在 <Path>{roots.state}/specdev/changes/{change}/sessions/</Path>,随 change 整体归档并进入原完整性清单;既有历史副本保持原字节,不再创建新的日志副本;归档前仍核对 writer 已停止,不因 REPORT 显示 completed 就移动活动工作区。session 只是交接材料分组,不成为整体 Outcome 或执行状态的第二权威。引用按稳定 change 与对象内 locator 解析,历史原件不回填或清理。
|
|
18
18
|
|
|
19
19
|
## 独立开发复盘
|
|
20
20
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "urn:speculo:specdev:session-locator",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": [
|
|
6
|
+
"path"
|
|
7
|
+
],
|
|
8
|
+
"properties": {
|
|
9
|
+
"path": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"minLength": 1
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"additionalProperties": false
|
|
15
|
+
}
|
|
@@ -31,7 +31,7 @@ Verification: evidence/T-01.md#review-receipt
|
|
|
31
31
|
|
|
32
32
|
Mode 为 native/herdr/orca/cli。Implementers 包含本范围全部实现及修复者;Lead 参与实现也列入。每轴 Report 指向 reviewer 实际输出的独立段,含 `Reviewer`、`Axis`、`Result`、`Input-SHA256`、`Observed` 字段及具体 findings/依据。不能指回汇总表自证。请求修正或未验证不得改写为 pass;原报告不覆盖。
|
|
33
33
|
|
|
34
|
-
Verification 指向 Lead 回读真实派遣和返回事实后的独立核验段,含 `Verified-By`、`Mode`、`Reviewers`(逗号分隔真实身份)、`Input-SHA256`、`Result: verified`、`Observed`。Observed
|
|
34
|
+
Verification 指向 Lead 回读真实派遣和返回事实后的独立核验段,含 `Verified-By`、`Mode`、`Reviewers`(逗号分隔真实身份)、`Input-SHA256`、`Result: verified`、`Observed`。Observed 说明工具返回的实际身份、派遣/返回定位、只读范围和核验事实;工具不提供的事实保持未验证。需要深查时沿对应任务 session-locator.json 的 path,结合 TASK 内容检索(旧任务沿原历史 locator),不以 JSONL 文件存在代替审查。
|
|
35
35
|
|
|
36
36
|
## 完成与复用
|
|
37
37
|
|
|
@@ -87,3 +87,9 @@ Goal schema v8、父 Implementation Plan v3 使用 ticket_execution: auto|serial
|
|
|
87
87
|
## 独立开发复盘
|
|
88
88
|
|
|
89
89
|
<Path>{roots.workflows}/specdev/common/tools/validate-retro.mjs</Path> 只读枚举/校验独立 RETRO、升级方案、批准、实际执行与归档完整性;使用 `--help` 查看 report/upgrade 和各 stage。数据根使用 WorkContext 的领域共同父根。协议见 <Path>{roots.workflows}/specdev/specdev-r-retro/references/records.md</Path>;工具不写 Skill、不执行验证命令、不认证授权或宿主行为。
|
|
90
|
+
|
|
91
|
+
## 派遣交接与可选会话定位
|
|
92
|
+
|
|
93
|
+
<Path>{roots.workflows}/specdev/common/tools/validate-handoff.mjs</Path> 在新派遣投递前/回收时只读校验 TASK YAML、REPORT、目录身份与可选 session-locator.json,协议见 <Path>{roots.references}/coordination/session-files.md</Path>。参数:`--repo <project> [--method-root <methods> --state-root <data-parent>] --change <id> --session <round> --task <id> --stage dispatch|return`,无安装时必须给出三个根。
|
|
94
|
+
|
|
95
|
+
没有准确日志地址就不创建定位文件,缺失时正常通过;已有文件仅含非空绝对路径 path,须符合 <Path>{roots.workflows}/specdev/common/schemas/session-locator.schema.json</Path>。不扫描工具缓存、不读取外部历史,不认证 provider 身份、授权或完成。结构错误退出 1,参数错误退出 2。存量交接按原合同回收,归档用原完整性清单,不强制补新版字段。
|
|
@@ -28,7 +28,7 @@ function check(value, rule, at, errors) {
|
|
|
28
28
|
} else if (value && typeof value === "object") {
|
|
29
29
|
for (const k of rule.required ?? []) if (!(k in value)) errors.push(at + ": missing " + k);
|
|
30
30
|
for (const [k,v] of Object.entries(value)) {
|
|
31
|
-
if (rule.properties
|
|
31
|
+
if (Object.hasOwn(rule.properties ?? {},k)) check(v,rule.properties[k],at+"."+k,errors);
|
|
32
32
|
else if (rule.additionalProperties === false) errors.push(at + ": unknown " + k);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/** Read-only handoff checks. Never discovers, opens or authenticates external transcripts. */
|
|
3
|
+
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
4
|
+
import { posix, resolve } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import {
|
|
7
|
+
markdownBodyLines, parseFrontmatter, readChangeFactsSync, readUtf8ArtifactSync,
|
|
8
|
+
resolveWorkContextSync, safeWorkPathSync,
|
|
9
|
+
} from '../../../../lib/speculo-runtime.mjs';
|
|
10
|
+
import { checkSchema } from './delivery-artifacts.mjs';
|
|
11
|
+
|
|
12
|
+
const schema = JSON.parse(readFileSync(new URL('../schemas/session-locator.schema.json', import.meta.url), 'utf8'));
|
|
13
|
+
const requireThat = (condition, message) => { if (!condition) throw new Error(message); };
|
|
14
|
+
const real = value => typeof value === 'string' && value.trim() === value && value.length > 0 && !/^(?:unknown|unassigned|pending|todo|tbd|\.\.\.)$/i.test(value) && !/[<>\x00-\x1f]|\{[^}]*\}/.test(value);
|
|
15
|
+
const readFile = (root, path) => readUtf8ArtifactSync(safeWorkPathSync(root, path, {mustExist:true, type:'file'}));
|
|
16
|
+
const readJson = path => JSON.parse(readUtf8ArtifactSync(path));
|
|
17
|
+
|
|
18
|
+
function utc(value) {
|
|
19
|
+
if (typeof value !== 'string' || !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,3})?Z$/.test(value)) return false;
|
|
20
|
+
const time = Date.parse(value);
|
|
21
|
+
return Number.isFinite(time) && new Date(time).toISOString() === value.replace(/(?:\.(\d{1,3}))?Z$/, (_, fraction = '') => `.${fraction.padEnd(3, '0')}Z`);
|
|
22
|
+
}
|
|
23
|
+
function identity(session, task) {
|
|
24
|
+
const match = /^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})Z(?:-(\d{2,}))?$/.exec(session ?? '');
|
|
25
|
+
requireThat(match && utc(`${match[1]}-${match[2]}-${match[3]}T${match[4]}:${match[5]}:${match[6]}Z`) && (!match[7] || Number(match[7]) > 0 && String(Number(match[7])).padStart(2,'0') === match[7]), 'invalid orchestration session');
|
|
26
|
+
const number = /^(\d{3,})-[a-z0-9]+(?:-[a-z0-9]+)*$/.exec(task ?? '')?.[1];
|
|
27
|
+
requireThat(number && Number.isSafeInteger(Number(number)) && Number(number) > 0 && String(Number(number)).padStart(3,'0') === number, 'invalid task sequence/topic');
|
|
28
|
+
}
|
|
29
|
+
function headings(text, names) {
|
|
30
|
+
const lines = markdownBodyLines(text);
|
|
31
|
+
for (const name of names) {
|
|
32
|
+
const matches = lines.filter(line => line.text === `## ${name}`);
|
|
33
|
+
requireThat(matches.length === 1, `expected one ${name} section`);
|
|
34
|
+
const end = lines.find(line => line.line > matches[0].line && /^#{1,2} /.test(line.text))?.line ?? Infinity;
|
|
35
|
+
requireThat(lines.some(line => line.line > matches[0].line && line.line < end && line.text.trim() && !/^#+\s/.test(line.text)), `empty ${name} section`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Only a log path is stored; correspondence to this task is checked before writing. */
|
|
40
|
+
export function validateSessionLocator(value) {
|
|
41
|
+
const errors = [];
|
|
42
|
+
checkSchema(value, schema, 'session-locator', errors);
|
|
43
|
+
if (errors.length) return errors;
|
|
44
|
+
const path = value.path;
|
|
45
|
+
if (!real(path) || /(?:^|[\\/])(?:\.\.\.|unknown|todo|tbd)(?:[\\/]|$)/i.test(path)) errors.push('path: placeholder or empty locator');
|
|
46
|
+
// Accept source paths on either platform; do not access the external file here.
|
|
47
|
+
if (!(posix.isAbsolute(path) || /^[A-Za-z]:[\\/]/.test(path) || /^\\\\[^\\/]+[\\/][^\\/]+[\\/]/.test(path))) errors.push('path must be an absolute file path');
|
|
48
|
+
return errors;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function validateHandoff(input) {
|
|
52
|
+
const errors = [], warnings = [];
|
|
53
|
+
try {
|
|
54
|
+
requireThat(['dispatch','return'].includes(input.stage), 'expected dispatch or return stage');
|
|
55
|
+
identity(input.session,input.task);
|
|
56
|
+
const context = resolveWorkContextSync(input);
|
|
57
|
+
const facts = readChangeFactsSync(context,input.change);
|
|
58
|
+
requireThat(facts.location.kind === 'active', 'archived handoffs are frozen; use the original archive integrity checks');
|
|
59
|
+
if (input.stage === 'dispatch') requireThat(facts.outcome === 'active', 'dispatch requires an active change');
|
|
60
|
+
const round = safeWorkPathSync(facts.location.root,`sessions/${input.session}`,{mustExist:true,type:'directory'});
|
|
61
|
+
const prefix = input.task.split('-')[0];
|
|
62
|
+
requireThat(readdirSync(round).filter(name => name.split('-')[0] === prefix).length === 1, 'task sequence is missing or occupied more than once');
|
|
63
|
+
const root = safeWorkPathSync(round,input.task,{mustExist:true,type:'directory'});
|
|
64
|
+
const {fields:meta,body} = parseFrontmatter(readFile(root,'TASK.md'));
|
|
65
|
+
requireThat(meta.schema_version === 1, 'TASK requires schema_version 1; retain legacy handoffs under their original contract');
|
|
66
|
+
requireThat(Object.keys(meta).every(key => ['schema_version','session','task','kind','change','ticket'].includes(key)), 'TASK: unknown metadata field');
|
|
67
|
+
requireThat(meta.session === input.session && meta.task === input.task, 'TASK identity mismatch');
|
|
68
|
+
requireThat(['implementation','review','research','test-observation'].includes(meta.kind), 'TASK: invalid kind');
|
|
69
|
+
if (meta.change !== undefined) requireThat(meta.change === input.change, 'TASK change mismatch');
|
|
70
|
+
if (meta.ticket !== undefined) requireThat(real(meta.ticket), 'TASK: invalid ticket');
|
|
71
|
+
headings(body,['Goal','Inputs','Workspace and Scope','Acceptance','Return']);
|
|
72
|
+
const report = safeWorkPathSync(root,'REPORT.md',{type:'file'});
|
|
73
|
+
if (input.stage === 'dispatch') requireThat(!existsSync(report), 'already delivered; create a new task instead of redispatch');
|
|
74
|
+
else {
|
|
75
|
+
const text = readFile(root,'REPORT.md'), lines = markdownBodyLines(text);
|
|
76
|
+
const headerEnd = lines.find(line => /^## /.test(line.text))?.line ?? Infinity;
|
|
77
|
+
const fields = {};
|
|
78
|
+
for (const line of lines.filter(line => line.line < headerEnd)) {
|
|
79
|
+
const match = /^(Session|Task|Status):\s*(.*?)\s*$/.exec(line.text);
|
|
80
|
+
if (!match) continue;
|
|
81
|
+
requireThat(!Object.hasOwn(fields,match[1]), `REPORT: duplicate ${match[1]}`); fields[match[1]]=match[2];
|
|
82
|
+
}
|
|
83
|
+
requireThat(fields.Session === input.session && fields.Task === input.task, 'REPORT identity mismatch');
|
|
84
|
+
requireThat(['completed','blocked','failed','cancelled'].includes(fields.Status), 'REPORT: invalid terminal status');
|
|
85
|
+
headings(text,['聚焦交接','产物与验证','问题与下一步']);
|
|
86
|
+
}
|
|
87
|
+
const path = safeWorkPathSync(root,'session-locator.json',{type:'file'});
|
|
88
|
+
if (existsSync(path)) errors.push(...validateSessionLocator(readJson(path)));
|
|
89
|
+
} catch (error) { errors.push(String(error.message ?? error)); }
|
|
90
|
+
return {errors,warnings,caveat:'Read-only structure checks do not authenticate tool identity, transcript content, authorization or completion; external histories are never opened.'};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function handoffCLI(argv) {
|
|
94
|
+
const names = {'--repo':'projectRoot','--method-root':'methodRoot','--state-root':'stateRoot','--change':'change','--session':'session','--task':'task','--stage':'stage'}, input = {};
|
|
95
|
+
if (argv.length === 1 && argv[0] === '--help') {
|
|
96
|
+
console.log('Usage: node validate-handoff.mjs --repo <project> [--method-root <methods> --state-root <data-parent>] --change <id> --session <round> --task <id> --stage dispatch|return\nDirect use requires all three roots. Read-only; no log discovery or external transcript access.'); return 0;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
for (let i=0;i<argv.length;i++) {
|
|
100
|
+
const key = Object.hasOwn(names,argv[i]) ? names[argv[i]] : undefined, value = argv[++i];
|
|
101
|
+
requireThat(key && !Object.hasOwn(input,key) && value && !value.startsWith('--'), 'unknown, duplicate or incomplete option'); input[key] = value;
|
|
102
|
+
}
|
|
103
|
+
requireThat(['projectRoot','change','session','task','stage'].every(key => input[key]), 'missing required arguments');
|
|
104
|
+
requireThat(['dispatch','return'].includes(input.stage), 'invalid stage');
|
|
105
|
+
} catch (error) { console.error(String(error.message ?? error)); return 2; }
|
|
106
|
+
const result = validateHandoff(input); console.log(JSON.stringify(result,null,2)); return result.errors.length ? 1 : 0;
|
|
107
|
+
}
|
|
108
|
+
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) process.exitCode = handoffCLI(process.argv.slice(2));
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
- **执行选择与来源:** ticket_execution=auto/serial/parallel;单 Agent/subagent/team/指定工具的要求来源;README 工作区引用;验证尝试上限缺省 3
|
|
21
21
|
- **Implementation owners:** 实际实现及修复者身份;同票多人时列明各自写集
|
|
22
22
|
- **Dispatch Packet/checkpoint:** Lead direct / `<locator + immutable checkpoint>`
|
|
23
|
-
- **文件交接(实际外部派遣时):** `<Path>{roots.state}/specdev/changes/{change}/sessions/{session}/{task}/TASK.md</Path>` 与 `<Path>{roots.state}/specdev/changes/{change}/sessions/{session}/{task}/REPORT.md</Path>`;绑定稳定 change 身份与 change 根相对 locator,修正交付引用新任务及旧报告;Lead direct 不创建空目录
|
|
23
|
+
- **文件交接(实际外部派遣时):** `<Path>{roots.state}/specdev/changes/{change}/sessions/{session}/{task}/TASK.md</Path>` 与 `<Path>{roots.state}/specdev/changes/{change}/sessions/{session}/{task}/REPORT.md</Path>`,以及实际存在的 `<Path>{roots.state}/specdev/changes/{change}/sessions/{session}/{task}/session-locator.json</Path>`;绑定稳定 change 身份与 change 根相对 locator,修正交付引用新任务及旧报告;Lead direct 不创建空目录
|
|
24
24
|
- **允许动作:** 授权路径写入、检查;commit/merge 仅明确授权时
|
|
25
25
|
- **返回:** checkpoint/快照、dirty 状态、实际实现者、修改路径、命令/退出码、未验证项与恢复条件
|
|
26
26
|
- **Lead 独立核对:** pass / fail;实际读取与命令摘要
|
|
27
27
|
- **只读 Agent findings:** 无 / 固定输入、来源、结论、Lead 核对
|
|
28
28
|
|
|
29
|
-
任务执行者 不写本 Evidence;以上内容由 Lead 从实际 workspace、Git 和返回事实整理。有文件交接时依 <Path>{roots.references}/coordination/session-files.md</Path>
|
|
29
|
+
任务执行者 不写本 Evidence;以上内容由 Lead 从实际 workspace、Git 和返回事实整理。有文件交接时依 <Path>{roots.references}/coordination/session-files.md</Path> 只保存交接文件指针和 Lead 独立核验,不复制正文;REPORT 的 completed 不是本 Evidence 的 done。先读报告聚焦交接,细节不足再沿对应定位文件的 path,结合 TASK 内容检索;地址不重复写入 Evidence。突然中断无报告时记录未知事实与原工具查询结果,不补造成功回报。
|
|
30
30
|
|
|
31
31
|
## 3. 修改范围与路径所有权
|
|
32
32
|
|
package/template/workflows/specdev/specdev-i-implement/references/implementation-procedure.md
CHANGED
|
@@ -67,7 +67,7 @@ Git 已处于 merge/rebase 冲突时,先加载 `<Path>{roots.workflows}/specde
|
|
|
67
67
|
|
|
68
68
|
按 <Path>{roots.workflows}/specdev/common/rules/execution-policy.md</Path>,用户/项目/当前 Work 要求优先,Lead 根据任务事实和宿主能力安排单 Agent、subagent 或团队。同票协作不改变 serial 票据顺序;跨票并行仍须 DAG 与写集/资源无冲突。只读探索不占票据执行槽。
|
|
69
69
|
|
|
70
|
-
派单读取 <Path>{roots.references}/coordination/task-brief.md</Path>;外部 CLI/Herdr/Orca 按 <Path>{roots.references}/coordination/session-files.md</Path>
|
|
70
|
+
派单读取 <Path>{roots.references}/coordination/task-brief.md</Path>;外部 CLI/Herdr/Orca 按 <Path>{roots.references}/coordination/session-files.md</Path> 保存冻结 TASK/正式 REPORT 和派遣后可选 session-locator.json;新派遣在投递前与回收时分别运行交接校验的 dispatch/return 阶段,原 Evidence 只导航与验收。Packet 绑定同一 change workspace、票据/规格、实际写集、固定输入、验证与停止条件。多个实现者明确细分写集;Git index 操作由 Lead 协调串行,不暂存他人改动。
|
|
71
71
|
|
|
72
72
|
**完成标准**:实现者与路径归属可回读,正式状态仍只由 Lead 写入,派遣不创建额外 worktree。
|
|
73
73
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: specdev-i-init-setup
|
|
3
|
-
description: "
|
|
3
|
+
description: "发现项目事实,选择或复用可选协作方式并复用用户指定目录中的对应 Skill;仅在明确请求时建立当前工程 docs 基线。"
|
|
4
4
|
metadata:
|
|
5
5
|
speculo-kind: work-skill
|
|
6
6
|
speculo-id: specdev/init-setup
|
|
@@ -16,9 +16,10 @@ metadata:
|
|
|
16
16
|
|
|
17
17
|
1. 只读探测包管理、workspace、构建/测试/类型/lint/CI、默认父分支、实际 worktree 与项目指令;定位真实入口和共享高冲突资源。未知验证命令保持未知,不凭框架名称编造。
|
|
18
18
|
2. 区分可用、未安装、未配置、未授权、不适用并注明依据。复用用户语言、工具、产物数量及已有配置;只问无法从仓库得到且实际影响当前任务的偏好。探测不自动安装依赖、发布或创建虚假 change。
|
|
19
|
-
3.
|
|
20
|
-
4.
|
|
21
|
-
5.
|
|
19
|
+
3. 检查已有项目编排选择;未配置时提供 **Herdr / Orca / CLI / 暂时都不要** 四选一,已有有效选择则展示并复用,用户要求更改时才重选。Herdr/Orca 再由用户选择项目 `.agents/skills/` 或 `.claude/skills/` 入口目录;已明确的同范围选择直接复用。按 <Path>{roots.workflows}/specdev/specdev-i-init-setup/references/first-setup.md</Path> 保存项目级偏好并检查本地入口;缺失时引导通过 Speculo 安装器的 SKILLS-HUB 选择安装,当前按允许的 fallback 继续。只读、plan 或选择未完成时不写配置、不安装;普通 Work 不触发此问答。
|
|
20
|
+
4. 实际需要其他工具配置时继续使用上述参考。已有真实 GitHub/验证配置继续使用其 schema,不删除未知独有字段。无需求不创建 config、tracking、domain-layout、空知识目录、全局 status 或 change status。
|
|
21
|
+
5. 仅明确要求工程文档基线/全面理解代码时,直接使用 <Path>{roots.references}/writing-for-agents/references/current-facts-docs.md</Path> 的六步与覆盖表。最小 docs README/architecture 或已有负责正文导航,说明 HEAD/未提交或非 Git 范围、覆盖/未知/排除与实际验证;不改永久知识、不推进 docs-sync 基线。
|
|
22
|
+
6. 回读本次实际写入,报告已确认事实、必要偏好来源、验证命令/退出码和未知。只读调用无文件;有 change 的结果写回原 README/Evidence,不登记 Work 调用镜像。
|
|
22
23
|
|
|
23
24
|
## 停止与保全
|
|
24
25
|
|
|
@@ -26,6 +27,6 @@ metadata:
|
|
|
26
27
|
|
|
27
28
|
只有确实创建 worktree 时核对 `specdev-worktree/` 的忽略项与 owner:已安装的 CLI-managed 忽略项交 CLI 修复;直接模式按项目 owner 的真实授权维护,不能因没有 CLI 阻塞其他初始化事实发现。
|
|
28
29
|
|
|
29
|
-
##
|
|
30
|
+
## 完成标准
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
项目事实与未知有依据;本次选择已保存并回读或已有选择已复用,未完成的选择/写入据实报告。分别报告 Skill 已复用或未安装,以及工具可用、不可用或未检查。协作编排是可选能力:初始化生成的外部方式偏好允许不可用时回到当前智能体(mode: lead),Skill 缺失不阻塞独立的基础初始化,不得报告安装成功。实际运行与回退遵守 <Path>{roots.references}/coordination/coordination-contract.md</Path>,配置本身不授予提交、发布等其他动作权限。
|
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
# 必要偏好与真实工具配置
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
初始化处理项目协作选择,或当前任务确需其他持久化偏好/工具设置时读取;不是缺少文件即补全骨架。
|
|
4
|
+
|
|
5
|
+
## 项目协作选择
|
|
6
|
+
|
|
7
|
+
先读 <Path>{roots.references}/coordination/coordination-contract.md</Path> 与 <Path>{roots.references}/coordination/project-facts.schema.json</Path>。本 Work 拥有此次 <Path>{roots.state}/coordination/project.json</Path> 偏好写入;已存在时先验证,未知 schema、冲突或无效内容保留原件,只停止相关配置写入。只读和 plan 仅展示选择及预期差异,不执行下列写入。
|
|
8
|
+
|
|
9
|
+
1. 已有有效配置时展示 defaults 与适用的 Work/阶段覆盖,直接复用;不因服务当前不可用重问或改写偏好。未配置时说明“这是项目默认偏好,外部方式不可用时由当前智能体继续”,让用户在 Herdr、Orca、CLI、暂时都不要中选择。当前会话已有同范围明确选择时复用;取消或尚未回答不视为 lead,不产生文件。
|
|
10
|
+
2. 选择 Herdr/Orca 后明确项目根,让用户选择 `.agents/skills/` 或 `.claude/skills/`,并说明将读取该位置已安装的完整 Skill,缺失时通过 Speculo 安装器安装。同范围已明确的目录直接复用;不按宿主名称替用户决定。入口位置为所选目录下的 `herdr/` 或 `orca/`,将完整项目相对入口写入 defaults.guide。选择 CLI 协作方式不需要这两个 Skill;具体工具、模型、交互方式只复用真实已知选择,缺失时在实际使用前确定。
|
|
11
|
+
3. 外部方式保存为 `mode: herdr | orca | cli`、`selection: preferred`、`fallback: [lead]`;“暂时都不要”保存为 `mode: lead`,以后不重复询问。首次创建使用 schema_version 1 和空 rules;用户主动更改只替换 defaults,保留所有 rules 及有效的其他配置。旧 defaults 中属于前一工具的 tool/model/guide 不带到新方式;同方式已知的有效工具信息保留。本次选择不是强制外部工具要求,不擅自把既有 required 或 Work/阶段安排改成可回退。
|
|
12
|
+
4. 配置候选经 schema 验证后,写前重读确认原内容未漂移,检查根、owner 与重叠事务/锁,再在同目录临时文件中形成完整候选并原子替换,最后回读验证。首次创建若目标已出现、任何路径含符号链接或发生漂移则停止相关写入,保留已有内容。配置失败不继续依赖该配置的接入;独立事实发现继续。
|
|
13
|
+
5. 配置成功后,按本次方式读取 <Path>{roots.references}/coordination/modes/herdr.md</Path> 或 <Path>{roots.references}/coordination/modes/orca.md</Path> 的本地入口分支。已有完整 Skill 则读取复用;缺失时保留偏好与目标,引导用户重新运行 `speculo init`,在 SKILLS-HUB 勾选对应 `automation/herdr` 或 `automation/orca` 并选择位置。Work 不下载、不另行复制技能包、不写 CLI 归属清单。当前任务按 fallback 继续;初始化不要求服务已启动,不进入派遣或服务控制。
|
|
14
|
+
|
|
15
|
+
例如用户选择 Herdr 并指定 `.claude/skills/`,首次写入:
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"schema_version": 1,
|
|
20
|
+
"defaults": {
|
|
21
|
+
"mode": "herdr",
|
|
22
|
+
"selection": "preferred",
|
|
23
|
+
"guide": ".claude/skills/herdr/SKILL.md",
|
|
24
|
+
"fallback": ["lead"]
|
|
25
|
+
},
|
|
26
|
+
"rules": []
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
guide 是用户选择的读取/安装位置,不是“已安装”凭证,也不是机器绝对路径。只更改 defaults 不移动或删除旧 Skill;CLI 安装的包由 <Path>{roots.state}/hub-skills.json</Path> 跟踪;用户手工安装的同名包保持用户归属。最终分别回报配置保存/复用、Skill 结果、运行能力未检查或实际检查结果;缺失或冲突时给出原目标与安装器操作步骤,不制造 change 或独立回执。
|
|
31
|
+
|
|
32
|
+
## 其他必要偏好
|
|
4
33
|
|
|
5
34
|
语言、用户工具和明确产物数量复用当次请求或现有项目说明。实现并发、worktree、集成尝试上限只在原 Goal/Implementation Plan 真正启用时明确,由计划 `## Execution Policy Source` 记录实际来源;默认 current 单写入者。Lead 自己实现计入实现并发,只读协作者不设新数字上限。UI 缺省 3、配置 2–4、用户明确数量覆盖上限;一次 override 留当前设计包,不改全局偏好。
|
|
6
35
|
|
|
@@ -14,7 +14,7 @@ serial 完成一票的实现、审查和验证后再开始下一票,同票内
|
|
|
14
14
|
|
|
15
15
|
所有本 change 执行者使用 README 的同一工作区;细分授权写集,shared path 有唯一 owner。Git index、commit/checkout/merge 串行协调;没有具体授权不操作。正式 Ticket/Map/Goal/Evidence/Outcome 只由 Lead 写入。
|
|
16
16
|
|
|
17
|
-
实际派遣按 <Path>{roots.references}/coordination/task-brief.md</Path> 绑定票据/Spec、依赖证据、不可变基线、选定工作区、允许路径/动作、验证、停止条件和返回位置。外部交接使用原 sessions
|
|
17
|
+
实际派遣按 <Path>{roots.references}/coordination/task-brief.md</Path> 绑定票据/Spec、依赖证据、不可变基线、选定工作区、允许路径/动作、验证、停止条件和返回位置。外部交接使用原 sessions;TASK 派遣前冻结,派遣后准确确认的会话日志绝对路径只写同任务 session-locator.json 的 path 字段,新合同在投递/回收时分别运行交接校验。原生协作按需交接,不建 Agent 注册表。返回包含实际实现者、路径、checkpoint 或快照、dirty 状态、命令结果、未验证项及 blocker。
|
|
18
18
|
|
|
19
19
|
## 验收与恢复
|
|
20
20
|
|