| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- # -*- coding: utf-8 -*-
- """P3-a 决策捕获: 人的裁决成为对象 (谁/何时/依据哪些对象/裁了什么), 事后结果回填.
- Palantir decision capture 的轻量版: 组织在自己的决策史上学习.
- 纪律: 只录**真实发生**的裁决 (用户原话/指令), 建议级未裁的标 pending_user, 禁把建议写成已批."""
- from src import paths as P
- import copy, json, pathlib
- from .store import Store
- ONT = P.ont()
- def capture(store, did, decided_by, when, decision, basis_ids=None, status='decided', note=''):
- """裁决入库; basis_ids = 依据的对象 (快照其当时关键态)."""
- snapshot = {}
- for b in (basis_ids or []):
- if b in store.objects:
- p = store.objects[b].get('props', {})
- snapshot[b] = {k: p[k] for k in ('level', 'status', 'name', 'review_tier') if k in p}
- store.put(dict(id=f'decision/{did}', type='Decision',
- props=dict(decided_by=decided_by, when=when, decision=decision,
- status=status, note=note, basis_snapshot=snapshot),
- links=dict(basedOn=list(basis_ids or []))))
- return f'decision/{did}'
- def close(store, decision_id, outcome, when):
- """事后结果回填 (决策闭环的另一半).
- F8: 走 force 通道 (回填=合法演进), when 由调用方显式传, 旧版本自动进 props.history."""
- o = copy.deepcopy(store.get(decision_id)) # 深拷贝: 就地改库内引用会让 F8 差异检测失效
- o['props']['outcome'] = outcome
- o['props']['outcome_when'] = when
- o['props']['status'] = 'closed'
- store.put(o, force=True, when=when)
- def seed_real_decisions():
- """录今天已真实发生的用户裁决 (原话为据); 排期沙盘=建议级挂 pending_user, 不冒充已批."""
- s = Store(ONT / 'objects.json')
- capture(s, 'user/20260827_ontology_six', '用户', '2026-08-27',
- '本体六问五裁: 天气窗=查公开记录 / Action边界=照可逆性三级 / 种子=29#全链 / '
- '离线分工=本体查询约束动作走结构化工具·qwen 30b-a3b 只做语义编排 / '
- '备件供给侧先不管·更换与备件成本找网上招标公开信息 (本体载体默认轻量自建)',
- basis_ids=['scenario/WTG29/repair_scheduling_v1'], note='原话见会话 2026-08-27/28')
- capture(s, 'user/20260828_phase_rollout', '用户', '2026-08-28',
- '阶段推进: windscada v3 整体规划批准执行 — P1 开跑(本体铺开) → P2 开跑(本体经MCP暴露给dsh) → P3 开(决策闭环+月度滚动)',
- note='三条独立指令合录; 每阶段验收判据见 docs/windscada_规划_v3.md')
- capture(s, 'pending/WTG29_repair_scenario_A', '待用户', '2026-08-28',
- '29# 修泵排期: 沙盘建议=情景A (2026-09 首个CTV窗), 建议级 L3 动作待人裁',
- basis_ids=['scenario/WTG29/repair_scheduling_v1', 'verdict/WTG29/TCM-16'],
- status='pending_user', note='禁把建议写成已批; 用户裁后 status→decided 并录原话')
- s.save()
- return s
|