guanghu-ice-heart/05-光之湖系统/光湖大脑容器/shuangyan-requirement.mjs

46 lines
2.7 KiB
JavaScript

// 脑内需求工单:记录霜砚提出的工程需要,不签发小船或现实执行权。
import crypto from 'node:crypto';
const sha = value => crypto.createHash('sha256').update(String(value)).digest('hex');
const text = (value, max) => typeof value === 'string' && value.trim() && value.length <= max &&
!/[\u0000-\u001f\u007f]/u.test(value) ? value.trim() : null;
const phrases = (value, limit, max) => Array.isArray(value) && value.length > 0 && value.length <= limit
? value.map(item => text(item, max)) : null;
export function parseRequirementDecision(raw) {
try {
const value = typeof raw === 'string'
? JSON.parse(raw.replace(/^```(?:json)?\s*/m, '').replace(/\s*```\s*$/m, '').trim())
: raw;
if (!['CREATE_REQUIREMENT', 'HOLD'].includes(value?.decision)) return null;
return value;
} catch { return null; }
}
export function requirementWorkorder({ state, origin, authorization, decision } = {}) {
if (decision?.decision !== 'CREATE_REQUIREMENT' ||
state?.brain_id !== 'GLW-2.0-BRAIN-SHUANGYAN-PERSONA-0001' ||
origin?.session_id !== authorization?.session_id || !origin?.event_id || !authorization?.event_id ||
origin.event_id === authorization.event_id || decision.executor_persona_id !== 'ICE-P-ZY001') return null;
const objective = text(decision.objective, 300);
const rationale = text(decision.rationale, 500);
const requested = phrases(decision.requested_capabilities, 8, 180);
const acceptance = phrases(decision.acceptance_criteria, 8, 180);
const evidence = decision.evidence_concept_ids;
if (!objective || !rationale || !requested?.every(Boolean) || !acceptance?.every(Boolean) ||
!Array.isArray(evidence) || !evidence.length || evidence.length > 12 ||
!evidence.every(id => typeof id === 'string' && state.concepts?.[id] && state.concepts[id].lifecycle !== 'PRUNED')) return null;
return {
schema: 'guanghu.shuangyan-requirement-workorder/v1',
order_id: `SHREQ-${sha(`${origin.event_id}:${authorization.event_id}`).slice(0, 24)}`,
workorder_kind: 'PERSONA_BRAIN_REQUIREMENT', state: 'PROPOSED_NOT_EXECUTED',
persona_id: 'ICE-P-SH0908', brain_id: state.brain_id, brain_revision: state.revision,
session_id: authorization.session_id, origin_event_id: origin.event_id,
authorization_event_id: authorization.event_id,
origin_source_sha256: origin.source_sha256, authorization_source_sha256: authorization.source_sha256,
objective, rationale, requested_capabilities: requested, acceptance_criteria: acceptance,
evidence_concept_ids: [...new Set(evidence)], proposed_executor_persona_id: 'ICE-P-ZY001',
scope_attestation: 'BRAIN_JUDGED_REQUIREMENT_NOT_EXECUTION',
reality_write_authority_granted: false, created_at: new Date().toISOString(),
};
}