Skip to content

Commit f787108

Browse files
committed
fix(validation): align workspace delivery chain
1 parent 209380e commit f787108

71 files changed

Lines changed: 5244 additions & 250 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.gitignore‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ coverage/
1111
*.log
1212
.env
1313
.env.local
14+
/.playwright-cli/
1415

1516
# Maintainer docs site (Rspress) — NOT in public git / NOT in npm pack.
1617
# Keep a local copy for maintainers; public users use README only.

‎README.md‎

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ devcodex init
1919
devcodex status
2020
```
2121

22-
安装或更新后,请完全退出旧会话,再从目标项目打开宿主的新会话。
22+
安装命令只会获取 npm registry 上的版本;不要把本地候选、未推送提交或 `main` 上的最新源码误认为已经发布。安装或更新后,请完全退出旧会话,再从目标项目打开宿主的新会话。
2323

2424
### DevCodex 不是什么
2525

@@ -121,7 +121,7 @@ devcodex status
121121
## 工作流、Skill 与宿主边界
122122

123123
<!-- devcodex-public:workflows primary=dev,fix,analyze,audit,resume,chat advanced=self-fix,other -->
124-
<!-- devcodex-public:skills total=86 active=83 gray=3 bucket=80+ -->
124+
<!-- devcodex-public:skills total=86 active=83 gray=3 bucket=80+ categories=workflow-routing:20,domain-architecture:21,quality-delivery:28,runtime-governance:17 -->
125125
<!-- devcodex-public:hosts ids=copilot,claude,codex,gemini,grok,cursor variants=13 -->
126126
<!-- devcodex-public:auto canonical=@devcodex-auto default=@rocky profile-replacement=true empty-array-disables=true -->
127127
<!-- devcodex-public:capabilities ids=turn-ambiguous-request-into-action,fix-with-regression-confidence,evolve-cross-domain-change,deliver-with-evidence-and-handoff -->
@@ -141,7 +141,18 @@ devcodex status
141141

142142
`plan` 是阶段或能力,不是第九个 canonical workflow。
143143

144-
当前机器事实为 **86 个 Skill(83 active + 3 gray)**;公开摘要使用 **80+**。Workflow、Domain、Delivery & Governance 和 Workspace 四类 Skill 按任务与阶段渐进加载。
144+
当前机器事实为 **86 个 Skill(83 active + 3 gray)**;公开摘要使用 **80+**。四类 bundled Skill 按任务与阶段渐进加载:
145+
146+
<!-- devcodex-public:skill-categories:start -->
147+
| Bundled 分类 | 数量 | 代表 active Skill |
148+
|---|---:|---|
149+
| [Workflow & Routing](https://devcodex-labs.github.io/devcodex/reference/skills?category=workflow-routing) | 20 | `intent`、`dev-default`、`fix-default`、`audit-common` |
150+
| [Domain & Architecture](https://devcodex-labs.github.io/devcodex/reference/skills?category=domain-architecture) | 21 | `product-strategy`、`frontend-architecture`、`backend-domain-architecture`、`data-architecture` |
151+
| [Quality & Delivery](https://devcodex-labs.github.io/devcodex/reference/skills?category=quality-delivery) | 28 | `quality-strategy`、`dev-testing`、`review-checklist`、`release-verification` |
152+
| [Runtime & Governance](https://devcodex-labs.github.io/devcodex/reference/skills?category=runtime-governance) | 17 | `host-capability-routing`、`memory`、`skill-lifecycle-governance`、`spec-governance` |
153+
154+
Workspace Skill 是项目级扩展(`extensionSource=workspace`),不进入 bundled assignments,也不进入 86/83/3 分母。
155+
<!-- devcodex-public:skill-categories:end -->
145156

146157
| 宿主 | 推荐入口 | 公开状态 |
147158
|---|---|---|

‎changelogs/unreleased.md‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
# 未发布变更(Unreleased)
22

33
> **用途**: 记录尚未正式发版的实现级变更。
4-
> **当前**: v1.17.10 已发布并完成 R7;下列文档站重构为未发布工作树候选,不代表 registry 用户已经获得。发行事实以 Git tag、npm registry、GitHub Release 与 Profile 05 的 `ProfileCurrentTruthV1` 为准。
4+
> **当前**: v1.17.10 已发布并完成 R7;下列工作区交付链、验证控制面与文档站变更均为未发布工作树候选,不代表 registry 用户已经获得。发行事实以 Git tag、npm registry、GitHub Release 与 Profile 05 的 `ProfileCurrentTruthV1` 为准。
55
66
## 当前未发布实现候选
77

8+
- **验证分层与计划可解释性**:`ValidationPlanV1` 与 `ValidationExecutionReceiptV2` 明确区分 iterative changed-route 和 qualification route,记录逐节点选择原因、预算、完整回退原因及执行回执;验证控制面自身变化、未知输入或闭包超过阈值时仍 fail closed 到 full,不用“优化”削弱最终资格验证。
9+
- **工作区绑定与续接一致性**:`HostWorkspaceBindingV1` 统一宿主工作区、workspace namespace 与 active project 的物理身份;`ProjectTargetLeaseV1` 只允许在短 TTL、marker/layout/allowlist 均未漂移时沿用目标,歧义、显式冲突或 workspace 选择立即重判,避免 session 轮换导致错误换项目。
10+
- **Memory 产物链接投影**:新增单一 `ArtifactLinkProjectionV1` owner,把合法任务产物投影为可点击本地链接;路径必须 canonical containment、去重且保留原真相源,越界、伪 URI、目录或缺失目标不生成链接。Memory MCP、提示、可见输出、任务续接及 package consumers 同步接入。
11+
- **公开 Skill 分类与可发现目录**:新增 canonical `PublicSkillTaxonomyV1`,将 86 个 bundled Skill 精确归入 workflow-routing 20、domain-architecture 21、quality-delivery 28、runtime-governance 17;83 active + 3 gray 生命周期保持独立。README 与 public-site 从同一投影生成分类计数、代表 Skill 和完整 86 项目录;`SkillCatalog` 服务端默认输出全部目录,并提供关键字、分类、生命周期及 `?category=` 过滤。Workspace Skill 不计入 bundled 86,也不成为第五分类。
12+
- **工作树交付边界**:仓库根 `.playwright-cli/` 由 repository-owned ignore 与 Git/package 路径集合守卫排除;验证只判断其是否被跟踪或进入 tarball,不读取、枚举、修改、移动或删除目录内容。本候选只允许本地实现、审查与验证收敛,不改版本、不 commit/tag/push/publish,也不更新 registry 或已发布运行态。
813
- **公开站工作流完整分层与语义流程**:公开站从“总览 + 6 个 primary ID”收敛为工作流选择、开发与修复、分析/审查/规划、对话/续接 4 个任务入口;完整解释 8 个 canonical workflow、6 primary + 2 advanced、12 个用户任务 subtype、1 个内部 `dev.plan-review` step 和 7 个 audit target。六个旧 URL 保留,架构与选择流程改为无需图表运行时的语义化响应式列表;控制面仅同步 `other/plan` 与内部步骤术语,runtime/CLI/Hook/MCP 行为和依赖不变。
914
- **公开用户文档站任务化重构**:公开站从概念摘要扩展为 Journey / Trust / Reference 三层,新增四个任务教程、宿主与 workspace 设置、信任/安全/数据、CLI、状态错误码、运行态维护和术语表;quick start 收敛为单一只读首次成功路径,README 缩短并把深入说明指向 canonical Pages。四张首页能力卡各自进入独立教程;package 版本与生成时间写入 public projection,host reference 与产品表达由测试对账。旧 URL 全部保留,CLI/runtime/adapter 行为和依赖不变。
1015
- **公开站点内容与事实生成升级**:在保留已发布 9 个 URL 的前提下增加 concepts / workflows / 一条续接案例;生成器从现有投影器写出 `public-site/data/public-product-projection.json` 并刷新 marker 与 README V2 数字句;页数合同改为必存在路径 + 下限 23。

‎content/duplication-inventory.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"schemaVersion": "ControlContentDuplicationInventoryV1",
3-
"sourceBundleDigest": "81abbe2cfaa7358a4dca27be7a97ff7970677e844f7d56f21e5f7220632da5c2",
3+
"sourceBundleDigest": "a452888976bfffd0f651f9b7d38c85921cf7f509477b3b965a05a7f30e545b7a",
44
"thresholds": {
55
"minParagraphChars": 100,
66
"sectionThreshold": 0.94,

‎content/instructions.md‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,9 @@
126126
- `config.json`:`<工作区根>/.devcodex/workspace/profile/` 作为 base,`<工作区根>/.devcodex/<project>/profile/` 作为 overlay;Auto 精确别名全局默认 `@rocky`,可用 `extensions.devcodex.autoAliases` 替换全局默认别名(省略表示沿用默认,空数组表示关闭默认别名),也可在 `extensions.devcodex.concurrency` 配置 `ConcurrencyPolicy`
127127
- `config.local.json`:与 `config.json` 使用相同的 `workspace base + project overlay` 路径模型,可作为用户 / 项目指定的本地 overlay(长期连接、本地明文连接信息、env / secretRef 引用、`extensions.<namespace>`);不得覆盖 `mode` / `agent` / `pluginVersion`
128128
- 连接配置来源遵循 S02:默认可直写或沿用项目既有模式;只有用户或项目明确指定 `config.local.json` 时,脚本、测试、数据库 / SSH / MongoDB / 数据操作才从当前 Profile 路径模型下的 `config.local.json` 读取,缺失文件或字段时提醒补齐
129-
- Profile 文档:项目命名空间文件优先,缺失回退到 `workspace/profile/`
129+
- Profile 文档:已存在项目 Profile 根时,项目命名空间文件优先,单个文件缺失可回退到 `workspace/profile/`;物理项目存在但整个项目 Profile 根缺失时返回 `PROFILE_MISSING`,不得以 workspace base 冒充项目 Profile 成功
130130
- 运行态目录:单项目写 `<工作区根>/.devcodex/<project>/...`,全工作区写 `<工作区根>/.devcodex/workspace/...`
131-
- workspace-namespace 下缺少 workspace profile 的多项目提示必须指向 `.devcodex/workspace/profile/`;同一宿主会话已识别唯一目标项目时,后续“继续 / 确认”等消息可在短 TTL 内沿用 sticky `activeProject` 与项目 `mode`,但新会话、TTL 过期、命中多个项目或用户显式选择 workspace 时必须重新判断。
131+
- workspace-namespace 下缺少 workspace profile 的多项目提示必须指向 `.devcodex/workspace/profile/`;已由物理 marker、layout identity 与 allowlist 复证的唯一项目可在短 TTL 内沿用 `ProjectTargetLeaseV1`,host session 仅作审计,session rotation/compact 不单独撤销租约;TTL 过期、marker/layout 漂移、歧义、显式目标冲突或用户选择 workspace 时必须立即重新判断。
132132
- 未启用 `layout.json` 时,继续兼容 `<项目根>/.devcodex/...`
133133

134134
| 文件 | 说明 | 必须 |
@@ -599,6 +599,8 @@ CP1(问题确认)→ CP2(方案确认)→ [impact-review] → [CP3] →
599599

600600
命中 HostCapabilityRoutingGate 时,daily tasks、需求级 memory、report 与 handoff 只保存同一个 `instructionRefId` / `decisionId` 及 bounded projection;禁止复制完整用户原文或 catalog row。confirm/compact/resume 前后若只有 compat/none authority,自动 mutation 必须停止并回绑 digest-bound CP/task artifact 或请求重述。
601601

602+
新增本地关联链接必须走 `ArtifactLinkProjectionGate`:写前调用 `memory_artifact_link_project(operation: "project")`,写后用同一 document/artifacts/capability 执行 `validate-existing`。daily 的 `artifacts[]`、SUMMARY 的 `reportArtifact/memoryArtifact` 和 digest-bound CP confirmation 由 Memory writer 生成 document-relative Markdown 并返回 readback;按 canonical path 去重,含空格 href 使用 angle destination,broken/absolute/`file://`/越界/reparse 链接拒写。历史链接未经单独确认只预览、不批量改写。
603+
602604
### SUMMARY 文件
603605

604606
```

‎content/instructions/01a-profile-loading.instructions.md‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ version: 1.17.10
4242
- 计划选中的正文通过 `profile_load({ project, files })` 定向加载。只有与 contextEpoch / invocation `planId` / `planContentId` / activeRoot / sourceId 精确相关且由 `PostToolUse` 观察成功的 `ContextReadReceiptV2`(兼容 `ContextReadReceiptV1`)才能证明 loaded;PreToolUse 只记 attempted。
4343
- `planContentId` 只证明等价计划内容,可跨进程复用解析/索引等 computation metadata;它不能证明正文已交付。正文 delivery reuse 仅限同一 host session、同一 contextEpoch、相同 source identity 且当前模型已有成功 body observation;新会话、压缩/恢复新 epoch、不可观察 session 或任一失效因子变化都必须重新交付所需正文。
4444
- 全量升级仅允许 `explicit-user/project-policy/audit/migration/low-confidence/required-source-missing` 等可审计原因,并写 `fullReadReason`;`config.local.json` 必须另有用户 / 项目明确要求,不能因文件存在自动入选。
45-
- 覆盖 `.devcodex/<project>/profile` 读取链、`.devcodex/workspace/profile` 回退链和 sticky activeProject 生效边界;目标变化、scope/action/risk 漂移、Profile digest 变化或 compact/resume 才触发重新规划,不得每个工具动作都重复加载。
45+
- 覆盖 `.devcodex/<project>/profile` 读取链、`.devcodex/workspace/profile` 回退链和 sticky `activeProject` 生效边界;目标变化、scope/action/risk 漂移、Profile digest 变化或 compact/resume 才触发重新规划,不得每个工具动作都重复加载。
4646
- 复审服务 / 框架规范时列出全部服务集合、docs 自维护链、导航、版本、构建、报告和记忆消费者。
4747
- 从单服务抽公共规范时同步执行 `StrongestProfileSourceGate` / `ServiceSpecificResidueSweep`,以最强 Profile 为基线并清扫服务化残留。
4848

@@ -75,7 +75,8 @@ version: 1.17.10
7575
- 豁免词:用户消息含 `workspace` / `monorepo` / `全工作区` / `all projects` / `所有项目` 则允许全工作区扫描。
7676
- `lifecycle.cjs` 默认 `safety-only` 下只输出提醒并放行工具,`strict` 模式下才执行 runtime 硬拦截;本条仍是 AI 侧必须遵守的流程约束。
7777
- 当启用 `workspace-namespace` 且缺少 workspace profile 时,运行时提示必须指向真实路径 `.devcodex/workspace/profile/`。
78-
- 若同一宿主会话已识别唯一目标项目,后续“继续 / 确认”等消息可在短 TTL 内沿用 sticky `activeProject` 与项目 `mode`;新会话、TTL 过期、命中多个项目或用户显式选择 workspace 时必须重新判断。
78+
- 物理项目已绑定但 `.devcodex/<project>/profile/` 整体缺失时必须返回 `PROFILE_MISSING`;只有项目 Profile 根已存在时,单文件缺失才可按 workspace base + project overlay 规则读取 workspace 文件。
79+
- 若已用物理 marker、layout identity 与 allowlist 复证唯一目标项目,后续“继续 / 确认”等消息可在短 TTL 内沿用 `ProjectTargetLeaseV1` 的 `activeProject` 与项目 `mode`;host session 仅作审计,session rotation/compact 不单独撤销租约。TTL 过期、marker/layout 漂移、命中多个项目、显式目标冲突或用户选择 workspace 时必须立即重新判断。
7980
- 完整 `继续<任务名>任务` / `继续 <任务名>` 应先用 `TaskResolutionV1` 的 bounded exact resolver 定位项目,再形成该 active namespace 的 ContextReadPlan;该定位阶段不得预读 Profile 正文,且歧义/完成/stale/scale-blocked 不得错误绑定项目。
8081

8182
## 项目现实扩展(Project Reality Expansion)

‎content/instructions/02-output-paths.instructions.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,8 @@ reports/<子目录>/<agent>/YYYYMMDD/NN--<简述>.md
188188

189189
`ArtifactLinkSet` 保留为可见集合的兼容投影名,不再是真相源;`ArtifactLinkSetDedupeGate` 执行规范化绝对路径去重,按 canonical path 合并同一物理文件。禁止 `file://`,禁止只输出裸文件名,禁止询问“是否需要打开”。
190190

191+
记忆交付链使用 `ArtifactLinkProjectionSetV1` 作为确定性写入投影:写前 `memory_artifact_link_project(operation: "project")`,写后 `operation: "validate-existing"`;daily、SUMMARY 与 CP writer 的结构化 artifact 字段必须返回同口径 readback。document/target 都以 active-root-relative 输入,href 以 document 目录为基准;历史链接未经单独确认只预览、不批量改写。
192+
191193
推荐 Rich 示例(语义链接 + portable 路径列):
192194

193195
```markdown

‎content/instructions/15-memory.instructions.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,12 @@ daily/SUMMARY 仍是唯一真相源:受管 writer 在文件提交后刷新索
8787
- 已存在 canonical 文件的纯 EOF 增长走 append fast path;创建走 atomic temp+rename,中段更新保留 rewrite。append/rewrite 都必须在最终写入窗口重新比较 source identity,外部编辑时 fail closed 且不得覆盖。
8888
- POSIX rewrite 保留 mode/uid/gid,新文件 mode=0600;Windows DACL 未执行真实 before/after probe 时必须明确 `WARN/UNVERIFIED`,不得用 POSIX mode 模拟 PASS。事务只清理由自己创建的临时文件。
8989

90+
### ArtifactLinkProjectionGate
91+
92+
- 新增本地 Markdown 关联前,先调用 `memory_artifact_link_project(operation: "project", documentPath, artifacts, linkCapability)`;`documentPath` 与每个 `targetPath` 都必须相对 active-root,目标必须是 canonical containment 校验通过的现存普通文件。投影固定返回 `ArtifactLinkProjectionSetV1`,按 canonical path 去重,从 `documentPath` 所在目录生成 `/` 分隔的相对 href;含空格的 href 使用 Markdown angle destination,禁止 `file://`、绝对路径 fallback 和越界/reparse traversal。
93+
- `memory_session_write.artifacts[]`、`memory_summary_append.reportArtifact/memoryArtifact` 与 digest-bound `memory_cp_confirm` 由 writer 使用同一投影 owner:daily 自动生成“关联产物”块,SUMMARY 自动生成第 5/6 列,CP `artifactPath` 单元格生成相对链接;receipt 必须同时返回投影与 `validate-existing` 写后回读。legacy raw content/row 保持兼容,但其中新增的本地 Markdown 链接若不是从当前目标文档解析、目标不存在或越界,必须零写入失败。
94+
- 手工/宿主 fallback 写入时,落盘前使用 `operation: "project"`,落盘后对同一 `{documentPath, artifacts, linkCapability}` 使用 `operation: "validate-existing"`;缺任一阶段不得声称链接交付完成。历史 active-root 文档只允许先做有界预览与问题清单,未经单独确认禁止批量回写旧链接。
95+
9096
## Context Rehydration Contract(记忆侧)
9197

9298
压缩恢复、summary 恢复、resume 或用户明确要求“按文件真相重建”时,记忆侧上下文必须按以下优先级参与重建:

‎content/prompts/agent-summary.prompt.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ applyTo: .devcodex/**/.memory/**
3030
- **禁止** `/` 拼接(`fix/dev`、`audit/ECR`)、自由标签(`ops`、`ledger`、`release`、`governance-record`)与状态符号(`✅`)
3131
- 映射提示:审查/复审/走查 → `audit`;结论/根因/清单 → `analyze`;SC15 ECR / 实施闭环 → `dev` 或 `self-fix`(不是 audit);运维命令 → `other` 或并入主工作流
3232
- MCP `memory_summary_append` 会硬校验;非法类型写入失败
33+
- **关联报告 / 关联记忆**:优先传 `reportArtifact` / `memoryArtifact`,由 writer 生成相对 SUMMARY document 的链接并执行 `validate-existing` readback;legacy row 仍可用,但 broken local Markdown、`file://`、绝对/越界链接拒写。
3334
- **摘要**:一行 50~100 字,包含做了什么 + 关键数字/结果
3435
- **多任务会话**:一行覆盖全部任务,不拆多行
3536
- **排序**:按时间正序追加(最新在最后)

‎content/prompts/memory-session.prompt.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ applyTo: .devcodex/**/.memory/**
3939
```markdown
4040
### 📄 关联报告
4141

42-
| 报告 | 路径 |
43-
|------|------|
44-
| [报告名称] | `E:\路径\NN--简述.md` |
42+
> 优先向 `memory_session_write.artifacts[]` 传结构化产物,由 writer 按当前 daily document 生成并回读相对链接;宿主 fallback 必须先 project、写后 validate-existing。
43+
44+
- [报告名称](<../../../../reports/requirements/<agent>/YYYYMMDD/NN--简述.md>) — [用途]
4545

4646
### 💡 关键决策
4747

0 commit comments

Comments
 (0)