omnius 1.0.673 → 1.0.675
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/dist/index.js +3591 -2309
- package/docs/ADJUDICATION.md +257 -0
- package/docs/DISCOVERY.json +30 -0
- package/docs/DISCOVERY.md +1 -0
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# Evidence-bound adjudication
|
|
2
|
+
|
|
3
|
+
`adjudicate` resolves a genuine decision impasse. It does not replace normal
|
|
4
|
+
engineering judgment. It creates a small, tools-free decision environment. It
|
|
5
|
+
then runs independent constituent assessments and a final judge.
|
|
6
|
+
|
|
7
|
+
The tool separates three things:
|
|
8
|
+
|
|
9
|
+
1. Evidence is part of the caller-supplied admissible record.
|
|
10
|
+
2. Arguments are claims about that evidence. Arguments are not evidence.
|
|
11
|
+
3. Constituent findings are analysis. Agreement between constituents does not
|
|
12
|
+
create a new fact.
|
|
13
|
+
|
|
14
|
+
The host validates all identifiers, citations, panel results, and the verdict.
|
|
15
|
+
The tool holds the case when it cannot validate the required quorum or final
|
|
16
|
+
contract. It does not guess a result.
|
|
17
|
+
|
|
18
|
+
## When to use it
|
|
19
|
+
|
|
20
|
+
Use `adjudicate` when all of these conditions are true:
|
|
21
|
+
|
|
22
|
+
- The active task has one exact, unresolved decision.
|
|
23
|
+
- Two or more outcomes remain materially plausible.
|
|
24
|
+
- The decision affects the next action.
|
|
25
|
+
- The available evidence conflicts or supports different risk tradeoffs.
|
|
26
|
+
- A fresh, impartial context can assess the decision more reliably than the
|
|
27
|
+
main loop's large working context.
|
|
28
|
+
|
|
29
|
+
Do not use it for an ordinary implementation choice, a factual lookup, or a
|
|
30
|
+
way to avoid gathering missing evidence.
|
|
31
|
+
|
|
32
|
+
## Minimum call
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"question": "Should the failed release be rolled back or repaired in place?",
|
|
37
|
+
"allowedOutcomes": ["rollback", "repair_in_place"],
|
|
38
|
+
"evidence": [
|
|
39
|
+
{
|
|
40
|
+
"id": "E1",
|
|
41
|
+
"kind": "test_result",
|
|
42
|
+
"source": "integration run 2026-08-31T18:00:00Z",
|
|
43
|
+
"content": "The post-deploy integration suite failed 14 of 80 tests."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "E2",
|
|
47
|
+
"kind": "artifact",
|
|
48
|
+
"source": "release receipt sha256:abc",
|
|
49
|
+
"content": "The prior artifact matches the last known-good receipt."
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
The case framer derives three distinct constituent assignments by default. Set
|
|
56
|
+
`panelSize` from 2 through 6 to change that count.
|
|
57
|
+
|
|
58
|
+
## Detailed call
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"caseId": "release-impasse-2026-08-31",
|
|
63
|
+
"question": "Should the failed release be rolled back or repaired in place?",
|
|
64
|
+
"context": "The release is paused. No mutation is authorized during this decision.",
|
|
65
|
+
"allowedOutcomes": ["rollback", "repair_in_place"],
|
|
66
|
+
"burdenOfProof": "clear_and_convincing",
|
|
67
|
+
"decisionRules": [
|
|
68
|
+
"Prefer verified recovery evidence.",
|
|
69
|
+
"Do not infer a successful recovery from panel agreement."
|
|
70
|
+
],
|
|
71
|
+
"evidence": [
|
|
72
|
+
{
|
|
73
|
+
"id": "E1",
|
|
74
|
+
"kind": "test_result",
|
|
75
|
+
"source": "integration run 2026-08-31T18:00:00Z",
|
|
76
|
+
"content": "The post-deploy integration suite failed 14 of 80 tests.",
|
|
77
|
+
"reliability": 0.98
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "E2",
|
|
81
|
+
"kind": "artifact",
|
|
82
|
+
"source": "release receipt sha256:abc",
|
|
83
|
+
"content": "The prior artifact matches the last known-good receipt."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "E3",
|
|
87
|
+
"kind": "observation",
|
|
88
|
+
"source": "operations log",
|
|
89
|
+
"content": "No rollback rehearsal exists for the new migration."
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
"arguments": [
|
|
93
|
+
{
|
|
94
|
+
"id": "A1",
|
|
95
|
+
"position": "rollback",
|
|
96
|
+
"claim": "The known-good artifact makes rollback more reversible.",
|
|
97
|
+
"citedEvidenceIds": ["E1", "E2"]
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "A2",
|
|
101
|
+
"position": "repair_in_place",
|
|
102
|
+
"claim": "Rollback has untested migration risk.",
|
|
103
|
+
"citedEvidenceIds": ["E3"]
|
|
104
|
+
}
|
|
105
|
+
],
|
|
106
|
+
"constituents": [
|
|
107
|
+
{
|
|
108
|
+
"id": "correctness",
|
|
109
|
+
"label": "Correctness",
|
|
110
|
+
"question": "Which outcome is best supported by functional evidence?",
|
|
111
|
+
"evidenceIds": ["E1", "E2"],
|
|
112
|
+
"argumentIds": ["A1"],
|
|
113
|
+
"decisionRuleIds": ["rule-1", "rule-2"]
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"id": "reversibility",
|
|
117
|
+
"label": "Reversibility",
|
|
118
|
+
"question": "Which outcome has the safest verified recovery path?",
|
|
119
|
+
"evidenceIds": ["E2", "E3"],
|
|
120
|
+
"argumentIds": ["A1", "A2"],
|
|
121
|
+
"decisionRuleIds": ["rule-1", "rule-2"]
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": "risk",
|
|
125
|
+
"label": "Operational risk",
|
|
126
|
+
"question": "What unsupported risk remains for each outcome?",
|
|
127
|
+
"evidenceIds": ["E1", "E3"],
|
|
128
|
+
"argumentIds": ["A2"],
|
|
129
|
+
"decisionRuleIds": ["rule-1", "rule-2"]
|
|
130
|
+
}
|
|
131
|
+
],
|
|
132
|
+
"quorum": 2,
|
|
133
|
+
"maxConcurrency": 3,
|
|
134
|
+
"timeoutMs": 120000,
|
|
135
|
+
"maxTokensPerConstituent": 2048,
|
|
136
|
+
"maxJudgeTokens": 3072
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
`insufficient_evidence` is a reserved verdict. Do not include it in
|
|
141
|
+
`allowedOutcomes`. The host makes it available to constituents and the judge.
|
|
142
|
+
It produces a held case instead of a binding decision.
|
|
143
|
+
|
|
144
|
+
## Execution phases
|
|
145
|
+
|
|
146
|
+
### 1. Record admission
|
|
147
|
+
|
|
148
|
+
The host validates the input before inference. It rejects duplicate IDs,
|
|
149
|
+
unknown citations, invalid outcome names, incomplete manual assignment
|
|
150
|
+
coverage, and a quorum that exceeds the panel size.
|
|
151
|
+
|
|
152
|
+
The host creates a canonical case record and SHA-256 record hash.
|
|
153
|
+
|
|
154
|
+
### 2. Case framing
|
|
155
|
+
|
|
156
|
+
If the caller omits `constituents`, a tools-free case framer creates 2 through
|
|
157
|
+
6 assignments. Each assignment has a distinct question and an explicit subset
|
|
158
|
+
of evidence, arguments, and decision rules.
|
|
159
|
+
|
|
160
|
+
The host rejects unknown IDs and incomplete evidence coverage. It retries one
|
|
161
|
+
time with validation codes only. The invalid model output is not added to the
|
|
162
|
+
repair prompt.
|
|
163
|
+
|
|
164
|
+
### 3. Constituent fan-out
|
|
165
|
+
|
|
166
|
+
The host runs assignments with bounded concurrency. Each constituent gets a
|
|
167
|
+
fresh context that contains only:
|
|
168
|
+
|
|
169
|
+
- the exact case question and allowed outcomes;
|
|
170
|
+
- the stated burden;
|
|
171
|
+
- its assignment;
|
|
172
|
+
- its assigned decision rules;
|
|
173
|
+
- its assigned evidence;
|
|
174
|
+
- its assigned arguments.
|
|
175
|
+
|
|
176
|
+
The constituent gets no tools. It has no mutation authority. It must return a
|
|
177
|
+
public assessment, a recommendation, confidence, cited evidence IDs, claims,
|
|
178
|
+
counterarguments, and uncertainties.
|
|
179
|
+
|
|
180
|
+
The host rejects unassigned citations, unknown outcomes, identity mismatches,
|
|
181
|
+
and invalid schemas. One strict repair attempt is allowed.
|
|
182
|
+
|
|
183
|
+
### 4. Quorum
|
|
184
|
+
|
|
185
|
+
The default quorum is two thirds of the requested panel, rounded up, with a
|
|
186
|
+
minimum of two. A caller can set a stricter quorum.
|
|
187
|
+
|
|
188
|
+
The tool holds the case if too few findings pass host validation. It does not
|
|
189
|
+
invoke the judge without quorum.
|
|
190
|
+
|
|
191
|
+
### 5. Judge synthesis
|
|
192
|
+
|
|
193
|
+
The judge gets the immutable full case record and validated constituent
|
|
194
|
+
findings. The prompt labels findings as analysis rather than evidence.
|
|
195
|
+
|
|
196
|
+
The judge must:
|
|
197
|
+
|
|
198
|
+
- apply the burden and decision rules;
|
|
199
|
+
- cite only admitted evidence IDs;
|
|
200
|
+
- consider every validated constituent;
|
|
201
|
+
- accept or reject every constituent finding exactly once;
|
|
202
|
+
- preserve material dissent;
|
|
203
|
+
- select an allowed outcome or `insufficient_evidence`.
|
|
204
|
+
|
|
205
|
+
The host validates this contract. It holds the case after two invalid judge
|
|
206
|
+
responses.
|
|
207
|
+
|
|
208
|
+
### 6. Durable receipt
|
|
209
|
+
|
|
210
|
+
Artifacts are written atomically under:
|
|
211
|
+
|
|
212
|
+
```text
|
|
213
|
+
.omnius/adjudications/<case-id>/run-<timestamp>/
|
|
214
|
+
case.json
|
|
215
|
+
assignments.json
|
|
216
|
+
findings.json
|
|
217
|
+
verdict.json
|
|
218
|
+
receipt.json
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
`verdict.json` is absent when the case holds before a valid verdict. The
|
|
222
|
+
receipt records hashes, quorum, validation failures, elapsed time, and final
|
|
223
|
+
status.
|
|
224
|
+
|
|
225
|
+
## CLI display
|
|
226
|
+
|
|
227
|
+
The CLI opens one live block when record admission starts. It shows:
|
|
228
|
+
|
|
229
|
+
- case identity and decision question;
|
|
230
|
+
- record size, burden, and allowed outcomes;
|
|
231
|
+
- constituent assignments;
|
|
232
|
+
- separately attributed public assessment streams;
|
|
233
|
+
- host validation results;
|
|
234
|
+
- the judge's public rationale stream;
|
|
235
|
+
- final verdict, citations, status, and receipt path.
|
|
236
|
+
|
|
237
|
+
The block has a `read mode` row. Select it to expand all retained rows. The
|
|
238
|
+
display retains a bounded amount of text. It strips terminal controls and uses
|
|
239
|
+
the normal secret redactor. It does not display provider hidden reasoning.
|
|
240
|
+
|
|
241
|
+
## Harness
|
|
242
|
+
|
|
243
|
+
Run the deterministic impasse harness:
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
pnpm harness:adjudication
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
The harness does not load a model and does not use a GPU. It verifies parallel
|
|
250
|
+
constituent overlap, streamed public assessments, judge synthesis, and receipt
|
|
251
|
+
persistence. The focused automated tests also cover invalid citations, strict
|
|
252
|
+
repair, partial valid quorum, automatic case framing, and no-judge behavior
|
|
253
|
+
when quorum fails.
|
|
254
|
+
|
|
255
|
+
The implementation lives in
|
|
256
|
+
`packages/orchestrator/src/adjudication.ts`. The live projection lives in
|
|
257
|
+
`packages/cli/src/tui/adjudication-live-block.ts`.
|
package/docs/DISCOVERY.json
CHANGED
|
@@ -28266,6 +28266,36 @@
|
|
|
28266
28266
|
"api.tools"
|
|
28267
28267
|
]
|
|
28268
28268
|
},
|
|
28269
|
+
{
|
|
28270
|
+
"id": "guide.adjudication-uppercase",
|
|
28271
|
+
"kind": "guide",
|
|
28272
|
+
"title": "Evidence-bound adjudication",
|
|
28273
|
+
"summary": "adjudicate resolves a genuine decision impasse. It does not replace normal engineering judgment. It creates a small, tools-free decision environment. It then runs independent constituent assessments and a final judge.",
|
|
28274
|
+
"keywords": [
|
|
28275
|
+
"ADJUDICATION",
|
|
28276
|
+
"md"
|
|
28277
|
+
],
|
|
28278
|
+
"maturity": "stable",
|
|
28279
|
+
"audiences": [
|
|
28280
|
+
"user",
|
|
28281
|
+
"integrator",
|
|
28282
|
+
"coding-agent"
|
|
28283
|
+
],
|
|
28284
|
+
"layer": "documentation",
|
|
28285
|
+
"interfaces": [
|
|
28286
|
+
{
|
|
28287
|
+
"type": "file",
|
|
28288
|
+
"target": "docs/ADJUDICATION.md"
|
|
28289
|
+
}
|
|
28290
|
+
],
|
|
28291
|
+
"references": [
|
|
28292
|
+
{
|
|
28293
|
+
"type": "documentation",
|
|
28294
|
+
"target": "docs/ADJUDICATION.md",
|
|
28295
|
+
"relation": "canonical-artifact"
|
|
28296
|
+
}
|
|
28297
|
+
]
|
|
28298
|
+
},
|
|
28269
28299
|
{
|
|
28270
28300
|
"id": "guide.agent-memory-index",
|
|
28271
28301
|
"kind": "guide",
|
package/docs/DISCOVERY.md
CHANGED
|
@@ -403,6 +403,7 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
|
|
|
403
403
|
|
|
404
404
|
| ID | Title | Summary |
|
|
405
405
|
| --- | --- | --- |
|
|
406
|
+
| `guide.adjudication-uppercase` | Evidence-bound adjudication | adjudicate resolves a genuine decision impasse. It does not replace normal engineering judgment. It creates a small, tools-free decision environment. It then runs independent constituent assessments and a final judge. |
|
|
406
407
|
| `guide.agent-memory-index` | Agent Memory Index | Use the Omnius docs skills when an agent needs to explore the documentation corpus instead of loading the whole docs tree. |
|
|
407
408
|
| `guide.agent-memory-index-uppercase` | Agent-Explorable Documentation | Omnius documentation is exposed to agents through project-local AIWG-style bundles under .aiwg/addons/. |
|
|
408
409
|
| `guide.architecture-agent-system-map` | Omnius Agent System Map | Use this page when you need to understand how a user-visible behavior travels through Omnius, where its state lives, and which package owns a change. For a specific task recipe, search the generated catalog first: |
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omnius",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.675",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "omnius",
|
|
9
|
-
"version": "1.0.
|
|
9
|
+
"version": "1.0.675",
|
|
10
10
|
"bundleDependencies": [
|
|
11
11
|
"image-to-ascii"
|
|
12
12
|
],
|
package/package.json
CHANGED