Skip to content

Commit 6ee304a

Browse files
committed
feat: consolidate control assets under content root
1 parent 1a2655d commit 6ee304a

533 files changed

Lines changed: 3087 additions & 20855 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.
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
{
2+
"schemaVersion": "SkillRouteS15EvidenceV1",
3+
"status": "PASS",
4+
"probeRunId": "s15-codex-production-68bb76ae-7315-4273-b77b-d06bdf13233d",
5+
"host": "codex",
6+
"hostVariant": "codex-cli/exec-user-global-local-stdio",
7+
"testedVersion": "codex-cli 0.145.0",
8+
"protocolVersion": "2024-11-05",
9+
"runtimeDigest": "1c727701a1ae4f3a8699a932066994098402744b99ed81ba2ec32f1929bf5d6a",
10+
"hostAdapterDigest": "6ba881f7fd7eba6297e1fcb8c55da09abbd5f47a42661fb2269f38d05e014139",
11+
"authorizationSource": "capability-pass",
12+
"routeActivation": {
13+
"requested": "unified",
14+
"source": "source-default",
15+
"effective": "unified",
16+
"reason": "unified-default",
17+
"hostEligibility": "PASS",
18+
"capabilityRuntimeCurrent": true,
19+
"capabilityAdapterCurrent": true,
20+
"probeAuthorityUsed": false
21+
},
22+
"project": "s15-codex",
23+
"contextEpoch": "ctx-75b75233-2b41-4c53-a260-a9f9108c03d7",
24+
"turnBinding": "turn-82fd7e7a1f4cb26569f59ce22b2a13a447dc58fd",
25+
"catalogDigest": "133df96e2aa7aa402b915a760c96d2eecd184a452211c188dcb4448452ae24d5",
26+
"catalogPages": 6,
27+
"candidateCount": 76,
28+
"decisionSkillId": "workspace-s15-probe",
29+
"decisionDigest": "34d888ab11e42f55c2ad9b344d3884478ac7c55625860422ef38d6dacfc3a569",
30+
"planDigest": "e93c5115c7cd0e9916c0a1ff3bebed6fed531df70ea4188d70fc595b1eae6547",
31+
"planGeneration": 1,
32+
"activatedConditionIds": [
33+
"test-validation"
34+
],
35+
"requiredStageIds": [
36+
"entry",
37+
"execution:test-validation",
38+
"closeout"
39+
],
40+
"loadedStageIds": [
41+
"entry",
42+
"execution:test-validation",
43+
"closeout"
44+
],
45+
"processComplete": true,
46+
"bodyDigest": "2057dfd1a53010720efa6d18ca2bcec1371431c928d2767fb86afc39f82c2e3e",
47+
"marker": "S15_BODY_3D05FD2B-92C1-4979-8CC2-E965680191E0",
48+
"markerDigest": "5e205a7df655f5583586665053e3907ca03150c99b8122df7defd79ec2abfc91",
49+
"contextAcquisition": {
50+
"source": "host-hooks",
51+
"prewritten": false,
52+
"receiptStatus": "relevant-complete",
53+
"observedTools": [
54+
"devcodex-profile/profile_context_plan",
55+
"devcodex-profile/profile_load",
56+
"devcodex-memory/memory_status",
57+
"devcodex-profile/skill_route",
58+
"devcodex-profile/skill_route",
59+
"devcodex-profile/skill_route",
60+
"devcodex-profile/skill_route",
61+
"devcodex-profile/skill_route",
62+
"devcodex-profile/skill_route",
63+
"devcodex-profile/skill_route",
64+
"devcodex-profile/skill_route",
65+
"devcodex-profile/skill_route",
66+
"devcodex-profile/skill_route",
67+
"devcodex-profile/skill_route",
68+
"devcodex-profile/skill_route"
69+
]
70+
},
71+
"observedOps": [
72+
"profile_context_plan",
73+
"profile_load",
74+
"memory_status",
75+
"catalog",
76+
"commit",
77+
"conditional-replan",
78+
"load_stage",
79+
"status"
80+
],
81+
"retirementAnomalies": {
82+
"legacyFallback": 0,
83+
"doubleBody": 0,
84+
"crossRoot": 0,
85+
"stateCorruption": 0,
86+
"missingStage": 0,
87+
"missingCloseout": 0
88+
},
89+
"transport": {
90+
"kind": "local-stdio",
91+
"servers": [
92+
"devcodex-profile",
93+
"devcodex-memory"
94+
],
95+
"networkListener": false,
96+
"longRunningServiceStarted": false,
97+
"childExitedWithHost": true
98+
},
99+
"startedAt": "2026-07-30T10:01:51.233Z",
100+
"completedAt": "2026-07-30T10:04:23.337Z",
101+
"evidenceDigest": "ce8fb9c145934bb59f2ce1f5d253a21fb9ba33218a728d4b23b7a0c45fe2cc53"
102+
}

‎.gitignore‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,14 @@ website/*
3333
.tmp/
3434
.tmp/**
3535

36+
# Generated npm compatibility projection; tracked authoring source lives under content/.
37+
/instructions.md
38+
/instructions/**/*.md
39+
/prompts/**/*.md
40+
/skills/*/SKILL.md
41+
/skills/*/intent.json
42+
/content-source/
43+
3644
source-root-deployment-backup-*/
3745
tmp-validate*.txt
3846
package.json.tmp-test
39-

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ npm run test:skill-route
230230
npm run global-adapters:apply
231231
```
232232

233-
源码仓中的 instruction、prompt 与 Skill Markdown 维护入口统一位于 `content-source/`。修改 authoring source 后先运行 `npm run check:control-content`;需要更新既有 delivery 路径时显式运行 `npm run generate:control-content`。运行时和 npm 安装包继续读取原路径,不读取或携带 `content-source/`。
233+
源码仓中的 instruction、prompt 与 Skill Markdown 唯一维护入口统一位于 `content/`。修改 canonical content 后先运行 `npm run check:control-content`;仓库兼容路径由 `npm run generate:control-content` 确定性投影,npm 打包则通过带锁和回执的 prepack/postpack 临时投影旧 delivery 路径。运行时和 npm 安装包继续读取 standalone delivery,不读取或携带 `content/`。
234234

235235
维护者文档站(需本机已有完整 `website/`):
236236

‎RULES.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ DevCodex 同时支持五宿主的用户级加载路径,规则语义保持一
6161

6262
## 控制面 Markdown 维护
6363

64-
- 135 个 instruction/prompt/Skill Markdown 的唯一手写源位于 `content-source/`。
65-
- `instructions.md`、`instructions/`、`prompts/`、`skills/*/SKILL.md` 是确定性 delivery,不直接双写。
64+
- 135 个 instruction/prompt/Skill Markdown 的唯一手写源位于 `content/`。
65+
- `instructions.md`、`instructions/`、`prompts/`、`skills/*/SKILL.md` 是确定性兼容 delivery,不直接双写;发布时由带锁和回执的 projection 事务临时物化。
6666
- shared include 只在构建期展开;禁止 runtime include、嵌套 include、symlink 和路径穿越。
6767
- 提交前必须通过 `npm run test:control-content`;prepack 只校验,不自动改写,npm 包不含 authoring source。
6868

‎changelogs/releases/v1.5.0.md‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ npx @vextjs/devcodex status
8585

8686
## 🔗 相关资源
8787

88-
- [需求模板](../../prompts/requirement.prompt.md)
89-
- [产物路径规范](../../instructions/02-output-paths.instructions.md)
90-
- [开发工作流规则](../../instructions/10-dev.instructions.md)
88+
- [需求模板](../../content/prompts/requirement.prompt.md)
89+
- [产物路径规范](../../content/instructions/02-output-paths.instructions.md)
90+
- [开发工作流规则](../../content/instructions/10-dev.instructions.md)
9191

9292
---
9393

@@ -126,4 +126,3 @@ npx @vextjs/devcodex status
126126

127127
- `instructions/13-analyze.instructions.md` — 新增「代码实现验证约束」节:当分析结论依赖代码事实时,强制先 grep/glob 探索实际代码,再与计划文档比对;禁止以计划路径做存在性替代验证;触发由 AI 自检而非用户措辞决定(防止架构偏差被误判为未实现)
128128
- `instructions/14-self-fix.instructions.md` — 自动级修复验证 V1~V6 升级为 V1~V7,新增 V7「规则触发条件写作检查」:约束规范本身的写作方式,触发条件主语必须是 AI 内部判断,禁止以用户意图/措辞为触发主语(防止关键词依赖反模式复现)
129-

‎changelogs/unreleased.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
66
## 当前未发布实现候选
77
- **控制面规范资产去重与确定性组合**:新增 `content-source/` 作为 135 个 instruction/prompt/Skill Markdown 的唯一手写根,保留既有 tracked delivery 路径;22 个 build-time 单层 shared fragments 覆盖 58 个消费点,26 exact + 4 near-section 候选全部有 disposition。新增 zero-write materializer、受控 extraction、重复分析、compatibility mirror、validation DAG invariant 与 prepack/package 排除门禁;修复 folded/literal frontmatter 解析和纯 `>`/`|` intent false-green,83 active intent 全部重生并通过 semantic quality。
8+
- **在途缺陷绑定与渐进路由恢复**:新增 `InFlightIssueRequirementBindingGate`,禁止用 PI/PF 代替未闭环需求修订;`skill_route` 增加受约束的 `rebind` 操作,在 ContextRead 漂移后保持原 skill 决策、条件和兼容阶段进度,并用宿主会话身份隔离 Stop 约束。
89
- **工作区 Skill 意图结构化与渐进路由(B4 收口)**:83 个 active Skill 使用 `SkillIntentV1`;运行时构建 W + managed G 动态快照,经单一 `skill_route` MCP Tool 执行 catalog/commit/load_stage/status、0/1 自由选择、依赖闭包、冲突与预算校验、分阶段正文加载、条件重规划、幂等重放、会话隔离恢复和有锁 GC。统一路由现为 Claude/Codex/Copilot/Gemini/Grok 五宿主唯一源码默认,能力证据仅用于发布后观测,不再切换模式或阻塞完成;旧 `WorkspaceSkillAutoMatch` / `WorkspaceSkillIntent` 生命周期分支、CLI 入口和验证节点退出活跃闭包。修复跨会话 Stop 读取共享状态导致的 `test` 误触发,并把否定、截图、日志、报告、诊断性提及排除在显式调用外;多项目工作区目标未绑定时改为 `SkillRouteBootstrapPendingV1`,只接受 observed ContextRead plan 绑定现有项目,禁止用 workspace basename 创建合成 namespace。MCP 为宿主按需启动的本地 stdio 子进程,无端口、HTTP、远程服务或常驻 daemon。W 在每轮动态发现;用户原生 `AGENTS.md` / `CLAUDE.md` / `SKILL.md` 与个人 Skill 保持宿主所有权,同名不构成清理或覆盖权限。
910
- **公共 README 校验迁移**:以严格 `PublicReadmeContractV1` 替代要求公共 README 罗列内部 Gate/Skill/控制面术语的历史断言;README/client/release/workflow/brand/turn/execution consumers 共用该边界,并用损坏核心安装路径的负向探针防止宽松绕过。
1011
- **全局验证 skill `skill-load-verify`**:触发「验证技能 / skill load verify」;用户可见仅固定句 `SKILL-LOAD-VERIFY-OK`;Skill 规模 85→**86**(83 active + 3 gray)。

‎codex/hooks.json‎

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
"hooks": [
77
{
88
"type": "command",
9-
"command": "node -e \"let d=process.cwd(),fs=require('fs'),p=require('path');while(true){const f=p.join(d,'.codex','hooks','_runtime','lifecycle.cjs');if(fs.existsSync(f)&&(fs.existsSync(p.join(d,'.devcodex'))||fs.existsSync(p.join(d,'package.json')))){require(f);break}const n=p.dirname(d);if(n===d){process.exit(0)}d=n}\""
9+
"command": "node -e \"let d=process.cwd(),fs=require('fs'),p=require('path');while(true){const f=p.join(d,'.codex','hooks','_runtime','lifecycle.cjs');if(fs.existsSync(f)&&(fs.existsSync(p.join(d,'.devcodex'))||fs.existsSync(p.join(d,'package.json')))){require(f);break}const n=p.dirname(d);if(n===d){process.exit(0)}d=n}\"",
10+
"timeout": 30
1011
}
1112
]
1213
}
@@ -16,7 +17,8 @@
1617
"hooks": [
1718
{
1819
"type": "command",
19-
"command": "node -e \"let d=process.cwd(),fs=require('fs'),p=require('path');while(true){const f=p.join(d,'.codex','hooks','_runtime','lifecycle.cjs');if(fs.existsSync(f)&&(fs.existsSync(p.join(d,'.devcodex'))||fs.existsSync(p.join(d,'package.json')))){require(f);break}const n=p.dirname(d);if(n===d){process.exit(0)}d=n}\""
20+
"command": "node -e \"let d=process.cwd(),fs=require('fs'),p=require('path');while(true){const f=p.join(d,'.codex','hooks','_runtime','lifecycle.cjs');if(fs.existsSync(f)&&(fs.existsSync(p.join(d,'.devcodex'))||fs.existsSync(p.join(d,'package.json')))){require(f);break}const n=p.dirname(d);if(n===d){process.exit(0)}d=n}\"",
21+
"timeout": 30
2022
}
2123
]
2224
}
@@ -27,7 +29,8 @@
2729
"hooks": [
2830
{
2931
"type": "command",
30-
"command": "node -e \"let d=process.cwd(),fs=require('fs'),p=require('path');while(true){const f=p.join(d,'.codex','hooks','_runtime','lifecycle.cjs');if(fs.existsSync(f)&&(fs.existsSync(p.join(d,'.devcodex'))||fs.existsSync(p.join(d,'package.json')))){require(f);break}const n=p.dirname(d);if(n===d){process.exit(0)}d=n}\""
32+
"command": "node -e \"let d=process.cwd(),fs=require('fs'),p=require('path');while(true){const f=p.join(d,'.codex','hooks','_runtime','lifecycle.cjs');if(fs.existsSync(f)&&(fs.existsSync(p.join(d,'.devcodex'))||fs.existsSync(p.join(d,'package.json')))){require(f);break}const n=p.dirname(d);if(n===d){process.exit(0)}d=n}\"",
33+
"timeout": 30
3134
}
3235
]
3336
}
@@ -38,7 +41,8 @@
3841
"hooks": [
3942
{
4043
"type": "command",
41-
"command": "node -e \"let d=process.cwd(),fs=require('fs'),p=require('path');while(true){const f=p.join(d,'.codex','hooks','_runtime','lifecycle.cjs');if(fs.existsSync(f)&&(fs.existsSync(p.join(d,'.devcodex'))||fs.existsSync(p.join(d,'package.json')))){require(f);break}const n=p.dirname(d);if(n===d){process.exit(0)}d=n}\""
44+
"command": "node -e \"let d=process.cwd(),fs=require('fs'),p=require('path');while(true){const f=p.join(d,'.codex','hooks','_runtime','lifecycle.cjs');if(fs.existsSync(f)&&(fs.existsSync(p.join(d,'.devcodex'))||fs.existsSync(p.join(d,'package.json')))){require(f);break}const n=p.dirname(d);if(n===d){process.exit(0)}d=n}\"",
45+
"timeout": 30
4246
}
4347
]
4448
}
@@ -48,7 +52,8 @@
4852
"hooks": [
4953
{
5054
"type": "command",
51-
"command": "node -e \"let d=process.cwd(),fs=require('fs'),p=require('path');while(true){const f=p.join(d,'.codex','hooks','_runtime','lifecycle.cjs');if(fs.existsSync(f)&&(fs.existsSync(p.join(d,'.devcodex'))||fs.existsSync(p.join(d,'package.json')))){require(f);break}const n=p.dirname(d);if(n===d){process.exit(0)}d=n}\""
55+
"command": "node -e \"let d=process.cwd(),fs=require('fs'),p=require('path');while(true){const f=p.join(d,'.codex','hooks','_runtime','lifecycle.cjs');if(fs.existsSync(f)&&(fs.existsSync(p.join(d,'.devcodex'))||fs.existsSync(p.join(d,'package.json')))){require(f);break}const n=p.dirname(d);if(n===d){process.exit(0)}d=n}\"",
56+
"timeout": 30
5257
}
5358
]
5459
}

0 commit comments

Comments
 (0)