create-principles-disciple 1.145.25 → 1.145.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_release/product-identity.json +1 -1
- package/console/dist/server/config/pd-config-store.d.ts +1 -0
- package/console/dist/server/config/pd-config-store.js +28 -6
- package/console/dist/server/models/RuleCandidateBindingConsoleModel.d.ts +26 -0
- package/console/dist/server/models/RuleCandidateBindingConsoleModel.js +309 -19
- package/console/dist/server/routes/config.js +7 -3
- package/console/dist/server/routes/rule-candidate-bindings.js +26 -1
- package/console/dist/shared/rule-candidate-binding-contract.d.ts +93 -8
- package/console/dist/shared/rule-candidate-binding-contract.js +4 -0
- package/console/dist/ui/api.d.ts +28 -0
- package/console/dist/ui/api.js +13 -1
- package/console/dist/ui/i18n/en.json +93 -25
- package/console/dist/ui/i18n/zh-CN.json +79 -11
- package/console/dist/ui/pages/control-center/RuntimeProfileManager.js +32 -67
- package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.d.ts +29 -0
- package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.js +229 -3
- package/console/dist/ui/utils/rule-binding-validators.d.ts +5 -0
- package/console/dist/ui/utils/rule-binding-validators.js +149 -7
- package/console/dist/web/assets/app.css +6 -0
- package/console/dist/web/assets/app.js +32 -32
- package/core/dist/runtime-v2/adapter/index.d.ts +0 -2
- package/core/dist/runtime-v2/adapter/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/adapter/index.js +0 -1
- package/core/dist/runtime-v2/adapter/index.js.map +1 -1
- package/core/dist/runtime-v2/adapter/output-schema-registry.d.ts +3 -3
- package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.d.ts.map +1 -1
- package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js +1 -2
- package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js.map +1 -1
- package/core/dist/runtime-v2/cli/probe.d.ts +4 -15
- package/core/dist/runtime-v2/cli/probe.d.ts.map +1 -1
- package/core/dist/runtime-v2/cli/probe.js +24 -44
- package/core/dist/runtime-v2/cli/probe.js.map +1 -1
- package/core/dist/runtime-v2/config/index.d.ts +1 -1
- package/core/dist/runtime-v2/config/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/config/index.js.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-agent-binding.d.ts +10 -17
- package/core/dist/runtime-v2/config/pd-config-agent-binding.d.ts.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-agent-binding.js +23 -27
- package/core/dist/runtime-v2/config/pd-config-agent-binding.js.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-defaults.d.ts +3 -5
- package/core/dist/runtime-v2/config/pd-config-defaults.d.ts.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-defaults.js +17 -20
- package/core/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-effective.d.ts.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-effective.js +4 -1
- package/core/dist/runtime-v2/config/pd-config-effective.js.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-redaction.d.ts.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-redaction.js +4 -7
- package/core/dist/runtime-v2/config/pd-config-redaction.js.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-types.d.ts +5 -1
- package/core/dist/runtime-v2/config/pd-config-types.d.ts.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-types.js +6 -0
- package/core/dist/runtime-v2/config/pd-config-types.js.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-validate.d.ts.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-validate.js +6 -0
- package/core/dist/runtime-v2/config/pd-config-validate.js.map +1 -1
- package/core/dist/runtime-v2/golden-trace.d.ts.map +1 -1
- package/core/dist/runtime-v2/golden-trace.js +8 -1
- package/core/dist/runtime-v2/golden-trace.js.map +1 -1
- package/core/dist/runtime-v2/index.d.ts +4 -4
- package/core/dist/runtime-v2/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/index.js +2 -3
- package/core/dist/runtime-v2/index.js.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-intent-preflight.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-intent-preflight.js +26 -95
- package/core/dist/runtime-v2/internalization/artificer-intent-preflight.js.map +1 -1
- package/core/dist/runtime-v2/internalization/bash-risk.d.ts +32 -0
- package/core/dist/runtime-v2/internalization/bash-risk.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/bash-risk.js +785 -0
- package/core/dist/runtime-v2/internalization/bash-risk.js.map +1 -0
- package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts +25 -2
- package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.js +177 -14
- package/core/dist/runtime-v2/internalization/evaluator-prompt-builder.js.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-runner.js +14 -2
- package/core/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/internalization-orchestrator.d.ts +47 -0
- package/core/dist/runtime-v2/internalization/internalization-orchestrator.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/internalization-orchestrator.js +164 -3
- package/core/dist/runtime-v2/internalization/internalization-orchestrator.js.map +1 -1
- package/core/dist/runtime-v2/internalization/peer-runner-contracts.d.ts +9 -1
- package/core/dist/runtime-v2/internalization/peer-runner-contracts.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/peer-runner-contracts.js.map +1 -1
- package/core/dist/runtime-v2/internalization/pitask-metadata.d.ts +39 -0
- package/core/dist/runtime-v2/internalization/pitask-metadata.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/pitask-metadata.js +59 -0
- package/core/dist/runtime-v2/internalization/pitask-metadata.js.map +1 -1
- package/core/dist/runtime-v2/internalization/rule-source-correction.d.ts +60 -0
- package/core/dist/runtime-v2/internalization/rule-source-correction.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/rule-source-correction.js +214 -0
- package/core/dist/runtime-v2/internalization/rule-source-correction.js.map +1 -0
- package/core/dist/runtime-v2/internalization/rulecode-verification-obligations.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/rulecode-verification-obligations.js +65 -0
- package/core/dist/runtime-v2/internalization/rulecode-verification-obligations.js.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-output.d.ts +14 -2
- package/core/dist/runtime-v2/internalization/scribe-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-output.js +57 -2
- package/core/dist/runtime-v2/internalization/scribe-output.js.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts +13 -1
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js +15 -3
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-runner.d.ts +34 -0
- package/core/dist/runtime-v2/internalization/scribe-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-runner.js +128 -4
- package/core/dist/runtime-v2/internalization/scribe-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/textual-basis-anchor.d.ts +72 -0
- package/core/dist/runtime-v2/internalization/textual-basis-anchor.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/textual-basis-anchor.js +100 -0
- package/core/dist/runtime-v2/internalization/textual-basis-anchor.js.map +1 -0
- package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts +9 -7
- package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-signal-runtime-factory.js +59 -121
- package/core/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
- package/core/dist/runtime-v2/runtime-protocol.d.ts +2 -3
- package/core/dist/runtime-v2/runtime-protocol.d.ts.map +1 -1
- package/core/dist/runtime-v2/runtime-protocol.js +15 -10
- package/core/dist/runtime-v2/runtime-protocol.js.map +1 -1
- package/core/dist/runtime-v2/store/lifecycle/lease-manager.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/lifecycle/lease-manager.js +11 -2
- package/core/dist/runtime-v2/store/lifecycle/lease-manager.js.map +1 -1
- package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.d.ts.map +1 -1
- package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.js +26 -0
- package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.js.map +1 -1
- package/core/dist/telemetry-event.d.ts +2 -2
- package/core/dist/telemetry-event.d.ts.map +1 -1
- package/core/dist/telemetry-event.js +5 -0
- package/core/dist/telemetry-event.js.map +1 -1
- package/core/dist/workflow-funnel-loader.d.ts +0 -2
- package/core/dist/workflow-funnel-loader.d.ts.map +1 -1
- package/core/dist/workflow-funnel-loader.js.map +1 -1
- package/core/package.json +5 -1
- package/dist/mvp-config.d.ts.map +1 -1
- package/dist/mvp-config.js +8 -10
- package/dist/mvp-config.js.map +1 -1
- package/host-runtime/dist/internalization-consumer-cycle.js +4 -7
- package/host-runtime/dist/production-rulehost-gate.js +11 -1
- package/host-runtime/package.json +1 -1
- package/package.json +2 -2
- package/pd-cli/dist/commands/diagnose.d.ts +0 -3
- package/pd-cli/dist/commands/diagnose.d.ts.map +1 -1
- package/pd-cli/dist/commands/diagnose.js +20 -57
- package/pd-cli/dist/commands/diagnose.js.map +1 -1
- package/pd-cli/dist/commands/pain-retry.d.ts +0 -3
- package/pd-cli/dist/commands/pain-retry.d.ts.map +1 -1
- package/pd-cli/dist/commands/pain-retry.js +11 -39
- package/pd-cli/dist/commands/pain-retry.js.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-enqueue-successors.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-enqueue-successors.js +32 -0
- package/pd-cli/dist/commands/runtime-internalization-enqueue-successors.js.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-run-once.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-run-once.js +4 -2
- package/pd-cli/dist/commands/runtime-internalization-run-once.js.map +1 -1
- package/pd-cli/dist/commands/runtime.d.ts +1 -4
- package/pd-cli/dist/commands/runtime.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime.js +25 -95
- package/pd-cli/dist/commands/runtime.js.map +1 -1
- package/pd-cli/dist/index.js +2 -5
- package/pd-cli/dist/index.js.map +1 -1
- package/pd-cli/dist/services/config-doctor.d.ts.map +1 -1
- package/pd-cli/dist/services/config-doctor.js +9 -21
- package/pd-cli/dist/services/config-doctor.js.map +1 -1
- package/pd-cli/dist/services/mainline-snapshot-assembler.d.ts.map +1 -1
- package/pd-cli/dist/services/mainline-snapshot-assembler.js +2 -2
- package/pd-cli/dist/services/mainline-snapshot-assembler.js.map +1 -1
- package/pd-cli/dist/services/resolve-runtime-from-pd-config.d.ts +0 -7
- package/pd-cli/dist/services/resolve-runtime-from-pd-config.d.ts.map +1 -1
- package/pd-cli/dist/services/resolve-runtime-from-pd-config.js +0 -5
- package/pd-cli/dist/services/resolve-runtime-from-pd-config.js.map +1 -1
- package/pd-cli/dist/services/runtime-adapter-resolver.d.ts +1 -8
- package/pd-cli/dist/services/runtime-adapter-resolver.d.ts.map +1 -1
- package/pd-cli/dist/services/runtime-adapter-resolver.js +13 -39
- package/pd-cli/dist/services/runtime-adapter-resolver.js.map +1 -1
- package/pd-cli/package.json +1 -1
- package/plugin/dist/bundle.js +468 -458
- package/plugin/dist/openclaw.plugin.json +1 -1
- package/plugin/openclaw.plugin.json +1 -1
- package/plugin/package.json +1 -1
- package/release-manager/dist/mvp-config.d.ts.map +1 -1
- package/release-manager/dist/mvp-config.js +8 -10
- package/release-manager/dist/mvp-config.js.map +1 -1
- package/release-manager/package.json +2 -2
- package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.d.ts +0 -72
- package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.d.ts.map +0 -1
- package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.js +0 -837
- package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.js.map +0 -1
- package/core/dist/runtime-v2/utils/cli-process-runner.d.ts +0 -35
- package/core/dist/runtime-v2/utils/cli-process-runner.d.ts.map +0 -1
- package/core/dist/runtime-v2/utils/cli-process-runner.js +0 -263
- package/core/dist/runtime-v2/utils/cli-process-runner.js.map +0 -1
|
@@ -1,21 +1,127 @@
|
|
|
1
1
|
function record(value) { return typeof value === 'object' && value !== null && !Array.isArray(value); }
|
|
2
2
|
function integer(value) { return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0; }
|
|
3
|
+
function stringOrNull(value) { return value === null || typeof value === 'string'; }
|
|
4
|
+
function validatePainSource(value) {
|
|
5
|
+
if (!record(value) || typeof value.painId !== 'string' || !stringOrNull(value.text)
|
|
6
|
+
|| typeof value.source !== 'string' || !stringOrNull(value.createdAt))
|
|
7
|
+
return null;
|
|
8
|
+
return { painId: value.painId, text: value.text, source: value.source, createdAt: value.createdAt };
|
|
9
|
+
}
|
|
10
|
+
const GENERATION_STAGES = ['not_built', 'in_progress', 'blocked', 'advanced', 'ambiguous'];
|
|
11
|
+
function isGenerationStage(value) {
|
|
12
|
+
return typeof value === 'string' && GENERATION_STAGES.includes(value);
|
|
13
|
+
}
|
|
14
|
+
/** null = legitimately absent (unlinked row); 'invalid' = malformed row. */
|
|
15
|
+
function validateGeneration(value) {
|
|
16
|
+
if (value === null)
|
|
17
|
+
return null;
|
|
18
|
+
if (!record(value) || !isGenerationStage(value.stage) || !stringOrNull(value.stageKind)
|
|
19
|
+
|| !stringOrNull(value.reasonCode) || !stringOrNull(value.detail))
|
|
20
|
+
return 'invalid';
|
|
21
|
+
// A blocked generation names the stage it stopped at; reasonCode may be
|
|
22
|
+
// null for legacy tasks without humanReviewContext.
|
|
23
|
+
return { stage: value.stage, stageKind: value.stageKind, reasonCode: value.reasonCode, detail: value.detail };
|
|
24
|
+
}
|
|
25
|
+
function validateResume(value) {
|
|
26
|
+
if (value === null)
|
|
27
|
+
return null;
|
|
28
|
+
if (!record(value) || (value.status !== 'ready' && value.status !== 'refused')
|
|
29
|
+
|| !stringOrNull(value.reason) || !stringOrNull(value.scribeTaskId)
|
|
30
|
+
|| !(value.taskRevisionEpoch === null || integer(value.taskRevisionEpoch)))
|
|
31
|
+
return 'invalid';
|
|
32
|
+
return { status: value.status, reason: value.reason, scribeTaskId: value.scribeTaskId, taskRevisionEpoch: value.taskRevisionEpoch };
|
|
33
|
+
}
|
|
34
|
+
/** PRI-1048 R6 #4: source-correct-once eligibility preview (null = not applicable). */
|
|
35
|
+
function validateSourceCorrection(value) {
|
|
36
|
+
if (value === null)
|
|
37
|
+
return null;
|
|
38
|
+
if (!record(value) || (value.status !== 'ready' && value.status !== 'unavailable')
|
|
39
|
+
|| !stringOrNull(value.reason) || !stringOrNull(value.scribeTaskId)
|
|
40
|
+
|| !stringOrNull(value.artificerTaskId) || !stringOrNull(value.scribeArtifactDigest)
|
|
41
|
+
|| !(value.expectedBindingRevision === null || integer(value.expectedBindingRevision)))
|
|
42
|
+
return 'invalid';
|
|
43
|
+
// ready MUST carry the full CAS input set — a half-filled preview would render
|
|
44
|
+
// a CTA that can never fire.
|
|
45
|
+
if (value.status === 'ready' && (value.scribeTaskId === null || value.artificerTaskId === null
|
|
46
|
+
|| value.scribeArtifactDigest === null || value.expectedBindingRevision === null))
|
|
47
|
+
return 'invalid';
|
|
48
|
+
return {
|
|
49
|
+
status: value.status, reason: value.reason, scribeTaskId: value.scribeTaskId,
|
|
50
|
+
artificerTaskId: value.artificerTaskId, scribeArtifactDigest: value.scribeArtifactDigest,
|
|
51
|
+
expectedBindingRevision: value.expectedBindingRevision,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function validateBinding(value) {
|
|
55
|
+
if (!record(value))
|
|
56
|
+
return null;
|
|
57
|
+
if (value.status === 'unlinked')
|
|
58
|
+
return { status: 'unlinked' };
|
|
59
|
+
if (value.status === 'binding_revoked')
|
|
60
|
+
return { status: 'binding_revoked' };
|
|
61
|
+
if (value.status === 'attention' && typeof value.reason === 'string')
|
|
62
|
+
return { status: 'attention', reason: value.reason };
|
|
63
|
+
if (value.status === 'bound' && record(value.principle) && typeof value.principle.principleId === 'string'
|
|
64
|
+
&& typeof value.principle.text === 'string' && typeof value.principle.status === 'string'
|
|
65
|
+
&& integer(value.principle.version) && integer(value.principle.revision) && typeof value.principle.decidedAt === 'string') {
|
|
66
|
+
const principle = {
|
|
67
|
+
principleId: value.principle.principleId, text: value.principle.text, status: value.principle.status,
|
|
68
|
+
version: value.principle.version, revision: value.principle.revision, decidedAt: value.principle.decidedAt,
|
|
69
|
+
};
|
|
70
|
+
return { status: 'bound', principle };
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
3
74
|
export function validateBindingQueue(value) {
|
|
4
|
-
if (!record(value) || !Array.isArray(value.items)
|
|
75
|
+
if (!record(value) || !Array.isArray(value.items) || typeof value.truncated !== 'boolean'
|
|
76
|
+
|| !record(value.summary) || !integer(value.summary.painGroups) || !integer(value.summary.candidates)
|
|
77
|
+
|| !integer(value.summary.bound) || !integer(value.summary.unlinked) || !integer(value.summary.blocked))
|
|
5
78
|
return null;
|
|
6
79
|
const items = [];
|
|
80
|
+
const seen = new Set();
|
|
7
81
|
for (const item of value.items) {
|
|
8
|
-
if (!record(item) || typeof item.candidateId !== 'string' || typeof item.text !== 'string'
|
|
82
|
+
if (!record(item) || typeof item.candidateId !== 'string' || typeof item.text !== 'string'
|
|
83
|
+
|| typeof item.diagnosisStatus !== 'string')
|
|
9
84
|
return null;
|
|
10
|
-
|
|
85
|
+
// The queue contract is one entry per canonical candidate (PRI-1048);
|
|
86
|
+
// a duplicated id means the response itself is malformed.
|
|
87
|
+
if (seen.has(item.candidateId))
|
|
88
|
+
return null;
|
|
89
|
+
seen.add(item.candidateId);
|
|
90
|
+
const pain = validatePainSource(item.pain);
|
|
91
|
+
const binding = validateBinding(item.binding);
|
|
92
|
+
// Nullable projection fields must still be PRESENT keys (rc-3): an absent
|
|
93
|
+
// generation/resume is a malformed row, not an unlinked row.
|
|
94
|
+
const generation = validateGeneration(item.generation);
|
|
95
|
+
const resume = validateResume(item.resume);
|
|
96
|
+
const sourceCorrection = validateSourceCorrection(item.sourceCorrection);
|
|
97
|
+
if (!pain || !binding || generation === 'invalid' || resume === 'invalid' || sourceCorrection === 'invalid'
|
|
98
|
+
|| !Object.hasOwn(item, 'generation') || !Object.hasOwn(item, 'resume') || !Object.hasOwn(item, 'sourceCorrection'))
|
|
99
|
+
return null;
|
|
100
|
+
items.push({
|
|
101
|
+
candidateId: item.candidateId, text: item.text, pain,
|
|
102
|
+
diagnosisStatus: item.diagnosisStatus, binding,
|
|
103
|
+
generation,
|
|
104
|
+
resume,
|
|
105
|
+
sourceCorrection,
|
|
106
|
+
});
|
|
11
107
|
}
|
|
12
|
-
return {
|
|
108
|
+
return {
|
|
109
|
+
items,
|
|
110
|
+
summary: {
|
|
111
|
+
painGroups: value.summary.painGroups, candidates: value.summary.candidates,
|
|
112
|
+
bound: value.summary.bound, unlinked: value.summary.unlinked, blocked: value.summary.blocked,
|
|
113
|
+
},
|
|
114
|
+
truncated: value.truncated,
|
|
115
|
+
};
|
|
13
116
|
}
|
|
14
117
|
export function validateBindingReview(value) {
|
|
15
|
-
if (!record(value) || typeof value.candidateId !== 'string' || typeof value.candidateText !== 'string'
|
|
118
|
+
if (!record(value) || typeof value.candidateId !== 'string' || typeof value.candidateText !== 'string'
|
|
16
119
|
|| typeof value.evidence !== 'string' || typeof value.candidateDigest !== 'string' || !integer(value.currentRevision)
|
|
17
120
|
|| typeof value.resumeNotice !== 'string' || !Array.isArray(value.eligibleTargets) || value.eligibleTargets.length > 20)
|
|
18
121
|
return null;
|
|
122
|
+
const sourcePain = validatePainSource(value.sourcePain);
|
|
123
|
+
if (!sourcePain)
|
|
124
|
+
return null;
|
|
19
125
|
let currentBinding = null;
|
|
20
126
|
if (value.currentBinding !== null) {
|
|
21
127
|
const b = value.currentBinding;
|
|
@@ -23,14 +129,41 @@ export function validateBindingReview(value) {
|
|
|
23
129
|
return null;
|
|
24
130
|
currentBinding = { action: b.action, principleId: b.principleId, reason: b.reason, revision: b.revision };
|
|
25
131
|
}
|
|
132
|
+
let boundPrinciple = null;
|
|
133
|
+
if (value.boundPrinciple !== null) {
|
|
134
|
+
if (!record(value.boundPrinciple) || typeof value.boundPrinciple.principleId !== 'string'
|
|
135
|
+
|| typeof value.boundPrinciple.text !== 'string' || typeof value.boundPrinciple.status !== 'string'
|
|
136
|
+
|| !integer(value.boundPrinciple.version) || !integer(value.boundPrinciple.revision)
|
|
137
|
+
|| typeof value.boundPrinciple.decidedAt !== 'string')
|
|
138
|
+
return null;
|
|
139
|
+
boundPrinciple = {
|
|
140
|
+
principleId: value.boundPrinciple.principleId, text: value.boundPrinciple.text,
|
|
141
|
+
status: value.boundPrinciple.status, version: value.boundPrinciple.version,
|
|
142
|
+
revision: value.boundPrinciple.revision, decidedAt: value.boundPrinciple.decidedAt,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
26
145
|
const eligibleTargets = [];
|
|
27
146
|
for (const p of value.eligibleTargets) {
|
|
28
147
|
if (!record(p) || typeof p.principleId !== 'string' || typeof p.text !== 'string' || typeof p.status !== 'string' || !integer(p.version) || typeof p.digest !== 'string')
|
|
29
148
|
return null;
|
|
30
149
|
eligibleTargets.push({ principleId: p.principleId, text: p.text, status: p.status, version: p.version, digest: p.digest });
|
|
31
150
|
}
|
|
32
|
-
|
|
33
|
-
|
|
151
|
+
if (!Object.hasOwn(value, 'generation') || !Object.hasOwn(value, 'resume') || !Object.hasOwn(value, 'sourceCorrection'))
|
|
152
|
+
return null;
|
|
153
|
+
const generation = validateGeneration(value.generation);
|
|
154
|
+
const resume = validateResume(value.resume);
|
|
155
|
+
const sourceCorrection = validateSourceCorrection(value.sourceCorrection);
|
|
156
|
+
if (generation === 'invalid' || resume === 'invalid' || sourceCorrection === 'invalid')
|
|
157
|
+
return null;
|
|
158
|
+
return {
|
|
159
|
+
candidateId: value.candidateId, candidateText: value.candidateText, sourcePain,
|
|
160
|
+
evidence: value.evidence, candidateDigest: value.candidateDigest, currentRevision: value.currentRevision,
|
|
161
|
+
currentBinding, boundPrinciple, eligibleTargets,
|
|
162
|
+
generation,
|
|
163
|
+
resume,
|
|
164
|
+
sourceCorrection,
|
|
165
|
+
resumeNotice: value.resumeNotice,
|
|
166
|
+
};
|
|
34
167
|
}
|
|
35
168
|
export function validateBindingMutation(value) {
|
|
36
169
|
if (!record(value) || !['bound', 'already_bound', 'revoked', 'already_revoked'].includes(String(value.status)) || typeof value.status !== 'string')
|
|
@@ -44,3 +177,12 @@ export function validateBindingMutation(value) {
|
|
|
44
177
|
return { status: value.status, ...(record(value.revision) && typeof value.revision.status === 'string' ? { revisionStatus: value.revision.status } : {}),
|
|
45
178
|
...(typeof value.nextAction === 'string' ? { nextAction: value.nextAction } : {}) };
|
|
46
179
|
}
|
|
180
|
+
export function validateBindingRevise(value) {
|
|
181
|
+
if (!record(value) || typeof value.status !== 'string' || value.status.length === 0)
|
|
182
|
+
return null;
|
|
183
|
+
if (value.reason !== undefined && typeof value.reason !== 'string')
|
|
184
|
+
return null;
|
|
185
|
+
if (value.nextAction !== undefined && typeof value.nextAction !== 'string')
|
|
186
|
+
return null;
|
|
187
|
+
return { status: value.status, ...(typeof value.reason === 'string' ? { reason: value.reason } : {}), ...(typeof value.nextAction === 'string' ? { nextAction: value.nextAction } : {}) };
|
|
188
|
+
}
|
|
@@ -1273,6 +1273,12 @@
|
|
|
1273
1273
|
border-color: color-mix(in oklab, var(--color-amber) 40%, transparent);
|
|
1274
1274
|
}
|
|
1275
1275
|
}
|
|
1276
|
+
.border-amber\/45 {
|
|
1277
|
+
border-color: color-mix(in srgb, #a66a2a 45%, transparent);
|
|
1278
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
1279
|
+
border-color: color-mix(in oklab, var(--color-amber) 45%, transparent);
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1276
1282
|
.border-border {
|
|
1277
1283
|
border-color: var(--color-border);
|
|
1278
1284
|
}
|