Skip to content

Commit db10d73

Browse files
committed
fix: close Stage A continuity review findings
1 parent 8b59a2d commit db10d73

24 files changed

Lines changed: 1498 additions & 122 deletions

‎changelogs/unreleased.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
66
## 当前未发布实现候选
77

8-
- **正式任务连续性、人类主阅读与模板资格 Stage A**:正式任务写入增加 state-sequence/writer-generation 双栅栏、精确 `TaskOperation` 与 terminal CAS;legacy no-owner 可在稳定身份下单次 claim,TTL 不再产生或转移写权。`LanguageContextV2` 进入热/冷/临时/超大恢复投影,中性“确认”不再让中文任务漂移到英文;用户主响应只显示本地化的人话结论,audit 保留结构化证据。正式 CP/计划/进度/报告/任务记忆/SUMMARY 通过 `ArtifactSlotRegistryV2` 绑定真实 Prompt,写后稳定读回并校验必需结构与顺序,允许 additive extension;missing/wrong/stale template、wrong slot、no-readback 与 validator 删除均失败关闭。Stage B 内部语义迁移、`.devcodex` 实际删除、tag/publish/deploy 不在本候选内。
8+
- **正式任务连续性、人类主阅读与模板资格 Stage A**:正式任务写入增加 state-sequence/writer-generation 双栅栏、精确 `TaskOperation` 与 terminal CAS;legacy no-owner 可在稳定身份下单次 claim,TTL 不再产生或转移写权。后续 R3 修复使 settled operation 在有界历史内不可重新 prepare,完整保留最多 256 个精确目标,并把 package compatibility projection 纳入验证图;正式任务概况的 owner-authorized 演进现在形成摘要封存的 `TaskCanonicalRevisionV1`,新会话在复核任务身份、确认 CP 链和当前概况后以单赢家 CAS 创建下一 admission generation,旧状态可通过一次 confirmed-CP bridge 迁移,随后带外漂移继续失败关闭。`LanguageContextV2` 进入热/冷/临时/超大恢复投影,中性“确认”不再让中文任务漂移到英文,Grok S07 旁路也按任务语言呈现;用户主响应只显示本地化的人话结论,audit 保留结构化证据。正式 CP/计划/进度/报告/任务记忆/SUMMARY 通过 `ArtifactSlotRegistryV2` 绑定真实 Prompt,写后稳定读回并校验必需结构与顺序,允许 additive extension;missing/wrong/stale template、wrong slot、no-readback 与 validator 删除均失败关闭。Stage B 内部语义迁移、`.devcodex` 实际删除、tag/publish/deploy 不在本候选内。
99
- **v1.19.5 补丁候选 — finalized 正式任务连续性恢复**:`memory_task_admit_v2` 支持 fresh selected resume 对 finalized admission 与过期/释放 owner 做服务端单赢家 CAS,同时换代 admission/owner;accepted Stop 停放、PreCompact 续租、同会话重取、候选锁/TTL/容量、v1.19.4 reader 与旧 nonce 拒绝均进入回归。完整说明见 [`changelogs/releases/v1.19.5.md`](./releases/v1.19.5.md)。
1010
- **v1.19.4 归档候选 — 自适应流程与跨会话 owner 恢复**:汇总发布 `WorkflowPlanDecisionV1` / PC0~PC10、显式现存目录 `init --profile` 直通、按影响范围选择 GitHub CI、不可逆 publish 与可恢复 finalize 分离,并增加 `TaskAdmissionRecoveryV1/awaiting-owner-rebind`,让 CP 已持久化但 owner 尚未建立的孤儿事务在稳定任务身份、canonical truth 回读、无有效 continuation lease 且无 fenced owner 时安全换代。完整说明见 [`changelogs/releases/v1.19.4.md`](./releases/v1.19.4.md)。
1111
- **治理台账 resolver、immutable 分片与 GR 试点**:新增 `GovernanceLedgerManifestV1`、共享 resolver、锁内单调 `nextSequence`、可重建 `GovernanceLedgerIndexV1` 与 `governance ledger init|plan|apply|rollback|index`。普通 `init/update` 只做零搬迁 manifest/index 初始化;active 是唯一 writer,archive 只读,reopened 通过 manifest overlay 表达。真实 active-root 的最终 GR 试点把 39 个自包含终态 H2 移入摘要绑定 shard,canonical 记录总数迁移前后均为 990;混合容器 GR-068 被负向探针排除。两次早期异常均由事务恢复或 exact rollback 收敛,未引用 immutable shard按审计策略保留。

‎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": "cbf837692008a55d9d70b7a7b577bb12eaf939eeb4edde78808046295c24ebd3",
3+
"sourceBundleDigest": "a91a7dd3f03550a61892976a9a386f6b35eb08a153530de2c03a6bab9a85dddd",
44
"thresholds": {
55
"minParagraphChars": 100,
66
"sectionThreshold": 0.94,

‎content/prompts/precheck-status.prompt.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,6 @@ applyTo: "**"
5858
- PC9 必须写清本轮定向/受影响/全量验证数量以及 CI、package、install、release 是否进入计划;不得把“发布后安装验证”默认加入普通修复
5959
- PC10 必须说明接下来会走哪些阶段、是否自动继续、用户现在是否需要动作以及一句可直接覆盖错误判断的修正提示
6060
- 六宿主(Copilot / Claude Code / Codex / Gemini / Grok / Cursor)共用本模板;Grok 无 inject、Cursor Cloud 无用户级 Hook 时仍由模型输出本块
61-
- 先用 `user-visible-output-contract` 形成完整 `EntryCheckModelV3` 和 Envelope,再用同一 `LanguageContextV2` 分别渲染 rich/portable/plain;默认 `audience=human`,以人类可读结论为主并隐藏机器 marker/内部 ID,`audience=audit` 才输出完整机器证据。两种投影必须共享同一语义摘要;状态词固定为 PASS/WARN/BLOCK/UNVERIFIED/N/A
61+
- 先用 `user-visible-output-contract` 形成完整 `EntryCheckModelV3` 和 `DevCodexVisibleEnvelopeV3`,再用同一 `LanguageContextV2` 分别渲染 rich/portable/plain;默认 `audience=human`,以人类可读结论为主并隐藏机器 marker/内部 ID,`audience=audit` 才输出完整机器证据。两种投影必须共享同一语义摘要;`DevCodexVisibleEnvelopeV1/V2` 仅兼容读取,状态词固定为 PASS/WARN/BLOCK/UNVERIFIED/N/A
6262
- 新会话、resume/compact、target/intent/risk/CP/dirty/receipt 变化或存在 WARN/BLOCK/UNVERIFIED 时必须 expanded;同 epoch + semanticDigest 不变且全 PASS/N/A 才可 compact,compact 仍保留 PC0~PC10;`showPlan=false` 也不得省略 PC8~PC10
6363
- 若主动建议或因 C08 要求新会话:同回复附内部完整 `NewSessionContinuationCard`,用户可复制入口固定为 `继续<displayName>任务`;长任务在记忆/报告记 `SessionTimingCard`(开始/结束/阶段,等人与执行分列)

‎content/skills/portfolio.json‎

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
"portfolioEvidenceDigest": "8364a73c66ed2ec9787cdb9300223278d128a45b689a2b8deda0d1f03189f42b",
1616
"consumerInventoryFileCount": 669,
1717
"consumerInventoryDigest": "3efebd1bc38d9d30bb71cb50a1eef073eafc51575b8f6649a1054ae661b4f332",
18-
"consumerProjectionDigest": "85709480e5c4ba1265064df53a7e4c8c01a69044791ffd98cdb3c385c7fc47f4",
19-
"portfolioInputDigest": "d0a3c066b4b27faa493cbcdfaf2b900dc7204630cfa1a20c70705b75b2f8eb13"
18+
"consumerProjectionDigest": "d6f011fb44ef3fbca7acfea76ac972aecc5d2954b251e72850855b26b233bdae",
19+
"portfolioInputDigest": "7e79b04ccbde947bd20256a94ece9d0cf339d165d0305b19c839aa77451b40e7"
2020
},
2121
"ordering": "skills.id asc; graph edges from/to asc",
2222
"summary": {
@@ -11017,6 +11017,10 @@
1101711017
"path": "scripts/test-public-product-expression.js",
1101811018
"role": "current"
1101911019
},
11020+
{
11021+
"path": "scripts/test-requirement-artifacts.js",
11022+
"role": "current"
11023+
},
1102011024
{
1102111025
"path": "scripts/test-review-execution-contract.js",
1102211026
"role": "current"
@@ -11105,6 +11109,7 @@
1110511109
"scripts/test-mcp-servers.js",
1110611110
"scripts/test-package-compatibility-projection.js",
1110711111
"scripts/test-public-product-expression.js",
11112+
"scripts/test-requirement-artifacts.js",
1110811113
"scripts/test-review-execution-contract.js",
1110911114
"scripts/test-runtime-rolling-upgrade.js",
1111011115
"scripts/test-skill-intents.js",
@@ -11209,6 +11214,7 @@
1120911214
"scripts/test-mcp-servers.js",
1121011215
"scripts/test-package-compatibility-projection.js",
1121111216
"scripts/test-public-product-expression.js",
11217+
"scripts/test-requirement-artifacts.js",
1121211218
"scripts/test-review-execution-contract.js",
1121311219
"scripts/test-runtime-rolling-upgrade.js",
1121411220
"scripts/test-skill-intents.js",
@@ -16656,6 +16662,10 @@
1665616662
"path": "scripts/test-report-index.js",
1665716663
"role": "current"
1665816664
},
16665+
{
16666+
"path": "scripts/test-requirement-artifacts.js",
16667+
"role": "current"
16668+
},
1665916669
{
1666016670
"path": "scripts/test-requirement-parallel-orchestration.js",
1666116671
"role": "current"
@@ -16759,6 +16769,7 @@
1675916769
"scripts/test-project-knowledge-store.js",
1676016770
"scripts/test-repair-prevention-assessment.js",
1676116771
"scripts/test-report-index.js",
16772+
"scripts/test-requirement-artifacts.js",
1676216773
"scripts/test-requirement-parallel-orchestration.js",
1676316774
"scripts/test-review-execution-contract.js",
1676416775
"scripts/test-skill-portfolio.js",
@@ -16856,6 +16867,7 @@
1685616867
"scripts/test-project-knowledge-store.js",
1685716868
"scripts/test-repair-prevention-assessment.js",
1685816869
"scripts/test-report-index.js",
16870+
"scripts/test-requirement-artifacts.js",
1685916871
"scripts/test-requirement-parallel-orchestration.js",
1686016872
"scripts/test-review-execution-contract.js",
1686116873
"scripts/test-skill-portfolio.js",
@@ -17623,6 +17635,10 @@
1762317635
"path": "changelogs/unreleased.md",
1762417636
"role": "current"
1762517637
},
17638+
{
17639+
"path": "hooks/_runtime/lifecycle-bootstrap-state.cjs",
17640+
"role": "current"
17641+
},
1762617642
{
1762717643
"path": "hooks/_runtime/lifecycle.cjs",
1762817644
"role": "current"

‎hooks/_runtime/artifact-template-contract.cjs‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,8 @@ function deriveArtifactTemplateContract(content, input = {}) {
252252
}
253253

254254
function inferReportTemplate(target, intent) {
255+
const explicitIntent = REPORT_TEMPLATE_BY_INTENT[String(intent || '').toLowerCase()]
256+
if (explicitIntent) return explicitIntent
255257
const value = slash(target).toLowerCase()
256258
const explicit = Object.entries(REPORT_TEMPLATE_BY_INTENT).find(([key]) =>
257259
new RegExp(`/(?:${key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})/`, 'i').test(value)
@@ -263,7 +265,7 @@ function inferReportTemplate(target, intent) {
263265
if (/(?:修复|fix)/i.test(name)) return 'report-fix'
264266
if (/(?:优化|optimization)/i.test(name)) return 'report-optimization'
265267
if (/(?:场景|scenario|测试报告)/i.test(name)) return 'report-scenario-test'
266-
return REPORT_TEMPLATE_BY_INTENT[String(intent || '').toLowerCase()] || 'report-dev'
268+
return 'report-dev'
267269
}
268270

269271
function inferMemoryTemplate(target) {

‎hooks/_runtime/lifecycle-bootstrap-state.cjs‎

Lines changed: 64 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,66 @@ const {
2020
const {
2121
compactLifecycleStateV5
2222
} = require('./lifecycle-state-projection-v5.cjs')
23+
const { resolveVisibleLocale } = require('./visible-output-contract.cjs')
24+
25+
function renderGrokS07Assist(input = {}) {
26+
const locale = resolveVisibleLocale(input.languageContext)
27+
const zh = locale.renderedLanguage === 'zh-CN'
28+
const project = String(input.project || '').trim() || (zh ? '未识别' : 'unverified')
29+
const fallback = locale.fallbackReason
30+
? locale.catalog.localeFallback(locale.requestedLanguage, locale.fallbackReason)
31+
: null
32+
const body = zh
33+
? [
34+
'--- DevCodex S07 辅助(Grok 无法注入;请在用户可见回复中输出) ---',
35+
'### DevCodex · 入口检查',
36+
`\`BLOCK\` · \`${project}\``,
37+
fallback,
38+
'',
39+
'- PC0 [UNVERIFIED] 安装包版本、活动运行时 generation、源码候选与对齐状态',
40+
'- PC1 [UNVERIFIED] 语义初判 → 最终路由',
41+
'- PC2 [UNVERIFIED] 会话/Token/待跟进',
42+
'- PC3 [UNVERIFIED] 唯一项目与产物落点',
43+
'- PC4 [N/A] 非 dev 时 N/A',
44+
'- PC5 [UNVERIFIED] Grok HostParity(仅 Full launcher 可超出 Partial)',
45+
'- PC6 [UNVERIFIED] dirty/active task',
46+
'- PC7 [UNVERIFIED] resume/continuation',
47+
'- PC8 [UNVERIFIED] 初判/二次判断的流程仪式与方案深度差异',
48+
'- PC9 [UNVERIFIED] 验证级别、目标数量、CI/package/install/release 与预计时长',
49+
'- PC10 [UNVERIFIED] 下一阶段、是否自动继续、用户动作与修正提示',
50+
'',
51+
'下一步:先输出完整 PC0~PC10,再完成 ContextReadPlan 证据后重试工具',
52+
'GrokTurnChecklist:PC0~PC10 → Intent→Skill bundle → context plan → work → report+memory → honest ceiling',
53+
'Skill bundle(非 chat):intent+compliance+user-visible-output-contract+workflow+report+memory',
54+
'DevCodexVisibleEnvelopeV3 · entry-check · BLOCK · s07-assist-context-incomplete',
55+
'--- S07 辅助结束 ---'
56+
]
57+
: [
58+
'--- DevCodex S07 assist (Grok cannot inject this; emit it in the user-visible reply) ---',
59+
'### DevCodex · Entry check',
60+
`\`BLOCK\` · \`${project}\``,
61+
fallback,
62+
'',
63+
'- PC0 [UNVERIFIED] installed version, active runtime generation, source candidate, and alignment',
64+
'- PC1 [UNVERIFIED] initial semantic classification → final route',
65+
'- PC2 [UNVERIFIED] session, token, and follow-up state',
66+
'- PC3 [UNVERIFIED] unique project and artifact destination',
67+
'- PC4 [N/A] N/A outside dev mode',
68+
'- PC5 [UNVERIFIED] Grok HostParity (Partial unless launched through the Full launcher)',
69+
'- PC6 [UNVERIFIED] dirty state and active task',
70+
'- PC7 [UNVERIFIED] resume and continuation state',
71+
'- PC8 [UNVERIFIED] workflow ceremony and design-depth delta between initial and final routing',
72+
'- PC9 [UNVERIFIED] validation level, target count, CI/package/install/release scope, and estimated duration',
73+
'- PC10 [UNVERIFIED] next stage, automatic continuation, user action, and correction guidance',
74+
'',
75+
'Next: emit the complete PC0~PC10 block, complete the ContextReadPlan evidence, and then retry the tool.',
76+
'GrokTurnChecklist: PC0~PC10 → Intent→Skill bundle → context plan → work → report+memory → honest ceiling',
77+
'Skill bundle (non-chat): intent+compliance+user-visible-output-contract+workflow+report+memory',
78+
'DevCodexVisibleEnvelopeV3 · entry-check · BLOCK · s07-assist-context-incomplete',
79+
'--- end S07 assist ---'
80+
]
81+
return body.filter(value => value !== null && value !== undefined).join('\n')
82+
}
2383

2484
function parseContextToolIdentity (rawName, explicitServer = '') {
2585
const raw = String(rawName || '').trim()
@@ -2096,31 +2156,8 @@ function buildLifecycleBootstrapStateUtils(ctx) {
20962156
// Grok cannot inject UserPromptSubmit context; attach S07 portable block to deny reason (W7 assist).
20972157
// Keep template inline so deployed .codex/hooks/_runtime copies do not depend on package scripts/.
20982158
if (platform === 'grok') {
2099-
const project = acquisition.project || state.activeProject || '未识别'
2100-
detail += [
2101-
'',
2102-
'--- DevCodex S07 assist (Grok cannot inject this; emit in the user-visible reply) ---',
2103-
'### DevCodex · 入口检查',
2104-
`\`BLOCK\` · \`${project}\``,
2105-
'',
2106-
'- PC0 [UNVERIFIED] 安装包版本、活动运行时 generation、源码候选与对齐状态',
2107-
'- PC1 [UNVERIFIED] 语义初判 → 最终路由',
2108-
'- PC2 [UNVERIFIED] 会话/Token/待跟进',
2109-
'- PC3 [UNVERIFIED] 唯一项目与产物落点',
2110-
'- PC4 [N/A] 非 dev 时 N/A',
2111-
'- PC5 [UNVERIFIED] Grok HostParity(Partial unless Full launcher)',
2112-
'- PC6 [UNVERIFIED] dirty/active task',
2113-
'- PC7 [UNVERIFIED] resume/continuation',
2114-
'- PC8 [UNVERIFIED] 初判/二次判断的流程仪式与方案深度差异',
2115-
'- PC9 [UNVERIFIED] 验证级别、目标数量、CI/package/install/release 与预计时长',
2116-
'- PC10 [UNVERIFIED] 下一阶段、是否自动继续、用户动作与修正提示',
2117-
'',
2118-
'下一步:先输出完整 PC0~PC10,再完成 ContextReadPlan 证据后重试工具',
2119-
'GrokTurnChecklist: PC0~PC10 → Intent→Skill bundle → context plan → work → report+memory → honest ceiling',
2120-
'Skill bundle (non-chat): intent+compliance+user-visible-output-contract+workflow+report+memory',
2121-
'DevCodexVisibleEnvelopeV3 · entry-check · BLOCK · s07-assist-context-incomplete',
2122-
'--- end S07 assist ---'
2123-
].join('\n')
2159+
const project = acquisition.project || state.activeProject || ''
2160+
detail += `\n${renderGrokS07Assist({ languageContext: state.languageContext, project })}`
21242161
}
21252162
return buildInterceptionOutput(
21262163
state,
@@ -2193,5 +2230,6 @@ function buildLifecycleBootstrapStateUtils(ctx) {
21932230
module.exports = {
21942231
buildLifecycleBootstrapStateUtils,
21952232
parseContextToolIdentity,
2196-
classifyMemoryCoverage
2233+
classifyMemoryCoverage,
2234+
renderGrokS07Assist
21972235
}

‎hooks/_runtime/lifecycle-state-projection-v5.cjs‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -675,6 +675,9 @@ function buildColdResumeStub(compactState) {
675675
admissionTransaction: isPlainObject(state.admissionTransaction)
676676
? compactAdmissionTransaction(state.admissionTransaction)
677677
: null,
678+
taskCanonicalRevision: isPlainObject(state.taskCanonicalRevision)
679+
? clone(state.taskCanonicalRevision)
680+
: null,
678681
fencedWriteOwner: isPlainObject(state.fencedWriteOwner)
679682
? compactFencedWriteOwner(state.fencedWriteOwner)
680683
: null,

0 commit comments

Comments
 (0)