edit | blame | history | raw

项目级声明式 Shared Content Publisher V1 实现交付

1. 事项与边界

  • task:TASK-AGRICULTURE-PESTICIDE-FERTILIZER-20260818-001
  • case / batch / run:ANA-AGRICULTURE-PESTICIDE-FERTILIZER-20260818-001 / BATCH-004 / RUN-ANA-AGRICULTURE-PESTICIDE-FERTILIZER-20260818-001-BATCH-004-001
  • implementation authority:HANDOFF-INFOADMIN-LAOYANCAI-AGRICULTURE-BATCH004-SHARED-PUBLISHER-CONSOLIDATED-SUCCESSOR-20260821-001
  • fixed review request:HANDOFF-DEV-LAOYAN-LAOSHEN-AGRICULTURE-BATCH004-SHARED-PUBLISHER-CONSOLIDATED-IMPLEMENTATION-REVIEW-20260821-001
  • owner / reviewer:dev.developer.ana.cai / dev.reviewer.ana.cai

本交付只实现项目级、版本化、声明式共享 publisher 及其生产形态隔离测试;没有生成真实 BATCH-004 config,没有创建 attempt、lock、receipt 或 ledger row,也没有调用生产 publisher。农业内容、candidate、current、promotion ledger、Repair007/Repair008 和失败历史均保持不变。

2. 实现对象

对象 bytes SHA-256
dev/ana-dev/shared_content_publisher/publisher.py 44329 99C90DC15603DCFA1CB695C3A573EE4AA88D9B2594E4FF46750D6E6503EEEC62
dev/ana-dev/shared_content_publisher/batch_config.schema.json 7078 73DECA1A7420E139692A2B0C91812C0CC90B78900816DCE36C6DD0B6DBBA0225
dev/ana-dev/shared_content_publisher/README.md 1382 8B0E525019E712A50CEE0698CA3F5AE371D3EAC1D6517D5E2EBE220300FBE701
dev/ana-dev/shared_content_publisher/__init__.py 168 9E83FAEF6958A15DE89A35691AEFA0860E881DAAB7E06378AABC0A693956CCFD
dev/ana-dev/shared_content_publisher/__main__.py 86 DC3EA832B1DE49CBBE2EF61241524DB0751C9AB48FA2D42A49D58E01DB80B773
dev/ana-dev/test/test_shared_content_publisher_v1.py 17414 3C56F448F22E4E6CB6FA7D22F866B14EB0603F16A6F5AF8BFFC9AA22E5A96E05

公共入口:

python -m shared_content_publisher --config <batch-config.json> --validate-only
python -m shared_content_publisher --config <batch-config.json>

生产和测试使用相同 schema、相同 validator 和相同 publisher 入口;没有 batch-specific wrapper、私有 reader 或内存替身。

3. 声明式配置与三项 blocker 闭环

3.1 单一配置来源

严格配置仅有六个顶层字段:schema_version / identity / roots / expected / commit / test_control。所有 task、case、batch、run、attempt、release、candidate set、根、卷、路径、ledger、prior、history、current state、candidate rows、link/evidence anchor 和提交目标均来自这一配置。缺失、额外、重复 key、类型错误、路径逃逸、reparse、对象类型或 identity 漂移均在 exclusive lock 之前失败关闭。

3.2 Blocker 1:attempt2 runtime 未冻结

publisher 源码和 schema 不含 ATTEMPT-B004-000001ATTEMPT-B004-000002、农业或 BATCH-004 字面量。attempt、reader checks、receipt、lock、snapshot、ledger/ref 和 target identity 都从 config 派生。因此下一真实 attempt 使用新的 config 即可,不再复制 batch-specific runtime。

3.3 Blocker 2:prior ledger 与 attempt sequence 不匹配

publisher 先校验 ledger 精确 bytes/SHA、固定 17 列表头、全局 event sequence 唯一性和 preserved prior terminal;再从真实 ledger 推导 next_event_seq 与同 task/case/batch/run 的 next_attempt_seq,并与 config 声明交叉验证。旧 8EED... ledger、sequence 1、bytes/SHA 漂移或 prior terminal 不一致均在首写前拒绝。

当前生产只读验证:promotion_ledger.csv=12716/ED2A83E2E6D1A695CF4DD24A79118B4DC99DAD75028B321D289114942F16B8BD;其 preserved attempt1 terminal 为 ROLLED_BACK。实际下一 event 从 16 开始,下一 attempt sequence 为 2;attempt ID 是独立声明字段,不从尾号猜测。

3.4 Blocker 3:AUDIT / HANDOFF binding 歧义

canonical_audit_idreview_handoff_id 是不同的必填字段、不同前缀域且禁止相等。release preimage 固定为 industry/task_id/case_id/batch_id/run_id/canonical_audit_id 六行 UTF-8 LF,只允许 canonical AUDIT 进入。review HANDOFF 只进入配置和 receipt 绑定,不进入 release hash。

生产冻结值按此公式独立得到 357 bytes/f39db200057f733df3d34ebc0387000d6af4a29d2a3e3ed787c20268b5fcace7;HANDOFF 替换会被 ID 域或 release preimage 门禁拒绝。

4. 发布与恢复合同

  1. 首写前完整验证 operation root/resolved root/volume、全部相对路径、普通非 reparse 目录和文件、lock/attempt/target/staging absence、ledger、prior exact-set、history exact-set、current state、candidate exact-set、candidate manifest、current manifest、链接/证据锚和 manifest-self candidate-set。
  2. Windows 文件由普通完整读取与独立流式 SHA-256 双实现复核;空文件、不可读、missing/extra/duplicate/reparse 或 hash 漂移失败关闭。Repair008 的 63/63、12 条 >=260 路径合同被同一实现复用。
  3. 首个正式写是 exclusive lock。随后形成完整 prior snapshot,把 candidate 全量复制并 readback 到同卷 staging release。
  4. staging 通过后只执行一次目录 rename,再原子 replace 唯一 current pointer;提交前 prior 始终可读,提交后 target exact-set 与 pointer 全量复算。
  5. postcommit 失败时只允许一次 pointer 回退并复核 prior pointer;不逐文件修补。已回滚 terminal 的重复调用失败关闭。
  6. 已提交且 terminal、pointer、target exact-set、lock absence 全部一致时,exact repeat 返回 IDEMPOTENT_COMMITTED 且 ledger 不变;任何 published drift 都拒绝。

实现没有 maintenance/no-current、lease、逐状态 fault matrix、batch-specific reader 或多审核阶段。

5. 生产形态隔离测试

  • Windows CPython compileall:PASS。
  • JSON schema strict parse:PASS。
  • unittest9/9 PASS,约 12 秒;累计 23 次同一 CLI 调用。
  • 正向:首写前 validate、完整 commit/readback、exact repeat 幂等。
  • rollback:注入 postcommit readback failure,只切回 prior 一次;rolled-back repeat mutation0。
  • ledger:bytes/SHA 漂移与 next event sequence 漂移。
  • identity:AUDIT/HANDOFF 互换、candidate-set 漂移、release preimage。
  • candidate:payload 漂移、current/candidate manifest binding、链接/证据锚缺失、attempt target 已存在。
  • history:63 个普通文件、其中 12 条绝对路径 >=260;长路径内容漂移被独立读取命中。
  • filesystem:root、volume、relative path、target exists、junction/reparse。
  • schema:missing、extra、type error。
  • terminal:published target 漂移时拒绝假幂等。

6. 正式现场只读证明

  • Repair008 R06 evidence:152316/8736ACD79B53F62CC6CFBC5CFAEBBB7BF0DF94D933A8E515C4482B0DC86E6315
  • CPython 对真实 failed attempt 独立逐文件流式复算:file_count=63long_path_count=12mismatch_count=0、positive bytes 63/63、uppercase SHA-256 63/63
  • failed attempt manifest 仍为 Windows PowerShell 5.1 目标身份:7480/F66093023D91793AF8C03A72F4CE001F915EA7E986AAD788FDB61F922946E767
  • canonical reader receipt:2874/9C4BBC12B5DCC6BB700DE98D4CDD3E91B2170CF4DD6DD1D4B9ACBD0342155202,仍为 RECOVERY_REQUIRED/BLOCKED/30,ledger latest=ROLLED_BACK,committed=0
  • 正式 current frozen identities仍为:cases 2701/B9B02A...36A4;core 51587/6EDC2D...EEE7;manifest 588/CAE3F8...D558;result current 459/3671D3...594E5;case result 3051/31CBD0...15B
  • ATTEMPT-B004-000002ATTEMPT-B004-000003 均不存在;active BATCH-004 lock 不存在;production publisher invocation=0;production mutation=0

7. 审核请求

请既有 dev.reviewer.ana.cai 在同一 consolidated review 中只判断:

  1. 三个 BLOCKED/3 是否由通用 config/ledger/audit contracts 一次关闭;
  2. publisher 是否不含行业/批次/attempt 硬编码;
  3. exact-set、manifest/link/evidence、同卷 atomic pointer、readback、一次 rollback 和 idempotence 是否非空;
  4. 长路径与生产只读 mutation0 证据是否成立。

请求一个正式 PASS/0 或一次列全的 HOLD/N。本交付不是 production invocation 或 promotion authority;审核 PASS 后由 project.admin 另行创建唯一真实 config 与新 attempt。

8. HOLD/3 聚焦 successor(2026-08-21)

8.1 唯一续派与复审拓扑

  • authority:HANDOFF-INFOADMIN-LAOYANCAI-AGRICULTURE-BATCH004-SHARED-PUBLISHER-HOLD3-FOCUSED-SUCCESSOR-20260821-001
  • predecessor audit:AUDIT-DEV-ANA-SHARED-CONTENT-PUBLISHER-V001-CONSOLIDATED-IMPLEMENTATION-001 / HOLD/3
  • fixed focused rereview:HANDOFF-DEV-LAOYAN-LAOSHEN-AGRICULTURE-BATCH004-SHARED-PUBLISHER-HOLD3-FOCUSED-REREVIEW-20260821-001
  • owner/reviewer tasks 保持原值;没有第二个修复事项、第二条 review chain 或新 authority。

8.2 三项 blocker 的单补丁闭环

  1. BLOCK-SHARED-PUBLISHER-IMPL-01:删除不可执行的 JSON pointer 合同。SHARED_CONTENT_PUBLISHER_CONFIG_V2 的唯一用户入口提交点固定为既有 cases Markdown 当前成果索引.md;候选 release 目录先完成,最后使用同卷原子 replace 切换 cases Markdown。result Markdown 只读校验为指向 cases 的薄入口,不迁移消费者。
  2. BLOCK-SHARED-PUBLISHER-IMPL-02:从卷根到 operation root 逐组件验证普通、非 reparse、非 alias;managed path graph 除 release-store/target、receipt/snapshot 两个明确父子关系外全部 case-insensitive disjoint。exclusive lock 成功后、任何 ledger append 前完整重读 config、ledger/current、prior manifest+self、candidate manifest/exact-set、link/evidence、history/current-state,并重新推导 event/attempt sequence。新事件使用真实 UTC 和 PID+UUID 进程实例身份;prior release-set 固定为 current-manifest bytes + canonical self descriptor 算法。
  3. BLOCK-SHARED-PUBLISHER-IMPL-03:candidate current manifest 必须精确覆盖全部发布成员和 invariant result entry,manifest self formal path 必须等于实际 release member;link/evidence checks 均非空。首次 postcommit 和 replay 都验证 target exact-set、拒绝 extra。幂等成功绑定 config bytes/hash、root/volume、完整 terminal、完整 event chain、Markdown current/result、prior snapshot、target exact-set 和 lock absence;已切换但闭环漂移时先恢复 prior Markdown,再写独立 recovery terminal,保留原 terminal 不删除。

8.3 successor 精确对象

对象 bytes SHA-256
dev/ana-dev/shared_content_publisher/publisher.py 73014 EC5C6F547AEEEC8AF4D3B84B831FBDE8E379603AFD1129FBA592937C91B58907
dev/ana-dev/shared_content_publisher/batch_config.schema.json 10430 9B027ED5AE2BF2B9FC50D491FA4AA3FEFA787DE80C3A6F0236555D3BC3266198
dev/ana-dev/shared_content_publisher/README.md 1889 CCA9F7B87E369227C7BD6E4624C06E6B1022F94EF6F609B75FC67E3AF201BCAD
dev/ana-dev/shared_content_publisher/__init__.py 168 CAEAB945F11B8C5DA0520C5132C37F013EA5F9EFB4A20655083B956E340B376B
dev/ana-dev/shared_content_publisher/__main__.py 86 DC3EA832B1DE49CBBE2EF61241524DB0751C9AB48FA2D42A49D58E01DB80B773
dev/ana-dev/test/test_shared_content_publisher_v1.py 28616 6ADAADF06E60D20DFA590461EEE73316A85525726A4A898740CAB3EDF6142077
dev-doc/ana-doc/开发方案/SHARED-CONTENT-PUBLISHER-PRODUCTION-GUARD-V001.json 2212 DEFB9E6987A73AFD918C7F4A40C5FD08920B3478788F7A276BF9DE20F46F17A0

8.4 最终生产形态矩阵

  • bundled CPython compileall=PASS;schema/guard strict JSON=PASS;UTF-8 no BOM/NUL/CR=PASS
  • 同一公共 CLI、同一 V2 config schema 的 unittest=14/14 PASS,最终耗时约 17.8 秒。
  • 正向覆盖:实际相对目录拓扑、Markdown prior/current、invariant result thin entry、validate、单次 commit、完整 readback、strict idempotent replay。
  • 负向覆盖:一次 rollback、junction ancestor、path overlap、持锁 ledger race、duplicate event sequence、prior release-set、manifest member omission、empty link/evidence、首次 extra target、replay extra target、invalid config replay、terminal parse/field drift、candidate/history/long-path/root/schema/AUDIT-HANDOFF 漂移。
  • reviewer 复现的四个攻击全部成为固定回归:manifest omission、empty checks、extra target file、invalid config replay;均不能返回假 COMMITTED/IDEMPOTENT_COMMITTED

8.5 正式现场 mutation0 守卫

测试 test_00_production_guard_precedes_isolated_mutation 在任何临时 fixture 创建之前核对 7 个冻结正式对象和 3 个 absent path。最终复核:file_mismatch=0unexpected_present=0、production publisher invocation=0、formal mutation=0

  • cases current=2701/B9B02AF2F8899A3670CF4C6A463374A7A556E7FA26E3E953468B2129B20636A4
  • core=51587/6EDC2D5FF6140C9CAC572D249C5CDFDCBD3C7C2FBED91BAB459DD27A406EEEE7
  • current manifest=588/CAE3F83F1591F4D8D0ECD7E452DFDE1977958C1B1C4633E4225396615DD7D558
  • ledger=12716/ED2A83E2E6D1A695CF4DD24A79118B4DC99DAD75028B321D289114942F16B8BD
  • result current=459/3671D3BD13D1AD84E046895E5C3DAE2D43D491472B747A16FD24A9E2270594E5
  • case result=3051/31CBD04BAB1AF28020E836347342FE3281EBE8C24CB8E7C362F12E70772B015B
  • canonical current state=2874/9C4BBC12B5DCC6BB700DE98D4CDD3E91B2170CF4DD6DD1D4B9ACBD0342155202,仍为 RECOVERY_REQUIRED/BLOCKED/30
  • active lock、ATTEMPT-B004-000002ATTEMPT-B004-000003 均 absent。

8.6 聚焦复审请求

请原 dev.reviewer.ana.cai 只复审上述 HOLD/3 successor,并返回唯一 PASS/0 或完整 HOLD/N。本 successor 没有生成真实 batch config,没有调用 production publisher,不是 promotion authority。只有正式 reviewer PASS/0 后,project.admin 才可机械生成全新的 ATTEMPT-B004-000003 config 并另行执行。

9. 事件链治理 successor(2026-08-21)

9.1 授权与唯一范围

  • authority:HANDOFF-INFOADMIN-LAOYANCAI-AGRICULTURE-BATCH004-SHARED-PUBLISHER-EVENT-CHAIN-GOVERNANCE-SUCCESSOR-20260821-001
  • predecessor:AUDIT-DEV-ANA-SHARED-CONTENT-PUBLISHER-V001-HOLD3-FOCUSED-REREVIEW-001 / HOLD/1
  • fixed consolidated review:HANDOFF-DEV-LAOYAN-LAOSHEN-AGRICULTURE-BATCH004-SHARED-PUBLISHER-EVENT-CHAIN-CONSOLIDATED-IMPLEMENTATION-REVIEW-20260821-001
  • 本 successor 只关闭 BLOCK-SHARED-PUBLISHER-IMPL-03 剩余的事件链真值缺口;不重开已关闭的 Markdown consumer、prewrite root/path/lock/snapshot、manifest/link/evidence/postcommit 或 Repair008 长路径范围。

9.2 单一完整验证器

  1. 新增唯一 _validate_attempt_event_chain,按 ledger 原始追加后缀顺序逐行绑定全部 17 列,而非按 attempt 过滤后遗漏被篡改行。
  2. 每一状态的 receipt 是确定函数:PREPARED/VERIFIED -> prior_snapshot.jsonCOMMITTING/COMMITTED -> terminal.jsonROLLING_BACK/ROLLED_BACK -> 当前 rollback/recovery terminal
  3. event_time 只接受 canonical UTC microseconds+Z,并严格递增;写入端在时钟分辨率不足时单调推进 1 微秒。
  4. SHARED_CONTENT_PUBLISHER_ATTEMPT_EVENT_CHAIN_V1columns + 逐行17列 的 canonical JSON 计算 SHA-256。终态 V3 持久化 digest、row count、起止 UTC 和逐状态 process identity。
  5. 正常 COMMITTED、正常 rollback、replay/idempotent 与 invalid-replay recovery 均调用同一个完整验证器。恢复链允许原提交进程与恢复进程不同,但逐状态进程身份精确持久化;无法验证完整链时 exit 27 fail closed,不返回幂等成功或猜测回滚。

9.3 生产形态篡改矩阵

  • 最终 unittest=16/16 PASS;其中 17 个 ledger 字段逐列篡改=17/17 全部失败关闭,IDEMPOTENT_COMMITTED=0
  • 四个成功状态的 receipt 逐状态篡改=4/4 失败关闭;四个成功状态的 UTC 逐状态篡改=4/4 失败关闭。
  • 正常提交的 event-chain digest 由测试独立 canonical 实现复算一致;普通 rollback 5 行、recovery rollback 6 行的 digest、row count 与逐阶段 process identity 均独立复算一致。
  • 原 14 项生产形态矩阵全部保留:Markdown commit/replay、一次 rollback、锁后 ledger race、junction/path overlap、manifest/link/evidence/target、terminal、config、history 63/63 与 long-path 12/12、AUDIT/HANDOFF 域无回退。

9.4 精确实现对象

对象 bytes SHA-256
dev/ana-dev/shared_content_publisher/publisher.py 81140 4027788031136F94D6D2E3B8FEE53D6A65E0C362BEF8CCC713C175FA615CCF2C
dev/ana-dev/shared_content_publisher/batch_config.schema.json 10430 9B027ED5AE2BF2B9FC50D491FA4AA3FEFA787DE80C3A6F0236555D3BC3266198
dev/ana-dev/shared_content_publisher/README.md 2252 F101EB043C566A0B76757543D4F96FE16E7E67834EDCFA636827223C6C3A32BF
dev/ana-dev/shared_content_publisher/__init__.py 168 FBA9552CBA028AD9B9212C7EFB701FE4E6CB5E31EBAA68AE23CF9E3156C4E7AC
dev/ana-dev/shared_content_publisher/__main__.py 86 DC3EA832B1DE49CBBE2EF61241524DB0751C9AB48FA2D42A49D58E01DB80B773
dev/ana-dev/test/test_shared_content_publisher_v1.py 33766 AC196135306F8AC67AF25CBF58D5D7E49AF2BE13269FE627F470E30D71842329
dev-doc/ana-doc/开发方案/SHARED-CONTENT-PUBLISHER-PRODUCTION-GUARD-V001.json 2212 DEFB9E6987A73AFD918C7F4A40C5FD08920B3478788F7A276BF9DE20F46F17A0

配置 schema 保持 V2 且无字段漂移;终态 schema 升级为 SHARED_CONTENT_PUBLISHER_TERMINAL_V3。管理员机械生成配方见 SHARED-CONTENT-PUBLISHER-ATTEMPT-B004-000003-CONFIG-RECIPE-V001.md;该文档不是生产 config。

9.5 生产零状态

production guard 最终仍要求 7 个冻结文件 exact、active lock/ATTEMPT-000002/ATTEMPT-000003 三路径 absent;实现和测试期间 production publisher invocation/mutation/config=0/0/0,canonical current 保持 RECOVERY_REQUIRED/BLOCKED/30

10. DIRECT_STABLE_PATH_SET_V1 生产拓扑 successor(2026-08-21)

10.1 授权与兼容边界

  • authority:HANDOFF-INFOADMIN-LAOYANCAI-AGRICULTURE-BATCH004-SHARED-PUBLISHER-DIRECT-STABLE-PATH-SET-GOVERNANCE-SUCCESSOR-20260821-001
  • fixed consolidated review:HANDOFF-DEV-LAOYAN-LAOSHEN-AGRICULTURE-BATCH004-SHARED-PUBLISHER-DIRECT-STABLE-PATH-SET-CONSOLIDATED-IMPLEMENTATION-REVIEW-20260821-001
  • 新增 SHARED_CONTENT_PUBLISHER_CONFIG_V3 / DIRECT_STABLE_PATH_SET_V1,与既有 V2 release-directory strategy 并列;publisher.run_config 仅按 schema+strategy 严格分派,V2 的 16 项回归不变。
  • 不迁移或重写已接受 candidate manifest、10 个 formal_relative_path、current manifest、release-set、正文、证据或结论;新策略把 10 行 formal path 直接解释为稳定目的地。

10.2 事务实现

  1. 只允许目的地位于 ana-data/cases/<industry>/核心文档/ana-data/cases/<industry>/manifest/ana-data/result/<industry>/;cases 当前成果索引.md 是唯一 activation 例外且必须恰好一行。路径逃逸、duplicate/overlap/alias、reparse ancestor/target、卷漂移、受保护路径重叠与未声明目标均在首写前失败关闭。
  2. candidate 10 行 exact-set、candidate/current manifests、manifest self、release-set、非空 link/evidence、prior current manifest、自包含 prior release-set、history/current state、ledger 及 destination prior present/absent 逐项绑定。
  3. exclusive lock 后、首个 ledger append 前再次读取 config/candidate/prior/history/ledger/root/volume/完整 destination set,并重新推导唯一 event/attempt sequence。
  4. 在同卷 fresh staging root 复制完整 candidate set并 readback;对全部 10 个目的地冻结 present/absent prior snapshot。提交顺序为 core payload,随后 manifests/thin results,最后 CASES-CURRENT-INDEX,从不撤下既有 current。
  5. 任一提交边界失败最多一次逆序 rollback:恢复原有成员、删除本 attempt 新建成员、最后完整复核 prior set;未知真值返回 RECOVERY_REQUIRED。postcommit/replay/recovery 共用 accepted 17-column event-chain validator,并拒绝 destination extra 或终态/config/chain 漂移。
  6. release 六行规范预像沿用正式历史标签 accepted_audit_id=<identity.canonical_audit_id value>;正式 B004 预像独立复算为 357 bytes/f39db200057f733df3d34ebc0387000d6af4a29d2a3e3ed787c20268b5fcace7review_handoff_id 仍是独立 HANDOFF 域且不进入 release hash。

10.3 生产形态矩阵

  • direct strategy unittest=12/12 PASS / 35.917s;legacy V2 regression=16/16 PASS / 52.622s;compileall=PASS
  • exact accepted B004 topology=10/10 rows:core、manifest、result 分布于既有稳定根,5 present + 5 absent,单次提交、activation position 10 与 exact replay 全部通过。
  • failure injection=17/17:通用 mixed fixture 7 个边界 + exact accepted topology 10 个边界;含 activation 前后,全部恢复 exact prior。
  • 负例覆盖 traversal、duplicate/overlap、protected overlap、undeclared root、volume drift、junction ancestor、candidate/target/ledger race、staging extra、replay target/extra/terminal drift;均不能产生假 COMMITTED/IDEMPOTENT_COMMITTED
  • strict schema/guard JSON=PASSmbx validate --project project-info --governance=OK/projects1/warnings0

10.4 精确交付对象

对象 bytes SHA-256
dev/ana-dev/shared_content_publisher/publisher.py 81967 8FD893395F37541BD5342AF8775009044AC69C34DD50EA66F3020BA836DF8899
dev/ana-dev/shared_content_publisher/direct_stable_path.py 64394 D6C6B25026F4F7352F002B79E5E6D575A9B2BDF5BF75388FADF375D702EBCED5
dev/ana-dev/shared_content_publisher/batch_config.direct_stable_path_set.schema.json 11484 36453344CEC226DCD2BF2A196CC8F053E01FF40E416B7CB25F9FE2FF1F86EFD0
dev/ana-dev/shared_content_publisher/README.md 3808 EB171255EC4E28967B5F42305EE4047F93477FC9467B20DD0072376704494F81
dev/ana-dev/test/test_shared_content_publisher_direct_stable_path_v1.py 41861 BEA0258F5B14203B8FF3F97DABAFCB88C7D8E9C78830F9E76969F6DAE7BB008B
dev-doc/ana-doc/开发方案/SHARED-CONTENT-PUBLISHER-ATTEMPT-B004-000003-DIRECT-STABLE-PATH-CONFIG-RECIPE-V002.md 9911 FC0B2EE3C0847F4A19ADA3778B4366C7497E731E8D37FC207F0BAA5A87C029B3
dev-doc/ana-doc/开发方案/SHARED-CONTENT-PUBLISHER-DIRECT-STABLE-PATH-PRODUCTION-GUARD-V001.json 2953 E42D377FF31AF146B248612DEFD24C4E9BDA1711D0200FBBF614323B0E6B7306
dev-doc/ana-doc/开发方案/SHARED-CONTENT-PUBLISHER-DIRECT-STABLE-PATH-TEST-EVIDENCE-V001.json 2755 7624D9CAB83571D74A712C3877CA3CB9B8E5274BD89F8B5E5D8D92E699964AB6

10.5 production-zero 与审核边界

最终 readback:正式 7 个冻结文件 7/7 exact;accepted candidate manifests 2/2 exact;active lock 与 ATTEMPT-B004-000003 2/2 absent;production config/publisher invocation/formal mutation=0/0/0;canonical current 保持 RECOVERY_REQUIRED/BLOCKED/30。本交付不创建真实 config、不执行 publisher 或 promotion。只有固定 reviewer 返回正式 PASS/0 后,project.admin 才可按 V002 配方机械生成唯一真实 config 并另行调用。

11. DIRECT stable HOLD/2 合并闭环 successor(2026-08-21)

11.1 唯一范围

  • authority:HANDOFF-INFOADMIN-LAOYANCAI-AGRICULTURE-BATCH004-DIRECT-STABLE-PATH-SET-HOLD2-CONSOLIDATED-CLOSURE-20260821-001
  • fixed focused rereview:HANDOFF-DEV-LAOYAN-LAOSHEN-AGRICULTURE-BATCH004-DIRECT-STABLE-PATH-SET-HOLD2-CONSOLIDATED-CLOSURE-FOCUSED-REREVIEW-20260821-001
  • 一次关闭 DIRECT-01 混合 current 可见性与 DIRECT-02 前目的地失败/同 config 重跑两个 blocker;保留 V3 strategy、既有 candidate/formal path/release-set、事件链与 Repair008 合同。

11.2 Cooperative authoritative reader

  1. 新增公共 read_direct_current_snapshot() 和 CLI --read-direct-current。读前要求 publisher lock absent,并冻结 cases current index/current manifest 两个身份;在同一观察窗口内读取并校验全部 10 个 stable target;读后再次要求 lock absent 且双身份不变。
  2. lock present(包括 10 个逐文件提交边界)只返回 RETRY_PUBLISH_IN_PROGRESS;身份、exact-set 或 receipt 闭环漂移只返回 STOP_NOT_CURRENT。失败结果不携带 payload,也不设置 current announced/cache 标记。
  3. Python helper 只在完整双读闭环成功后返回同一窗口内冻结的完整 bytes snapshot;CLI 只返回身份摘要。raw manual filesystem read 不具 authoritative current 语义。

11.3 Durable-prefix 恢复状态机

  1. 完整 prior snapshot+receipt 后的空事件前缀、PREPAREDVERIFIEDCOMMITTING 后首个目的地前,以及 10 个提交边界均进入同一恢复验证器。
  2. 同 config 新进程先重验 config、commit plan、snapshot receipt、prior-state exact-set、staging subset/identity、全部目的地 prior/candidate truth 和已有 17 列 event chain;只有完整可判真前缀才执行一次逆序 prior 恢复。
  3. 恢复终态严格保存完整事件链、进程身份和被取代 terminal 身份;下一次相同调用返回 IDEMPOTENT_ROLLED_BACK,不再因已有 receipt 返回 TERMINAL_REPEAT_BLOCKED
  4. snapshot、receipt、staging、ledger 或任一目的地被篡改时均 exit nonzero fail closed,既不返回 candidate current,也不猜测回滚。

11.4 最终矩阵与生产零状态

  • direct suite=16/16 PASS;legacy V2=16/16 PASS;compileall=PASS
  • authoritative observer=10/10 提交边界只见 retry,mixed-current return=0;闭合后 full snapshot=10/10 members
  • process restart recovery=14/14(snapshot、PREPARED、VERIFIED、首写前、10 个 commit boundaries);same-config recovery=14/14,strict idempotent rollback=14/14
  • boundary tamper=14/14 fail closed;原 root/path/reparse/volume/manifest/event-chain/Repair008 回归无退化。
  • production guard=7/7 formal exact + 2/2 candidate exact + 2/2 absent;config/invocation/formal mutation=0/0/0;canonical current 仍为 RECOVERY_REQUIRED/BLOCKED/30
  • machine evidence:SHARED-CONTENT-PUBLISHER-DIRECT-STABLE-PATH-HOLD2-CLOSURE-TEST-EVIDENCE-V002.json。本节不创建真实 config、ATTEMPT-B004-000003 或 production invocation。

11.5 冻结实现身份

对象 bytes SHA-256
dev/ana-dev/shared_content_publisher/publisher.py 82381 3E77BAB80424BC97787F43BD78F61A53DE9EAB1435D730AC4D3F9FCB866F219D
dev/ana-dev/shared_content_publisher/direct_stable_path.py 76097 170159962816EA012FA3913240A48B9ED759A0B7E5926DEE1D334434A08DFDF1
dev/ana-dev/shared_content_publisher/authoritative_reader.py 7021 98288BABB7F91832156BB8B2805D574E275C7C88A196398878D619D1BB7A9620
dev/ana-dev/shared_content_publisher/batch_config.direct_stable_path_set.schema.json 11696 6AD035F81F2F38FB2E818E72C48F51185842A030EEA841B5754A2002D98CBD80
dev/ana-dev/shared_content_publisher/README.md 4741 1DED1BDA09A2FC55E0E9816AC48DBF8FAB4F65DF354CB9A908DA3B912E0D06E0
dev/ana-dev/shared_content_publisher/__init__.py 307 A14DF6A6AEFAF65FDEC164888C513E5410C4550652F8104372089FEDAA81C39C
dev/ana-dev/shared_content_publisher/__main__.py 86 DC3EA832B1DE49CBBE2EF61241524DB0751C9AB48FA2D42A49D58E01DB80B773
dev/ana-dev/test/test_shared_content_publisher_direct_stable_path_v1.py 51117 8794F7AC4D048429A75FF4C8D144F2970E6D40EEF8DAE9C1F7F7412C6CDD9F8D
dev/ana-dev/test/test_shared_content_publisher_v1.py 33766 AC196135306F8AC67AF25CBF58D5D7E49AF2BE13269FE627F470E30D71842329
ana-doc/案例分析规范.md 78369 877A91F9E1B372E9058CAA3D67A1E9CD548BC3519F285061BF1C1D2A1BEEB78B
ana-doc/案例存储体系.md 40808 9A29ACB2867925D4938C6923E7EDEF3441B09349B06236B5976448B414651D1C
dev-doc/ana-doc/开发方案/SHARED-CONTENT-PUBLISHER-DIRECT-STABLE-PATH-HOLD2-CLOSURE-TEST-EVIDENCE-V002.json 1085 C5FFC2C2625CBC8FDB92AE104584E73D86DA8B9F44B04BA91023F49E6B98FF12

12. Pre-anchor recovery 单 blocker successor(2026-08-21)

12.1 范围与实现

  • authority:HANDOFF-INFOADMIN-LAOYANCAI-AGRICULTURE-BATCH004-PREANCHOR-RECOVERY-SINGLE-BLOCKER-SUCCESSOR-20260821-001;只关闭 BLOCK-SHARED-PUBLISHER-DIRECT-02_PREDESTINATION_FAILURE_AND_RERUN_NOT_CLOSED,不重开 cooperative reader、10/10 observer、已完成 14/14 recovery/idempotence/tamper、17 列事件链或 Repair008。
  • attempt_receipt_root 不再作为逐文件构造目录。完整 prior snapshot、commit plan、确定性 attempt contract 与 canonical recovery-anchor manifest 先写入由 task/case/batch/run/config 身份唯一推导的同卷私有 preparation root。
  • 每个 preparation member 使用私有临时文件 CreateNew,完成写入、fsync、close、完整回读后,再以 no-overwrite 原子改名成为 private member;全部成员和 manifest 复验成功后,紧邻原子发布再次重校验完整 locked preimage,整目录再以一次 no-overwrite 原子 rename 发布为 official recovery anchor。
  • 原子目录发布前,ledger/event/formal destination 均不允许写入。相同 config 重启只在 official anchor 缺失、formal exact prior、scope/ledger/root 仍精确且 preparation 文件集可证明属于本 attempt 时退役残片并重建;finalized member、unexpected member、official+preparation 双重存在或 official anchor 漂移统一返回显式 RECOVERY_REQUIRED,不盲删。
  • official anchor 成功发布后立即成为恢复所有权边界;其后的 interrupt/I/O 失败沿既有 durable state machine 精确 rollback 或同配置恢复。生产 fault 仍必须为 NONE

12.2 生产形态验收

  • pre-anchor 成员数=9,每成员覆盖写前、写中、flush/close 后、回读后、member rename 后五个边界;anchor publish 另覆盖 rename 前、系统调用中与成功后三个边界,合计每种 fault=48
  • DIRECT_INTERRUPT_PREANCHORDIRECT_IO_ERROR_PREANCHOR 两类故障共 96/96:原子发布前均保持 official anchor absent、formal mutation0,并由同配置重启确定性重建/提交;原子发布后则消费 exact official anchor 并精确 rollback/幂等。
  • preparation finalized-member tamper、unexpected member 与 official anchor manifest tamper=3/3 RECOVERY_REQUIRED,formal destination 保持 prior、lock absent。
  • 完整回归:direct=18/18 PASS、legacy V2=16/16 PASS,总计=34/34 PASS / 364.337s;compileall=PASS。旧 observer、event-chain、manifest/postcommit、root/path/reparse/volume、rollback 与 Repair008 无回退。
  • production guard 仍为正式文件 exact、active lock/ATTEMPT-B004-000003 absent;生产 config/publisher/formal mutation=0/0/0;canonical current=RECOVERY_REQUIRED/BLOCKED/30

12.3 冻结对象

对象 bytes SHA-256
dev/ana-dev/shared_content_publisher/publisher.py 82381 3E77BAB80424BC97787F43BD78F61A53DE9EAB1435D730AC4D3F9FCB866F219D
dev/ana-dev/shared_content_publisher/direct_stable_path.py 91610 173760DDE8C5ABF8623014B5942A03293FAAD5F11CA8E00A7D2BA560BDEC0F14
dev/ana-dev/shared_content_publisher/authoritative_reader.py 7021 98288BABB7F91832156BB8B2805D574E275C7C88A196398878D619D1BB7A9620
dev/ana-dev/shared_content_publisher/batch_config.direct_stable_path_set.schema.json 11755 4BDAC4B5EE4D4777FC47DC9A386899B4AD6F73D1C52185AEB4CDBA48EF6FD739
dev/ana-dev/shared_content_publisher/README.md 5290 06C8C2FD676A1C979F47ABC7D686CFFDACCDBFFC8AB9BC1C84DF4317B55622AC
dev/ana-dev/test/test_shared_content_publisher_direct_stable_path_v1.py 56293 45B1F0CF76C169169900DC02167F95F653F7E8B0DF9276D72B955F7C6FD015C0
dev/ana-dev/test/test_shared_content_publisher_v1.py 33766 AC196135306F8AC67AF25CBF58D5D7E49AF2BE13269FE627F470E30D71842329
dev-doc/ana-doc/开发方案/SHARED-CONTENT-PUBLISHER-PREANCHOR-RECOVERY-TEST-EVIDENCE-V003.json 902 48629E9817831EC7E4D86BC812797DB30DAEB7492023B2C3262FBAFDFE733AAA

本实现未创建 production config、未调用 production publisher、未创建 ATTEMPT-B004-000003,也未修改农业 candidate、正文、结论、正式 current 或 ledger。只有固定 focused reviewer 的 PASS/0 才允许 project.admin 进入后续机械生产步骤。