46 lines
2.7 KiB
JavaScript
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(),
|
|
};
|
|
}
|