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.
@@ -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`.
@@ -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: |
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.673",
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.673",
9
+ "version": "1.0.675",
10
10
  "bundleDependencies": [
11
11
  "image-to-ascii"
12
12
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.673",
3
+ "version": "1.0.675",
4
4
  "description": "AI coding agent powered by open-source models (Ollama/vLLM) — interactive TUI with agentic tool-calling loop",
5
5
  "type": "module",
6
6
  "main": "./dist/library.js",